红帽Linux基础认证 RHCSA9 往年题目解析

75 阅读17分钟

RHCSA9 综合练习(servera与serverb)题目与题解

一、考试环境说明

  1. 基础信息

    主机名IP地址root密码
    servera.lab.example.com172.25.250.10redhat
    serverb.lab.example.com172.25.250.11未知(需重置)
  2. 容器注册表:地址为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
题解步骤
  1. 查看当前网络连接:
    nmcli connection show
    
  2. 修改网络连接配置(默认连接名通常为“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
    
  3. 激活网络连接:
    nmcli connection up "Wired connection 1"
    
  4. 设置主机名:
    hostnamectl set-hostname servera.lab.example.com
    
  5. 验证配置:
    • 检查IP地址:ping servera(或ip addr
    • 检查网关:ip route
    • 检查DNS:cat /etc/resolv.conf
    • 检查主机名:hostname
  6. 需远程连接,重启SSH服务:
    systemctl restart sshd
    
说明
  • nmcli是RHEL9中推荐的网络配置工具,支持命令行和交互式操作(nmtui);
  • ipv4.method manual表示手动配置IP,而非DHCP自动获取;
  • 配置后需激活连接才能使修改生效。

2. 配置系统软件仓库

题目要求

配置YUM的两个存储库,地址分别为:

题解步骤
  1. 创建仓库配置文件:
    vim /etc/yum.repos.d/rhcsa.repo
    
  2. 写入以下内容:
    [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
    
  3. 验证仓库配置:
    yum repolist  # 查看仓库列表
    yum makecache  # 生成缓存(加速后续软件安装)
    
说明
  • RHEL9的软件仓库分为BaseOS(核心系统组件)和AppStream(应用程序流),需分别配置;
  • gpgcheck=0仅用于实验环境,生产环境需开启(gpgcheck=1)并配置GPG密钥。

3. 配置SELinux

题目要求
  • 解决非标准端口82上运行WEB服务器的内容提供问题;
  • WEB服务器能提供/var/www/html中所有现有html文件(不删除/改动文件);
  • WEB服务器通过82端口访问;
  • WEB服务器在系统启动时自动启动。
题解步骤
  1. 安装并启用httpd服务:
    systemctl enable httpd  # 开机自启
    systemctl start httpd  # 启动服务(此时会报错,属正常现象)
    
  2. 查看错误日志,定位SELinux问题:
    tail /var/log/messages  # 日志中会提示“82端口未被SELinux允许”
    
  3. 配置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列表中)
    
  4. 修复/var/www/html目录下文件的SELinux上下文:
    cd /var/www/html && ls -Z *  # 查看文件当前SELinux上下文
    restorecon -Rv /var/www/html/*  # 恢复默认上下文(确保httpd可读取)
    
  5. 重启并验证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
  • 用户natashaharry的附属组为sysmgrs
  • 用户john的shell为非交互式shell(/sbin/nologin),且不属于sysmgrs组;
  • 三个用户的密码均为redhat
题解步骤
  1. 创建组sysmgrs
    groupadd sysmgrs
    
  2. 创建用户并配置属性:
    useradd -G sysmgrs natasha  # -G指定附属组
    useradd -G sysmgrs harry
    useradd -s /sbin/nologin john  # -s指定shell(非交互式)
    
  3. 设置用户密码:
    echo redhat | passwd --stdin natasha  # 非交互式设置密码
    echo redhat | passwd --stdin harry
    echo redhat | passwd --stdin john
    
  4. 验证配置:
    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身份运行。
题解步骤
  1. 编辑natasha的crontab任务:
    crontab -eu natasha  # -e编辑,-u指定用户
    
  2. 写入以下内容(cron语法:分 时 日 月 周):
    */2 * * * * /usr/bin/logger "hello rhcsa"  # */2表示每2分钟
    23 14 * * * /usr/bin/echo "Hi rhcsa"        # 14:23执行
    
  3. 验证配置:
    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权限)。
题解步骤
  1. 创建目录:
    mkdir /home/managers
    
  2. 修改目录组归属:
    chgrp sysmgrs /home/managers  # 更改目录所属组
    
  3. 设置目录权限(SGID+770):
    chmod 2770 /home/managers  # 2表示SGID,770表示组权限rwx,其他无权限
    
  4. 验证配置:
    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同步时间。

题解步骤
  1. 安装并启用chronyd服务(RHEL9默认NTP服务):
    dnf install -y chrony  # 若未安装
    systemctl enable chronyd
    
  2. 编辑chrony配置文件:
    vim /etc/chrony.conf
    
  3. 添加时间服务器(注释或删除其他server行):
    server 172.25.254.254 iburst  # iburst表示快速同步
    
  4. 重启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
题解步骤
  1. 安装autofs服务:
    dnf install -y autofs
    
  2. 创建本地挂载点:
    mkdir /rhome
    
  3. 编辑autofs主配置文件:
    vim /etc/auto.master
    
  4. 添加以下内容(格式:挂载点 子配置文件):
    /rhome /etc/auto.rhcsa
    
  5. 创建子配置文件/etc/auto.rhcsa
    vim /etc/auto.rhcsa
    
  6. 写入NFS共享配置(格式:挂载子目录 选项 NFS服务器:共享路径):
    testuser -rw,sync 172.25.254.254:/rhome/testuser  # -rw表示读写,sync表示同步
    
  7. 启用并启动autofs服务:
    systemctl enable autofs
    systemctl start autofs
    
  8. 验证配置:
    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
题解步骤
  1. 创建用户并指定UID:
    useradd -u 1234 alex  # -u指定UID
    
  2. 设置密码:
    echo redhat | passwd --stdin alex
    
  3. 验证配置:
    id alex  # 查看UID和组归属(UID应为1234)
    
说明
  • UID范围:0(root)、1-999(系统用户)、1000+(普通用户);
  • 若UID已被占用,useradd会报错,需更换未使用的UID。

10. 查找文件

题目要求

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

题解步骤
  1. 创建目标目录:
    mkdir /root/findfiles
    
  2. 查找并拷贝文件:
    find / -user harry -type f -exec cp -av {} /root/findfiles \;
    
    • /:查找范围(整个系统);
    • -user harry:筛选属于harry的文件;
    • -type f:仅筛选普通文件(排除目录、链接等);
    • -exec:对查找结果执行命令;
    • cp -ava(归档,保留属性)、v(显示过程);
    • {}:代表查找结果的文件名;
    • \;:结束-exec命令。
  3. 验证结果:
    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,且文件不得包含空行。
题解步骤
  1. 查找并输出结果:
    grep "ng" /usr/share/xml/iso-codes/iso_639_3.xml > /root/list
    
    • grep "ng":筛选包含“ng”的行;
    • >:将结果重定向到文件(覆盖原有内容)。
  2. 验证结果(确保无空行):
    cat /root/list  # 查看结果
    grep -v "^$" /root/list  # 可选:过滤空行(若原文件有空白行)
    
说明
  • grep默认区分大小写,若需不区分大小写,可添加-i选项;
  • ^$表示空行,grep -v "^$"可删除空行(若原命令结果包含空行)。

12. 创建归档

题目要求
  • 创建/root/backup.tar.gz,压缩/usr/local目录;
  • 需掌握xzbzip2格式的压缩包创建方法。
题解步骤
  1. 创建tar.gz格式(gzip压缩):
    tar cvzf /root/backup.tar.gz /usr/local
    
    • c:创建归档;
    • v:显示过程;
    • z:使用gzip压缩;
    • f:指定输出文件(必须放在最后)。
  2. 创建tar.xz格式(xz压缩,压缩率更高):
    tar cvJf /root/backup.tar.xz /usr/local  # J(大写)表示xz压缩
    
  3. 创建tar.bz2格式(bzip2压缩):
    dnf install -y bzip2  # 若未安装bzip2
    tar cvjf /root/backup.tar.bz2 /usr/local  # j(小写)表示bzip2压缩
    
  4. 验证压缩包:
    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内容。
题解步骤
  1. 切换到contsvc用户:
    ssh contsvc@servera  # 或 su - contsvc
    
  2. 登录容器注册表:
    echo redhat321 | podman login -u admin --password-stdin registry.lab.example.com
    
  3. 获取Containerfile
    wget http://servera.lab.example.com:82/Containerfile  # 下载Containerfile
    
  4. 构建容器镜像:
    podman build -t watcher .  # -t指定镜像名,.表示当前目录(包含Containerfile)
    
  5. 验证镜像:
    podman images  # 查看本地镜像(应包含watcher)
    
说明
  • RHEL9默认使用podman(无守护进程的容器工具),兼容docker命令;
  • Containerfile(与Dockerfile语法一致)定义了镜像的构建步骤,如基础镜像、安装软件、启动命令等;

14. 将容器配置为服务

题目要求
  • 在servera上创建无根容器(contsvc用户),作为systemd服务自动启动;
  • 容器名称:rh134
  • 使用镜像:上题创建的watcher
  • 服务名:container-rh134
  • 系统重启后容器自动启动;
  • 本地目录挂载:
    • /opt/rh124 → 容器/opt/level1
    • /opt/rh134 → 容器/opt/level2
  • 本地目录放入文件后,容器内对应目录应能看到。
题解步骤
  1. (root用户)创建本地目录并设置权限:
    mkdir /opt/rh124 /opt/rh134
    chown contsvc:contsvc /opt/rh124/ /opt/rh134/  # 确保contsvc有读写权限
    
  2. 切换到contsvc用户:
    ssh contsvc@servera
    
  3. 先运行容器(用于生成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镜像
    
  4. 生成systemd服务文件:
    mkdir -p ~/.config/systemd/user/  # 创建用户级systemd配置目录
    cd ~/.config/systemd/user/
    podman generate systemd --files --new --name rh134  # 生成服务文件
    # --files:生成文件,--new:每次启动新容器,--name:指定容器名
    
  5. 停止并删除临时容器:
    podman kill rh134
    podman rm -f rh134
    
  6. 配置systemd服务(用户级):
    systemctl --user daemon-reload  # 重新加载systemd配置
    systemctl --user enable --now container-rh134  # 启用并立即启动服务
    loginctl enable-linger  # 允许用户退出后,服务继续运行(关键)
    loginctl show-user contsvc  # 验证linger是否启用(Lingering=yes)
    
  7. 验证配置:
    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
题解步骤
  1. 重启serverb,在grub菜单中选中要启动的内核,按e进入编辑模式;
  2. linux行末尾添加rd.break(中断启动流程),按Ctrl+x启动;
  3. 进入紧急模式后,重新挂载/sysroot为可读写:
    mount -o rw,remount /sysroot
    
  4. 切换到/sysroot(系统根目录):
    chroot /sysroot
    
  5. 设置root密码:
    echo redhat | passwd --stdin root
    
  6. 创建.autorelabel文件(修复SELinux上下文,若SELinux启用):
    touch /.autorelabel
    
  7. 退出并重启:
    exit  # 退出chroot
    exit  # 退出紧急模式,系统自动重启
    
  8. 验证:重启后使用root/redhat登录。
说明
  • rd.break用于中断initramfs启动流程,进入紧急模式;
  • 若SELinux未启用,可省略touch /.autorelabel(否则系统可能无法正常启动);
  • 此方法需物理或控制台访问权限,生产环境需谨慎使用。

2. 配置系统软件仓库

题目要求

与servera相同,配置YUM的两个存储库:

题解步骤
  1. 通过rsync从servera复制仓库配置文件(避免重复编写):
    rsync -avP root@servera:/etc/yum.repos.d/* /etc/yum.repos.d/
    # -a(归档)、-v(显示过程)、-P(断点续传)
    
  2. 验证配置:
    yum repolist
    yum makecache
    
说明
  • rsync适合同步文件,比scp更高效(支持增量同步);
  • 若rsync未安装,可先执行dnf install -y rsync

3. 调整逻辑卷的大小

题目要求
  • 将名为rhel的逻辑卷大小调整到200MiB;
  • 确保文件系统内容不变;
  • 调整后大小在180MiB-220MiB范围内均可接受。
题解步骤
  1. 查看当前逻辑卷和卷组信息:
    vgs  # 查看卷组(VG)信息
    lvs  # 查看逻辑卷(LV)信息(确认rhel的VG和当前大小)
    
  2. 调整逻辑卷大小(-r自动调整文件系统):
    lvextend -rL 200M /dev/rhcsa/rhel  # 假设rhel的VG为rhcsa,-L指定最终大小
    # 若需缩小逻辑卷,需先卸载文件系统并检查完整性(如e2fsck),再执行lvreduce -r
    
  3. 验证结果:
    df -h  # 查看文件系统大小(应接近200MiB)
    lvs  # 查看逻辑卷大小(应显示200.00m)
    
说明
  • -r--resizefs)选项:自动调整逻辑卷上的文件系统大小(支持ext4、xfs等);
  • 若逻辑卷所在卷组空间不足,需先扩展卷组(如添加新物理卷pvcreatevgextend);
  • 缩小逻辑卷前需卸载文件系统(umount),并执行e2fsck -f /dev/VG/LV(检查文件系统完整性),避免数据丢失。

4. 创建交换分区

题目要求
  • 向serverb添加756MiB的额外交换分区;
  • 系统启动时自动挂载;
  • 不删除现有交换分区。
题解步骤
  1. 查看磁盘信息,确认可用磁盘(如/dev/vdb):
    fdisk -l
    
  2. 使用fdisk创建分区:
    fdisk /dev/vdb  # 操作/dev/vdb磁盘
    
    • 输入g:创建GPT分区表(若为MBR,输入o);
    • 输入n:创建新分区;
    • 按回车默认分区号,默认起始扇区;
    • 输入+756M:设置分区大小为756MiB;
    • 输入t:修改分区类型;
    • 输入分区号(如1);
    • 输入19(GPT分区表中交换分区的类型ID,MBR为82);
    • 输入w:保存并退出。
  3. 重新读取分区表:
    partprobe /dev/vdb
    udevadm settle  # 等待udev设备就绪
    
  4. 格式化分区为交换格式:
    mkswap /dev/vdb1  # /dev/vdb1为新创建的分区
    
  5. 获取交换分区的UUID(用于/etc/fstab,避免设备名变化):
    blkid /dev/vdb1  # 复制UUID值(如63900016-74b8-4765-8baa-4849c118dca9)
    
  6. 编辑/etc/fstab,设置开机自动挂载:
    vim /etc/fstab
    
    写入以下内容:
    UUID=63900016-74b8-4765-8baa-4849c118dca9 swap swap defaults 0 0
    # 格式:UUID=xxx 挂载点 类型 选项 备份 检查
    
  7. 激活交换分区并验证:
    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
题解步骤
  1. 创建物理卷(PV):
    fdisk /dev/vdb  # 继续使用/dev/vdb,创建新分区(如/dev/vdb2)
    # 步骤:n → 默认分区号 → 默认起始扇区 → 默认结束扇区(或指定大小)→ t → 分区号 → 30(Linux LVM类型ID)→ w
    partprobe /dev/vdb
    pvcreate /dev/vdb2  # 将/dev/vdb2创建为物理卷
    
  2. 创建卷组(VG),指定PE大小:
    vgcreate -s 16M datastorage /dev/vdb2  # -s指定PE大小为16MiB
    vgs  # 验证卷组(应显示datastorage,PE Size为16.00m)
    
  3. 创建逻辑卷(LV),指定PE数量:
    lvcreate -l 60 -n database datastorage  # -l指定PE数量,-n指定LV名
    lvs  # 验证逻辑卷(应显示database,大小为960.00m)
    
  4. 格式化逻辑卷为ext4:
    mkfs.ext4 /dev/datastorage/database
    
  5. 创建挂载点并编辑/etc/fstab
    mkdir /mnt/data
    vim /etc/fstab
    
    写入以下内容:
    /dev/datastorage/database /mnt/data ext4 defaults 0 0
    
  6. 挂载并验证:
    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(读写)、suiddevexecautonouserasync,适合大多数场景。

6. 配置系统调优

题目要求

配置serverb使用系统推荐的tuned配置集。

题解步骤
  1. 安装tuned服务(若未安装):
    dnf install -y tuned
    systemctl enable --now tuned  # 启用并启动服务
    
  2. 查看系统推荐的tuned配置集:
    tuned-adm recommend  # 系统会根据硬件环境推荐配置集(如virtual-guest,适合虚拟机)
    
  3. 应用推荐的配置集:
    tuned-adm profile virtual-guest  # 假设推荐virtual-guest
    
  4. 验证配置:
    tuned-adm active  # 查看当前激活的配置集(应显示virtual-guest)
    
说明
  • tuned是RHEL的系统调优工具,通过预定义的配置集优化系统性能(如CPU、内存、磁盘I/O);
  • 常见配置集:
    • virtual-guest:虚拟机优化;
    • throughput-performance:吞吐量优化(适合服务器);
    • latency-performance:低延迟优化(适合数据库);
    • powersave:节能优化(适合笔记本)。