RHCSA9 综合练习(servera与serverb)题目与题解
一、考试环境说明
-
基础信息:
主机名 IP地址 root密码 servera.lab.example.com 172.25.250.10 redhat serverb.lab.example.com 172.25.250.11 未知(需重置) -
容器注册表:地址为
registry.lab.example.com,管理员账号admin/redhat321
二、servera.lab.example.com 题目与题解
1. 配置网络
题目要求
- 主机名:servera.lab.example.com
- IP地址:172.25.250.10/24
- 网关:172.25.250.254
- DNS:172.25.250.220
题解步骤
- 查看当前网络连接:
nmcli connection show - 修改网络连接配置(默认连接名通常为“Wired connection 1”):
nmcli connection modify "Wired connection 1" \ ipv4.addresses 172.25.250.10/24 \ ipv4.gateway 172.25.250.254 \ ipv4.dns 172.25.250.220 \ ipv4.method manual \ connection.autoconnect yes - 激活网络连接:
nmcli connection up "Wired connection 1" - 设置主机名:
hostnamectl set-hostname servera.lab.example.com - 验证配置:
- 检查IP地址:
ping servera(或ip addr) - 检查网关:
ip route - 检查DNS:
cat /etc/resolv.conf - 检查主机名:
hostname
- 检查IP地址:
- 需远程连接,重启SSH服务:
systemctl restart sshd
说明
nmcli是RHEL9中推荐的网络配置工具,支持命令行和交互式操作(nmtui);ipv4.method manual表示手动配置IP,而非DHCP自动获取;- 配置后需激活连接才能使修改生效。
2. 配置系统软件仓库
题目要求
配置YUM的两个存储库,地址分别为:
- BaseOS:content.example.com/rhel9.0/x86…
- AppStream:content.example.com/rhel9.0/x86…
题解步骤
- 创建仓库配置文件:
vim /etc/yum.repos.d/rhcsa.repo - 写入以下内容:
[BaseOS] name=BaseOS baseurl=http://content.example.com/rhel9.0/x86_64/dvd/BaseOS enabled=1 # 启用仓库 gpgcheck=0 # 关闭GPG签名检查(实验环境简化) [AppStream] name=AppStream baseurl=http://content.example.com/rhel9.0/x86_64/dvd/AppStream enabled=1 gpgcheck=0 - 验证仓库配置:
yum repolist # 查看仓库列表 yum makecache # 生成缓存(加速后续软件安装)
说明
- RHEL9的软件仓库分为BaseOS(核心系统组件)和AppStream(应用程序流),需分别配置;
gpgcheck=0仅用于实验环境,生产环境需开启(gpgcheck=1)并配置GPG密钥。
3. 配置SELinux
题目要求
- 解决非标准端口82上运行WEB服务器的内容提供问题;
- WEB服务器能提供
/var/www/html中所有现有html文件(不删除/改动文件); - WEB服务器通过82端口访问;
- WEB服务器在系统启动时自动启动。
题解步骤
- 安装并启用httpd服务:
systemctl enable httpd # 开机自启 systemctl start httpd # 启动服务(此时会报错,属正常现象) - 查看错误日志,定位SELinux问题:
tail /var/log/messages # 日志中会提示“82端口未被SELinux允许” - 配置SELinux允许httpd使用82端口:
semanage port -a -t http_port_t -p tcp 82 # 添加82端口到http_port_t类型 semanage port -l | grep 82 # 验证配置(确认82端口已在http_port_t列表中) - 修复
/var/www/html目录下文件的SELinux上下文:cd /var/www/html && ls -Z * # 查看文件当前SELinux上下文 restorecon -Rv /var/www/html/* # 恢复默认上下文(确保httpd可读取) - 重启并验证httpd服务:
systemctl restart httpd systemctl status httpd # 确认服务正常运行 curl http://servera:82/web.html # 访问测试(需确保web.html存在)
说明
- SELinux通过“端口类型”限制服务使用的端口,httpd默认仅允许使用80、443等端口(
http_port_t类型),需手动添加82端口; restorecon命令用于恢复文件的默认SELinux上下文,若文件上下文被修改(如从其他目录复制),可能导致httpd无法读取。
4. 创建用户账户
题目要求
- 创建组
sysmgrs; - 用户
natasha、harry的附属组为sysmgrs; - 用户
john的shell为非交互式shell(/sbin/nologin),且不属于sysmgrs组; - 三个用户的密码均为
redhat。
题解步骤
- 创建组
sysmgrs:groupadd sysmgrs - 创建用户并配置属性:
useradd -G sysmgrs natasha # -G指定附属组 useradd -G sysmgrs harry useradd -s /sbin/nologin john # -s指定shell(非交互式) - 设置用户密码:
echo redhat | passwd --stdin natasha # 非交互式设置密码 echo redhat | passwd --stdin harry echo redhat | passwd --stdin john - 验证配置:
id natasha ; id harry ; id john # 查看用户组归属
说明
-G(大写)指定附属组,-g(小写)指定主组;/sbin/nologin表示用户无法登录系统(仅用于系统服务或特殊场景);passwd --stdin允许通过管道输入密码,适合脚本或批量操作。
5. 配置cron计划任务
题目要求
- 每2分钟执行
logger "hello rhcsa",以natasha身份运行; - 每天14:23执行
echo "Hi rhcsa",以natasha身份运行。
题解步骤
- 编辑
natasha的crontab任务:crontab -eu natasha # -e编辑,-u指定用户 - 写入以下内容(cron语法:分 时 日 月 周):
*/2 * * * * /usr/bin/logger "hello rhcsa" # */2表示每2分钟 23 14 * * * /usr/bin/echo "Hi rhcsa" # 14:23执行 - 验证配置:
crontab -l -u natasha # 查看natasha的crontab任务 cat /var/log/messages | grep "rhcsa" # 等待任务执行后查看日志
说明
- cron任务需指定命令的绝对路径(如
/usr/bin/logger),避免环境变量问题; logger命令将信息写入系统日志(/var/log/messages),便于调试和审计;- 若任务未执行,可检查
crond服务状态(systemctl status crond)。
6. 创建特殊权限的目录
题目要求
- 目录
/home/managers属于sysmgrs组; sysmgrs组成员可读取、写入、访问,其他用户无权限(root除外);- 目录中创建的文件自动归属
sysmgrs组(设置SGID权限)。
题解步骤
- 创建目录:
mkdir /home/managers - 修改目录组归属:
chgrp sysmgrs /home/managers # 更改目录所属组 - 设置目录权限(SGID+770):
chmod 2770 /home/managers # 2表示SGID,770表示组权限rwx,其他无权限 - 验证配置:
ll -d /home/managers # 查看目录权限(应显示drwxrws---,s表示SGID) cd /home/managers && touch file1 && ls -l # 查看新文件的组归属(应为sysmgrs)
说明
- SGID(Set Group ID)权限:目录设置SGID后,新创建的文件自动继承目录的所属组;
- 权限数字含义:
2770中,2是SGID位,7(rwx)是所有者权限,7(rwx)是组权限,0(---)是其他用户权限。
7. 配置NTP
题目要求
配置servera作为NTP客户端,与时间服务器172.25.254.254同步时间。
题解步骤
- 安装并启用chronyd服务(RHEL9默认NTP服务):
dnf install -y chrony # 若未安装 systemctl enable chronyd - 编辑chrony配置文件:
vim /etc/chrony.conf - 添加时间服务器(注释或删除其他server行):
server 172.25.254.254 iburst # iburst表示快速同步 - 重启chronyd服务并验证:
systemctl restart chronyd systemctl status chronyd chronyc sources -v # 查看NTP同步状态(*表示已同步)
说明
chronyd比传统ntpd更轻量,适合虚拟机和移动设备;iburst选项在服务启动时快速发送多个同步请求,加速时间同步。
8. 配置autofs
题目要求
- NFS服务器
172.25.254.254共享目录/rhome,包含testuser的家目录; testuser的家目录(172.25.254.254:/rhome/testuser)自动挂载到/rhome/testuser;- 家目录允许用户写入;
testuser密码为redhat。
题解步骤
- 安装autofs服务:
dnf install -y autofs - 创建本地挂载点:
mkdir /rhome - 编辑autofs主配置文件:
vim /etc/auto.master - 添加以下内容(格式:挂载点 子配置文件):
/rhome /etc/auto.rhcsa - 创建子配置文件
/etc/auto.rhcsa:vim /etc/auto.rhcsa - 写入NFS共享配置(格式:挂载子目录 选项 NFS服务器:共享路径):
testuser -rw,sync 172.25.254.254:/rhome/testuser # -rw表示读写,sync表示同步 - 启用并启动autofs服务:
systemctl enable autofs systemctl start autofs - 验证配置:
su - testuser # 切换用户时自动挂载家目录 df -h # 查看挂载状态(应显示172.25.254.254:/rhome/testuser) touch /rhome/testuser/testfile # 测试写入权限
说明
- autofs实现“按需挂载”:仅当用户访问挂载点时才挂载NFS共享,节省资源;
- NFS选项
rw(读写)、sync(同步写入)需与NFS服务器配置匹配; - 若挂载失败,可检查NFS服务器状态(
showmount -e 172.25.254.254)和防火墙规则。
9. 配置用户账户(alex)
题目要求
- 创建用户
alex,UID为1234; - 密码为
redhat。
题解步骤
- 创建用户并指定UID:
useradd -u 1234 alex # -u指定UID - 设置密码:
echo redhat | passwd --stdin alex - 验证配置:
id alex # 查看UID和组归属(UID应为1234)
说明
- UID范围:0(root)、1-999(系统用户)、1000+(普通用户);
- 若UID已被占用,
useradd会报错,需更换未使用的UID。
10. 查找文件
题目要求
查找属于harry用户的所有文件,并拷贝到/root/findfiles目录。
题解步骤
- 创建目标目录:
mkdir /root/findfiles - 查找并拷贝文件:
find / -user harry -type f -exec cp -av {} /root/findfiles \;/:查找范围(整个系统);-user harry:筛选属于harry的文件;-type f:仅筛选普通文件(排除目录、链接等);-exec:对查找结果执行命令;cp -av:a(归档,保留属性)、v(显示过程);{}:代表查找结果的文件名;\;:结束-exec命令。
- 验证结果:
ll -a /root/findfiles # 查看拷贝的文件(所属用户应为harry)
说明
- 若查找过程中出现“权限拒绝”(如
/proc、/sys目录),可忽略(不影响结果); -exec命令也可替换为-print0 | xargs -0 cp -av -t /root/findfiles(适合大量文件,效率更高)。
11. 查找字符串
题目要求
- 查找文件
/usr/share/xml/iso-codes/iso_639_3.xml中包含字符串ng的所有行; - 将结果写入
/root/list,且文件不得包含空行。
题解步骤
- 查找并输出结果:
grep "ng" /usr/share/xml/iso-codes/iso_639_3.xml > /root/listgrep "ng":筛选包含“ng”的行;>:将结果重定向到文件(覆盖原有内容)。
- 验证结果(确保无空行):
cat /root/list # 查看结果 grep -v "^$" /root/list # 可选:过滤空行(若原文件有空白行)
说明
grep默认区分大小写,若需不区分大小写,可添加-i选项;^$表示空行,grep -v "^$"可删除空行(若原命令结果包含空行)。
12. 创建归档
题目要求
- 创建
/root/backup.tar.gz,压缩/usr/local目录; - 需掌握
xz和bzip2格式的压缩包创建方法。
题解步骤
- 创建
tar.gz格式(gzip压缩):tar cvzf /root/backup.tar.gz /usr/localc:创建归档;v:显示过程;z:使用gzip压缩;f:指定输出文件(必须放在最后)。
- 创建
tar.xz格式(xz压缩,压缩率更高):tar cvJf /root/backup.tar.xz /usr/local # J(大写)表示xz压缩 - 创建
tar.bz2格式(bzip2压缩):dnf install -y bzip2 # 若未安装bzip2 tar cvjf /root/backup.tar.bz2 /usr/local # j(小写)表示bzip2压缩 - 验证压缩包:
file /root/backup.tar.gz # 查看文件类型(应显示“gzip compressed data”) file /root/backup.tar.xz # 应显示“XZ compressed data” file /root/backup.tar.bz2 # 应显示“bzip2 compressed data”
说明
- 压缩率对比:
xz>bzip2>gzip; - 解压命令:
tar xvzf 压缩包(gzip)、tar xvJf 压缩包(xz)、tar xvjf 压缩包(bzip2)。
13. 创建容器镜像
题目要求
- 以用户
contsvc身份在servera上操作; - 使用提供的
Containerfile构建名为watcher的容器镜像; - 不更改
Containerfile内容。
题解步骤
- 切换到
contsvc用户:ssh contsvc@servera # 或 su - contsvc - 登录容器注册表:
echo redhat321 | podman login -u admin --password-stdin registry.lab.example.com - 获取
Containerfile:wget http://servera.lab.example.com:82/Containerfile # 下载Containerfile - 构建容器镜像:
podman build -t watcher . # -t指定镜像名,.表示当前目录(包含Containerfile) - 验证镜像:
podman images # 查看本地镜像(应包含watcher)
说明
- RHEL9默认使用
podman(无守护进程的容器工具),兼容docker命令; Containerfile(与Dockerfile语法一致)定义了镜像的构建步骤,如基础镜像、安装软件、启动命令等;
14. 将容器配置为服务
题目要求
- 在servera上创建无根容器(
contsvc用户),作为systemd服务自动启动; - 容器名称:
rh134; - 使用镜像:上题创建的
watcher; - 服务名:
container-rh134; - 系统重启后容器自动启动;
- 本地目录挂载:
/opt/rh124→ 容器/opt/level1;/opt/rh134→ 容器/opt/level2;
- 本地目录放入文件后,容器内对应目录应能看到。
题解步骤
- (root用户)创建本地目录并设置权限:
mkdir /opt/rh124 /opt/rh134 chown contsvc:contsvc /opt/rh124/ /opt/rh134/ # 确保contsvc有读写权限 - 切换到
contsvc用户:ssh contsvc@servera - 先运行容器(用于生成systemd服务文件):
podman run -d --name rh134 \ -v /opt/rh124:/opt/level1:Z \ # -v挂载目录,Z设置SELinux标签 -v /opt/rh134:/opt/level2:Z \ localhost/watcher:latest # 本地watcher镜像 - 生成systemd服务文件:
mkdir -p ~/.config/systemd/user/ # 创建用户级systemd配置目录 cd ~/.config/systemd/user/ podman generate systemd --files --new --name rh134 # 生成服务文件 # --files:生成文件,--new:每次启动新容器,--name:指定容器名 - 停止并删除临时容器:
podman kill rh134 podman rm -f rh134 - 配置systemd服务(用户级):
systemctl --user daemon-reload # 重新加载systemd配置 systemctl --user enable --now container-rh134 # 启用并立即启动服务 loginctl enable-linger # 允许用户退出后,服务继续运行(关键) loginctl show-user contsvc # 验证linger是否启用(Lingering=yes) - 验证配置:
exit # 退出contsvc用户 reboot # 重启servera ssh contsvc@servera # 重新登录 podman ps # 查看容器是否自动启动(应显示rh134容器)
说明
- 无根容器(rootless container):由普通用户运行,安全性更高(避免直接使用root);
:Z选项:自动设置SELinux标签,允许容器访问挂载的本地目录;loginctl enable-linger:确保contsvc用户退出后,systemd服务仍在运行(否则用户退出后服务会停止)。
三、serverb.lab.example.com 题目与题解
1. 重置root密码
题目说明
- 目标:将serverb的root密码设置为
redhat。
题解步骤
- 重启serverb,在grub菜单中选中要启动的内核,按
e进入编辑模式; - 在
linux行末尾添加rd.break(中断启动流程),按Ctrl+x启动; - 进入紧急模式后,重新挂载
/sysroot为可读写:mount -o rw,remount /sysroot - 切换到
/sysroot(系统根目录):chroot /sysroot - 设置root密码:
echo redhat | passwd --stdin root - 创建
.autorelabel文件(修复SELinux上下文,若SELinux启用):touch /.autorelabel - 退出并重启:
exit # 退出chroot exit # 退出紧急模式,系统自动重启 - 验证:重启后使用
root/redhat登录。
说明
rd.break用于中断initramfs启动流程,进入紧急模式;- 若SELinux未启用,可省略
touch /.autorelabel(否则系统可能无法正常启动); - 此方法需物理或控制台访问权限,生产环境需谨慎使用。
2. 配置系统软件仓库
题目要求
与servera相同,配置YUM的两个存储库:
- BaseOS:content.example.com/rhel9.0/x86…
- AppStream:content.example.com/rhel9.0/x86…
题解步骤
- 通过rsync从servera复制仓库配置文件(避免重复编写):
rsync -avP root@servera:/etc/yum.repos.d/* /etc/yum.repos.d/ # -a(归档)、-v(显示过程)、-P(断点续传) - 验证配置:
yum repolist yum makecache
说明
- rsync适合同步文件,比
scp更高效(支持增量同步); - 若rsync未安装,可先执行
dnf install -y rsync。
3. 调整逻辑卷的大小
题目要求
- 将名为
rhel的逻辑卷大小调整到200MiB; - 确保文件系统内容不变;
- 调整后大小在180MiB-220MiB范围内均可接受。
题解步骤
- 查看当前逻辑卷和卷组信息:
vgs # 查看卷组(VG)信息 lvs # 查看逻辑卷(LV)信息(确认rhel的VG和当前大小) - 调整逻辑卷大小(
-r自动调整文件系统):lvextend -rL 200M /dev/rhcsa/rhel # 假设rhel的VG为rhcsa,-L指定最终大小 # 若需缩小逻辑卷,需先卸载文件系统并检查完整性(如e2fsck),再执行lvreduce -r - 验证结果:
df -h # 查看文件系统大小(应接近200MiB) lvs # 查看逻辑卷大小(应显示200.00m)
说明
-r(--resizefs)选项:自动调整逻辑卷上的文件系统大小(支持ext4、xfs等);- 若逻辑卷所在卷组空间不足,需先扩展卷组(如添加新物理卷
pvcreate、vgextend); - 缩小逻辑卷前需卸载文件系统(
umount),并执行e2fsck -f /dev/VG/LV(检查文件系统完整性),避免数据丢失。
4. 创建交换分区
题目要求
- 向serverb添加756MiB的额外交换分区;
- 系统启动时自动挂载;
- 不删除现有交换分区。
题解步骤
- 查看磁盘信息,确认可用磁盘(如
/dev/vdb):fdisk -l - 使用
fdisk创建分区:fdisk /dev/vdb # 操作/dev/vdb磁盘- 输入
g:创建GPT分区表(若为MBR,输入o); - 输入
n:创建新分区; - 按回车默认分区号,默认起始扇区;
- 输入
+756M:设置分区大小为756MiB; - 输入
t:修改分区类型; - 输入分区号(如1);
- 输入
19(GPT分区表中交换分区的类型ID,MBR为82); - 输入
w:保存并退出。
- 输入
- 重新读取分区表:
partprobe /dev/vdb udevadm settle # 等待udev设备就绪 - 格式化分区为交换格式:
mkswap /dev/vdb1 # /dev/vdb1为新创建的分区 - 获取交换分区的UUID(用于
/etc/fstab,避免设备名变化):blkid /dev/vdb1 # 复制UUID值(如63900016-74b8-4765-8baa-4849c118dca9) - 编辑
/etc/fstab,设置开机自动挂载:
写入以下内容:vim /etc/fstabUUID=63900016-74b8-4765-8baa-4849c118dca9 swap swap defaults 0 0 # 格式:UUID=xxx 挂载点 类型 选项 备份 检查 - 激活交换分区并验证:
swapon -a # 激活所有/etc/fstab中的交换分区 swapon -s # 查看交换分区状态(应显示/dev/vdb1) free -m # 查看内存和交换分区使用情况(交换分区总大小增加756MiB)
说明
- 交换分区类型ID:GPT为
19(Linux swap),MBR为82; - 使用UUID而非设备名(如
/dev/vdb1):避免磁盘顺序变化导致挂载失败; - 交换分区大小建议:内存≤4GiB时,交换分区为内存的2倍;内存>4GiB时,交换分区与内存相当或略小。
5. 创建逻辑卷
题目要求
- 逻辑卷名:
database; - 卷组名:
datastorage; - 卷组PE大小:16MiB;
- 逻辑卷大小:60个PE(60×16MiB=960MiB);
- 格式化:ext4文件系统;
- 系统启动时自动挂载到
/mnt/data。
题解步骤
- 创建物理卷(PV):
fdisk /dev/vdb # 继续使用/dev/vdb,创建新分区(如/dev/vdb2) # 步骤:n → 默认分区号 → 默认起始扇区 → 默认结束扇区(或指定大小)→ t → 分区号 → 30(Linux LVM类型ID)→ w partprobe /dev/vdb pvcreate /dev/vdb2 # 将/dev/vdb2创建为物理卷 - 创建卷组(VG),指定PE大小:
vgcreate -s 16M datastorage /dev/vdb2 # -s指定PE大小为16MiB vgs # 验证卷组(应显示datastorage,PE Size为16.00m) - 创建逻辑卷(LV),指定PE数量:
lvcreate -l 60 -n database datastorage # -l指定PE数量,-n指定LV名 lvs # 验证逻辑卷(应显示database,大小为960.00m) - 格式化逻辑卷为ext4:
mkfs.ext4 /dev/datastorage/database - 创建挂载点并编辑
/etc/fstab:写入以下内容:mkdir /mnt/data vim /etc/fstab/dev/datastorage/database /mnt/data ext4 defaults 0 0 - 挂载并验证:
mount -a # 挂载/etc/fstab中的所有文件系统 df -h # 查看挂载状态(/mnt/data应为ext4,大小约960MiB)
说明
- PE(Physical Extent):卷组的最小分配单元,默认4MiB,此处指定为16MiB;
- 逻辑卷大小计算:
-l 60→ 60×16MiB=960MiB;若用-L指定大小,需确保为PE大小的整数倍(如-L 960M); defaults选项包含rw(读写)、suid、dev、exec、auto、nouser、async,适合大多数场景。
6. 配置系统调优
题目要求
配置serverb使用系统推荐的tuned配置集。
题解步骤
- 安装tuned服务(若未安装):
dnf install -y tuned systemctl enable --now tuned # 启用并启动服务 - 查看系统推荐的tuned配置集:
tuned-adm recommend # 系统会根据硬件环境推荐配置集(如virtual-guest,适合虚拟机) - 应用推荐的配置集:
tuned-adm profile virtual-guest # 假设推荐virtual-guest - 验证配置:
tuned-adm active # 查看当前激活的配置集(应显示virtual-guest)
说明
- tuned是RHEL的系统调优工具,通过预定义的配置集优化系统性能(如CPU、内存、磁盘I/O);
- 常见配置集:
virtual-guest:虚拟机优化;throughput-performance:吞吐量优化(适合服务器);latency-performance:低延迟优化(适合数据库);powersave:节能优化(适合笔记本)。