RHCSA 考试笔记

考试速查笔记

第 1 题:配置网络地址

题目

虚拟机 serveraroot 密码为 redhat,请为此虚拟机配置以下网络参数:

  • 主机名:servera.lab.example.com
  • IP地址:172.25.250.10
  • 子网掩码:255.255.255.0
  • 默认网关:172.25.250.254
  • DNS服务器:172.25.250.254

笔记 nmtui

使用 nmtui

第 2 题:配置软件仓库

题目

请配置 servera 的软件仓库地址如下:

笔记 /etc/yum.repos.d/*.repo

  • /etc/yum.repos.d/dvd.repo 示例
1
2
3
4
5
6
7
8
9
10
[BaseOS]
name=RHEL9_BaseOS # 任意
baseurl=http://content.example.com/rhel9.0/x86_64/dvd/BaseOS
enabled=1
gpgcheck=0 # 注意!别漏了!
[AppStream]
name=RHEL9_AppStream # 任意
baseurl=http://content.example.com/rhel9.0/x86_64/dvd/AppStream
enabled=1
gpgcheck=0 # 注意!别漏了!
1
2
3
4
5
6
7
8
# 清空原有的仓库缓存:
dnf clean all

# 生成新的缓存:
dnf makecache

# 验证仓库:
dnf repolist all

第 3 题:调试 SELINUX

题目

web 服务器在非常规端口 82 上运行时失败,请解决 web 服务器遇到的故障, 并使其满足以下条件:

  • web 服务器可以访问 /var/www/html 中已经存在的网页文件
    (注意:不要删除或者其他方式改动现有的文件内容)
  • Web 服务器通过 82 端口访问
  • Web 服务器在系统启动时应自动启动
  • 确保SELinux保护机制运行在 Enforcing 模式

笔记 semanage

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 确认 httpd 端口
grep Listen /etc/httpd/conf/httpd.conf

# 为 82 端口(port)加上(add) http_port_t 上下文类型标签(type)
semanage port -a -t http_port_t -p tcp 82

# 为 /var/www/html/ 下的所有文件修改上下文类型(type)
chcon -t httpd_sys_content_t /var/www/html/*

# 启动服务并设为开机自启
systemctl enable --now httpd.service

# 修改 SELinux 模式
setenforce 1

# 检查
curl http://servera:82/file1
getenforce

如果忘了上下文类型怎么写:

1
2
3
4
5
# 查询 http 端口的上下文类型
semanage port -l | grep http

# 查询 /var/www 下所有文件的上下文类型
semanage fcontext -l | grep /var/www

第 4 题:创建用户账户

题目

根据下列要求创建用户及组账号:

  • 名为 admins 的组
  • 用户 harry,其附属组为 admins
  • 用户 natasha,其附属组还属于 admins
  • 用户 alice,没有可交互的登录 Shell,且不属于 admins
  • harrynatashaalice 的密码都应该是 redhat

笔记 groupadd useradd

1
2
3
4
5
6
7
8
9
10
11
12
# 创建admins组
groupadd admins

# 创建用户并配置组和登录 shell
useradd harry -G admins
useradd natasha -G admins
useradd alice -s /sbin/nologin

# 设置密码
echo redhat | passwd --stdin alice
echo redhat | passwd --stdin natasha
echo redhat | passwd --stdin harry

第 5 题:配置周期性计划任务

题目

以用户 natasha 的身份每周三的下午15:30运行 logger "This is a rhcsa exam"

笔记 crontab -e

1
2
3
4
5
6
# 配置计划任务,-u 指定用户
crontab -u natasha -e

# 在 vim 输入以下内容
30 15 * * 3 /user/bin/logger "This is a rhcsa exam"
# 分时日月周,命令尽量写完整路径,which 查找命令路径

第 6 题:创建共享目录

题目

创建具有以下特点的共用目录:

  • /home/tools 的所有组是 admins
  • 此目录能被 admins 组的成员读取、写入和访问,除 root 外其他用户没有这些权限
  • 在此目录下创建的文件,其组的所有权自动设置为 admins

笔记 chmod

1
2
3
4
5
6
7
8
9
10
11
12
# 创建目录:
mkdir /home/tools
# 设置拥有组:
chgrp admins /home/tools
# 设置权限:
chmod g+rwx,g+s,o=--- /home/tools
# 或
chmod 2770 /home/tools
chmod g+s /home/tools
# 验证效果:
ls -ld /home/tools
drwxrws---. 2 root admins 6 Nov 10 13:19 /home/tools

第 7 题:配置网络时间同步

题目

servera 配置 NTP 服务(网络时间源),向 classroom.example.com 同步时间

笔记 /etc/chrony.conf

  • /etc/chrony.conf 示例
1
server classroom.example.com iburst
1
2
3
4
5
6
7
8
9
# 重启chronyd服务
systemctl restart chronyd.service

# 验证效果
chronyc sources

MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 172.25.254.254 8 6 7 0 -571us[ -604us] +/- 1299us
  • ^* 表示同步成功,如果考试时出现的不是 * 号,多同步几次;如果一直不是 * 号,只要保证出来的地址是所配置的地址即可,原因为时间服务器在考官机器上,同步周期不一致或者服务未响应;不会影响考试正常评分,考生只需要看到地址出来即可,看到*号是最好的。
  • 域名可能会被解析成 IP,是正常现象

第 8 题:配置文件系统自动挂载

题目

按照以下要求,在 servera 上配置 autofs 自动挂载:

  • serverb 通过 NFS 共享目录 /rhome 到你的系统,此文件系统中包含为用户 remoteuser0 预配置的家目录
  • 预设用户 remoteuser0 的家目录应自动挂载到本地的 /rhome/remoteuser0 目录
  • 预设用户 remoteuser0 的家目录是 serverb.lab.example.com:/rhome/remoteuser0
  • 挂载后的家目录必须可读写

笔记 autofs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装 autofs
yum install autofs -y

# 查看来自 serverb 的共享:
showmount -e serverb

# 在 autofs 主配置文件中添加一条记录,将本地 /rhome 目录指定为基础挂载点,
# 并交由指定配置文件来管理其子目录的动态挂载规则。
echo '/rhome /etc/nfs.auto' >> /etc/auto.master

# 新建次级映射配置文件,编辑具体的自动挂载子目录与远程 NFS 资源的对应关系
echo 'remoteuser0 -rw serverb:/rhome/remoteuser0' > /etc/nfs.auto

# 启动服务并设置开机自启
systemctl enable --now autofs.service

# 验证效果
su - remoteuser0
df -Th | grep rhome
touch test.txt

第 9 题:配置用户账户

题目

配置用户账户 john,用户的 ID 为 2023,此用户的密码应当为 redhat

笔记 useradd

1
2
useradd -u 2023 john
echo redhat | passwd --stdin john

第 10 题:查找文件

题目

查找属于 john 用户所属的文件,并拷贝到 /root/findfiles 目录

笔记 find

1
2
3
4
5
6
# 创建文件存储目录
mkdir -p /root/findfiles

# 从根目录查找文件,所有者 john,额外动作,
# 拷贝到指定目录(-a 归档),{} 占位,结束标志(\ 转义)
find / -user john -exec cp -a {} /root/findfiles/ \;

如果不记得的话也可以分两步命令分别 findcp
cp 要带 -a 归档模式,保持文件归属不变。

第 11 题:查找字符串

题目

找出文件 /etc/man_db.conf 中包含字符串 sbin 的所有行,将其按原始顺序导入到文件 /root/out.txt 中,文件 /root/out.txt 中不得包含空行

笔记 grep

1
grep sbin /etc/man_db.conf > /root/out.txt

第 12 题:创建归档

题目

创建一个名为 /root/backup-YYYY-MM-DD.tar.bz2 格式的 tar 包,用来压缩 /usr/local 目录进行备份

笔记 tar

1
2
3
# -c:创建归档,-j:bzip2格式,-f:指定生成的文件名
# 忘记格式对应的选项时通过 --help 查询
tar -cjf /root/backup-$(date +%F).tar.bz2 /usr/local

bzip2 可能要自行安装

第 13 题:创建容器镜像

题目

使用 http://content.example.com/Containerfile 按照以下要求创建容器

  • 面向用户 sashat,创建一个名为 modify_file:latest 的容器镜像
  • 不要对 Containerfile 进行任何更改

笔记 podman build

1
2
3
4
5
6
7
8
9
# 使用 ssh 切换用户,不要使用 su -
ssh sashat@servera
wget http://content.example.com/Containerfile

# -t:指定tag,最后要带上 Containerfile 所在的路径
podman build -t modify_file:latest .

# 验证
podman images

podman 相关操作时,不要使用 su - 切换用户!!

第 14 题:配置容器开机自启

题目

servera 上创建一个 rootless 容器,并配置为 systemd 服务自动启动,要求如下:

  • 容器名为 txt2pdf
  • 容器使用在其他项目中创建的 modify_file 容器镜像
  • 该服务面向 sashatsystemd 服务运行
  • 服务名称为 container-txt2pdf
  • 系统重启后,容器无需干预自动运行
  • 将本地目录 /opt/txt 附加到容器的 /opt/txt 目录
  • 将本地目录/opt/pdf附加到容器的 /opt/pdf 目录
  • 容器在运行情况下,/opt/txt 下的任何纯文本文件将自动转换为 pdf 文件,并使用相同文件名并加上后缀 pdf 存放到 /opt/pdf 下 (考试的时候后缀可能不会转换,通过 file 命令查看类型即可)

笔记 podman generate systemd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 创建文件夹并修改拥有人拥有组
mkdir /opt/{txt,pdf}
chown sashat:sashat /opt/{txt,pdf}

# ssh 切换用户,不要使用 su -
ssh sashat@servera

# -d 后台运行,-v 路径后面带 :z 或 :Z 防止 SELinux 阻止
podman run -d --name txt2pdf -v /opt/txt/:/opt/txt:Z -v /opt/pdf:/opt/pdf:Z localhost/modify_file:latest

# 创建用户服务单元目录并进入
mkdir -p ~/.config/systemd/user
cd ~/.config/systemd/user

# 生成服务单元文件,--name 根据容器名自动添加 container- 前缀命名,
# --files 生成文件,--new 每次启动新建容器
podman generate systemd txt2pdf --name --files --new

# 删除原有容器,避免与服务冲突
podman rm -f txt2pdf

# 重新读取用户服务单元,设置开机自启,注意 --user !!
systemctl --user daemon-reload
systemctl --user --now enable container-txt2pdf.service

# 验证容器是否正常运行
podman ps
  • 如果忘了用户服务单元目录在哪,使用 man systemd.unit 查询。
  • 注意用户服务要加 --user ,否则会去找全局服务!!
  • 容器运行记得加 -d
  • 正式考试中容器镜像地址以考前须知里的仓库地址为准,建议在考试中使用 podman search 关键字进行搜索。

第 15 题:配置 sudo 提权

题目

允许 admins 组的成员可以以 root 的身份执行任何命令,并且不需要密码

笔记

1
2
3
4
5
6
7
visudo

# % 表示组
%admins ALL=(root) NOPASSWD:ALL

# 验证
sudo -l

visudo 自带语法检查且文件内已有示例

第 16 题:设置默认密码策略

题目

为新创建的用户设置密码策略,要求创建用户时,密码默认 20 天后过期

笔记 /etc/login.defs

1
2
vim /etc/login.defs
PASS_MAX_DAYS 20

记住文件 /etc/login.defs !!

第 17 题:创建系统用于系统监控的脚本

题目

  • 创建一个名为 exam_sysinfo 的脚本
  • 该脚本放置在 /usr/local/bin
  • 该脚本用于获取当前系统进程的信息,要求按照顺序输出进程的所有者,进程的 PID,进程消耗的虚拟内存,实际内存,以及 CPU 的百分比,并其中以 CPU 的百分比进行排序,消耗 CPU 最多的进程在最后显示

笔记

1
2
3
4
5
# 编辑脚本
vim /usr/local/bin/exam_sysinfo

# 赋予执行权限
chmod a+x /usr/local/bin/exam_sysinfo
  • exam_sysinfo 脚本内容
1
2
3
4
5
6
#!/bin/bash
ps -axo user,pid,vsz,rss,%cpu --sort %cpu
# -a:显示其他用户及终端相关的进程
# -x:显示没有控制终端(TTY)的进程
# -o (Format):自定义输出列
# --sort %cpu 升序;--sort -%cpu 降序
  • 如果不记得输出列怎么写,用 ps -aux 确认
  • 自定义列信息不能大写!

第 18 题:运行一个容器

题目

  • http://content.example.com 中提供一个 rsyslog.tar 的镜像文件
  • 将镜像存放在 https://registry.lab.example.com/library 仓库中
  • 使用 https://registry.lab.example.com/library/rsyslog 镜像运行名为 logserver 的容器
  • 将生成的日志存放在 /home/sashat/syslog/ 目录下,并使用 logger 命令发送 “This is a rhcsa exam“ 日志信息并在 /home/sashat/syslog/message 的文件中找到

笔记 podman load -i

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ssh 切换到 sashat 用户!
ssh sashat@servera

# 下载镜像tar包:
wget http://content.example.com/rsyslog.tar

# 导入镜像,-i 表示 input 导入:
podman load -i rsyslog.tar

# 修改 tag:
podman image tag localhost/rsyslog:latest registry.lab.example.com/library/rsyslog:latest

# 登录并推送到仓库:
podman login registry.lab.example.com
podman push registry.lab.example.com/library/rsyslog:latest

# 运行容器,把容器日志目录映射到题目指定的宿主机目录
mkdir /home/sashat/syslog
podman run -d --privileged -v /home/sashat/syslog:/var/log:Z --name logserver registry.lab.example.com/library/rsyslog:latest

# 进入容器执行命令,-i (Interactive) 交互式,-t (tty) 分配一个伪终端
podman exec -it logserver /bin/bash
logger "This is a rhcsa exam"

# 命令执行完后稍等一下会写入日志
  • 注意 ssh 切换用户
  • 容器运行记得加 -d
  • 注意 -v 路径最后要带 :z 否则会被 SELinux 拦截!

第 19 题:重置 root 密码

题目

serverb.lab.example.com 主机的 root 密码设置成 Young

笔记 rd.break

  1. 在 GRUB 开机菜单界面,按键盘 e 键进入编辑模式。
  2. 找到以 linuxlinux16 开头的行,删掉 ro 之后的内容,追加空格及 rd.break 参数。
  3. Ctrl + x 组合键引导系统进入紧急救援模式 Shell。
  4. 重新挂载 /sysroot 为读写模式:
    mount -o remount,rw /sysroot
  5. 切换根目录到硬盘系统:
    chroot /sysroot
  6. 重置 root 用户密码:
    passwd
    (按提示两次输入新的 root 密码)
  7. 创建 SELinux 重新打标标记文件(必须执行):
    touch /.autorelabel
  8. 连续输入两次 exit 命令退出并重启系统:
    exit
    exit

记住 touch /.autorelabel 重新打标!

第 20 题:配置软件仓库

第 2 题:配置软件仓库

第 21 题:调整逻辑卷大小

题目

将名为 rhel 的逻辑卷的大小调整到 512M,确保文件系统的内容保持不变。调整后的逻辑卷的大小范围在 498M 到 511M 的范围内都是可以接受的。

笔记 lvextend -r

1
2
3
4
5
6
# 查看逻辑卷位置
lvdisplay

# -r(--resizefs):自动调整文件系统大小。
# -L 512M:指定目标总容量 512 MB。
lvextend -r -L 512M /dev/exam/rhel

正式考试中一定要检查逻辑卷是否在 fstab 中设置开机自动挂载。

第 22 题:配置 swap 交换分区

题目

  • serverb.lab.example.com 添加一个额外的交换分区 512MiB。
  • 交换分区应在系统启动时自动挂载。
  • 不要删除或以任何方式改动系统上的任何现有交换分区。

笔记 fdisk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 先用 lsblk 看看哪个盘有空间
lsblk

# 进入交互式分区命令,勤用 m 帮助
fdisk /dev/vdb
Command (m for help): n # 新建分区,结束扇区写 +512MiB
Command (m for help): t # 修改分区类型,题目可能会要求
Command (m for help): p # 查看分区情况
Command (m for help): w # 保存并退出,记住!

# 格式化为 swap
mkswap /dev/vdb2

# 配置自动挂载,挂载点和文件系统类型都写 swap
echo '/dev/vdb2 swap swap defaults 0 0' >> /etc/fstab

# 激活所有交换分区
swapon -a

# 验证
swapon -s

第 23 题:创建逻辑卷

题目

根据以下要求,创建新的逻辑卷:

  • 逻辑卷的名字为 mylv,属于 myvg 卷组,大小为 50 个 pe
  • 卷组 myvg 中的逻辑卷的 pe 大小应当为 16MiB
  • 使用 ext3 文件系统将逻辑卷 mylv 格式化
  • 此逻辑卷应当在系统启动时自动挂载到 /mnt/mydata 目录下

笔记 vgcreate lvcreate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看哪个盘有空间
lsblk

# 为逻辑卷分区,空间大于要求
fdisk /dev/vdb

# 创建 vg 和 lv,其中lv 需要 -n 显示指定名称
vgcreate -s 16MiB myvg /dev/vdb3
lvcreate -l 50 -n mylv myvg

# 创建文件系统
mkfs.ext3 /dev/myvg/mylv

# 创建挂载点
mkdir /mnt/mydata

# 配置自动挂载
echo '/dev/myvg/mylv /mnt/mydata ext3 defaults 0 0' >> /etc/fstab

# 手动挂载测试
mount -a
df -Th /mnt/mydata/
  • 如果忘记 pe 选项怎么写,命令加上 --help | grep extent
  • vgcreate 不需要 -nlvcreate 需要 -n
  • 格式化 swap 分区命令为 mkswap,格式化 ext3 或其他格式分区命令为 mkfs.xxx

第 24 题:配置系统调优

题目

将系统的调优配置文件设置为 tuned 推荐的配置文件

笔记 tuned-adm

1
2
3
4
5
6
7
8
9
10
11
12
# 考试机器可能没有安装,需要手动安装
yum install -y tuned

# 查看tuned推荐的配置文件
tuned-adm recommend

# 设置为 tuned 推荐的配置集
tuned-adm profile virtual-guest

# 验证效果
tuned-adm list | grep Current
Current active profile: virtual-guest

tuned 的管理命令为 tuned-adm

变化题:配置 umask

题目

设置 natasha 用户创建的目录权限默认为 733,文件权限为 622,要求永久生效。

笔记 .bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换用户
su - natasha

# 修改文件
echo "umask 044" >> .bashrc

# 重读文件
source .bashrc

# 验证
mkdir 2
touch 1
ls -l

umask 代表的是:“你明确想要剥夺/屏蔽掉哪些权限”。
不记得 source .bashrc 可以重新登录使其生效。
文件默认不带 x 权限,所以以目录权限为准,umask 的值为 777 - 733 = 044

变化题:编写应用程序

题目

编写 ex200 程序,natasha 用户执行则输出 “This is RHCSA Exam

笔记 which

1
2
3
4
5
6
7
#查找文件路径
which ex200
echo 'echo "This is RHCSA Exam"' > /usr/bin/ex200

# 测试
su - natasha
ex200

变化题:创建用户定位文件的脚本

题目

  • 创建名为 /usr/local/bin/mysearch 的脚本
  • 查找 /usr 下面所有大于 30K,小于 50K, 并有设置 suid 权限的文件
  • 将查找到的文件列表保存到 /root/myfile

笔记 find

1
2
# 编辑脚本
vim /usr/local/bin/mysearch

脚本内容:

1
2
#!/bin/bash
find /usr -size +30k -size -50k -perm -4000 -type f > /root/myfile
1
2
3
4
5
6
# 添加执行权限            
chmod a+x /usr/local/bin/mysearch

# 执行测试
/usr/local/bin/mysearch
cat /root/myfile

find -perm [-|/]数字权限 命令中,数字权限前的 - 表示包含,/ 表示任意匹配,无符号表示精确匹配
分清楚题目是要求【拷贝文件】还是【输出文件列表】!