跳转至

🐧 RHCSA 9.0 知识库

基于模拟题整理,按题号编排,每道题向外扩散关键知识点。 考试在 servera.lab.example.com 和 serverb.lab.example.com 上操作。


考试环境概览

主机 IP 说明
servera.lab.example.com 172.25.0.10 主要操作节点
serverb.lab.example.com 172.25.0.11 第二操作节点
classroom.example.com 172.25.250.254 网关/DNS/NTP/内容源
content.example.com 软件仓库和资源地址

关键信息:

项目
root 密码 redhat
DNS 域 lab.example.com
子网 172.25.0.0/255.255.255.0
注册服务器 registry.lab.example.com (admin / redhat321)
软件仓库 http://content.example.com/rhel9.0/x86_64/dvd/BaseOS / AppStream
评分方式 系统重启后评测,所有配置和服务必须在重启后保留

1. 配置网络地址 (servera)

题目要求

配置 servera 的网络参数:主机名、IP、子网掩码、网关、DNS。

实际操作

# 设置主机名
hostnamectl set-hostname servera.lab.example.com

# 查看现有网络连接
nmcli connection show

# 删除默认连接
nmcli connection delete "Wired connection 1"

# 创建新连接
nmcli connection add type ethernet ifname eth0 con-name eth0 \
  ipv4.method manual ipv4.addresses 172.25.250.10/24 \
  ipv4.gateway 172.25.250.254 ipv4.dns 172.25.250.254 \
  autoconnect yes

# 激活连接
nmcli connection up eth0

扩展开的知识点

hostnamectl 命令

命令 作用
hostnamectl set-hostname NAME 设置主机名(永久)
hostnamectl status 查看当前主机名信息

nmcli 网络管理

命令 作用
nmcli connection show 列出所有连接
nmcli connection delete NAME 删除连接
nmcli connection add ... 创建连接
nmcli connection up NAME 激活连接
nmcli connection modify NAME KEY VALUE 修改连接属性

nmcli add 关键参数

参数 含义 示例
type 连接类型 ethernet
ifname 网络接口名 eth0
con-name 连接名称 eth0
ipv4.method IP 获取方式 manual / auto
ipv4.addresses IP/子网掩码 172.25.250.10/24
ipv4.gateway 默认网关 172.25.250.254
ipv4.dns DNS 服务器 172.25.250.254
autoconnect 开机自动连接 yes / no

验证

ping classroom.example.com

2. 配置软件仓库 (servera)

题目要求

配置 servera 的 YUM 软件仓库。

实际操作

# 创建仓库文件
cat > /etc/yum.repos.d/rhel_dvd.repo << 'EOF'
[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
EOF

# 清理并重建缓存
dnf clean all
dnf makecache

扩展开的知识点

YUM 仓库配置文件

  • 文件位于 /etc/yum.repos.d/,必须以 .repo 结尾
  • 每个 [section] 定义一个仓库
  • 考试对文件名和仓库名不作要求,可自主命名

仓库配置项

配置项 含义
name 仓库描述名称
baseurl 仓库地址
enabled 1=启用,0=禁用
gpgcheck 1=检查签名,0=不检查

验证

dnf repolist all

3. 调试 SELinux(Web 非标准端口)

题目要求

Web 服务器在端口 82 上运行失败,修复以确保: - 能访问 /var/www/html 中的文件 - 通过 82 端口访问 - 系统启动时自动启动 httpd - SELinux 保持 Enforcing 模式

实际操作

# 1. 确认端口
grep Listen /etc/httpd/conf/httpd.conf

# 2. 放行 SELinux 82 端口
semanage port -a -t http_port_t -p tcp 82

# 3. 修复文件上下文
chcon -t httpd_sys_content_t /var/www/html/*

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

扩展开的知识点

SELinux 端口管理

命令 作用
semanage port -l 列出所有端口标签
semanage port -a -t TYPE -p PROTO PORT 添加端口标签
semanage port -d -t TYPE -p PROTO PORT 删除端口标签

SELinux 文件上下文

命令 作用
chcon -t TYPE FILE 临时修改文件类型标签(重启后 restorecon 会恢复)
semanage fcontext -a -t TYPE "PATH(/.*)?" 永久定义默认上下文
restorecon -Rv PATH 恢复/应用默认上下文
ls -lZ 查看 SELinux 上下文

常用 SELinux 类型

类型 用途
http_port_t HTTP/HTTPS 端口标签
httpd_sys_content_t Web 静态内容标签
tmp_t 临时文件标签(httpd 无法读取)

验证

curl http://servera:82/file1
# Hello RHEL9 for file1

4. 创建用户账户

题目要求

创建组 admins,创建用户 harry、natasha(属于 admins 组)、alice(无登录 Shell,不属于 admins),密码均为 redhat。

实际操作

groupadd admins

useradd -G admins harry
useradd -G admins natasha
useradd -s /sbin/nologin alice

echo redhat | passwd --stdin harry
echo redhat | passwd --stdin natasha
echo redhat | passwd --stdin alice

扩展开的知识点

useradd 参数

参数 含义
-G GROUP 指定附加组
-s SHELL 指定登录 Shell
-u UID 指定用户 ID
-d DIR 指定家目录
-M 不创建家目录
-r 创建系统用户

passwd 命令

命令 作用
echo PWD \| passwd --stdin USER 非交互式设密码
passwd -l USER 锁定用户
passwd -u USER 解锁用户

组管理

命令 作用
groupadd GROUP 创建组
groupmod 修改组
groupdel 删除组
usermod -aG GROUP USER 添加用户到附加组

验证

id harry

5. 配置周期性计划任务

题目要求

以 natasha 用户身份,每周三 15:30 执行 logger "This is a rhcsa exam"

实际操作

crontab -u natasha -e
# 添加:
# 30 15 * * 3 logger 'This is a rhcsa exam'

扩展开的知识点

crontab 时间格式

分 时 日 月 周
30 15 *  *  3    # 每周三 15:30
字段 范围 特殊写法
分钟 0-59 */5 每5分钟
小时 0-23 9-17 9点到17点
1-31 1,15 1号和15号
1-12 * 每月
0-7 (0和7=周日) 3 周三

crontab 命令

命令 作用
crontab -u USER -e 编辑用户计划任务
crontab -u USER -l 列出计划任务
crontab -u USER -r 删除计划任务

验证

crontab -u natasha -l

6. 创建共享目录

题目要求

创建 /home/tools,拥有组 admins,组成员可读写访问,新文件自动继承 admins 组。

实际操作

mkdir /home/tools
chgrp admins /home/tools
chmod g+rwx,o=--- /home/tools
chmod g+s /home/tools

扩展开的知识点

SGID(Set Group ID)

  • chmod g+s DIRchmod 2775 DIR
  • 在目录上设置 SGID 后,该目录下新建的文件/目录自动继承目录的组
  • ls -l 显示为 drwxrws---(组执行位显示 s 而非 x

chmod 权限

命令 含义
chmod g+rwx 组添加读写执行权限
chmod o=--- 其他人无任何权限
chmod g+s 设置 SGID
chmod 2775 SGID + rwxrwxr-x

chgrp

  • chgrp GROUP PATH — 更改文件/目录的拥有组

验证

ls -ld /home/tools
# drwxrws---. 2 root admins 6 Nov 10 13:19 /home/tools

7. 配置网络时间同步

题目要求

配置 chrony 向 classroom.example.com 同步时间。

实际操作

vim /etc/chrony.conf
# 添加:
# server classroom.example.com iburst

systemctl restart chronyd.service

扩展开的知识点

chrony.conf 配置

配置行 含义
server HOST iburst 指定 NTP 服务器,iburst 快速同步
pool POOL iburst 使用 NTP 服务器池

iburst 参数

  • 前 4 个请求以 2 秒间隔发送(而非默认的 16-64 秒)
  • 网络连接正常时可在 10 秒内完成首次同步

验证

chronyc sources
# ^* 表示正在同步
# 只要能看到配置的地址即可

8. 配置文件系统自动挂载

题目要求

配置 autofs,自动挂载 serverb 的 NFS 共享 /rhome/remoteuser0 到本地 /rhome/remoteuser0

实际操作

# 安装
yum install autofs -y

# 查看共享
showmount -e serverb.lab.example.com

# 配置主映射文件
echo '/rhome /etc/nfs.auto' >> /etc/auto.master

# 创建映射文件
cat > /etc/nfs.auto << 'EOF'
remoteuser0 -rw serverb.lab.example.com:/rhome/remoteuser0
EOF

# 启动服务
systemctl enable --now autofs.service

扩展开的知识点

autofs 架构

/etc/auto.master (主映射)
/rhome    /etc/nfs.auto     # /rhome 目录由 /etc/nfs.auto 管理
remoteuser0  -rw  serverb:/rhome/remoteuser0   # 具体挂载规则

映射文件格式

挂载点  选项  源位置
key      -rw   server:/path
选项 含义
-rw 读写挂载
-ro 只读挂载
-rw,soft 软挂载(超时后返回错误)

NFS 相关命令

命令 作用
showmount -e HOST 查看 NFS 共享列表
exportfs -v 查看本机 NFS 导出
systemctl restart nfs-server 重启 NFS 服务

验证

su - remoteuser0
df -Th | grep rhome
touch /rhome/remoteuser0/test.txt   # 能写入

9. 配置用户账户

题目要求

创建用户 john,UID 为 2023,密码 redhat。

实际操作

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

10. 查找文件

题目要求

查找属于用户 john 的文件,复制到 /root/findfiles

实际操作

mkdir -p /root/findfiles
find / -user john -exec cp {} /root/findfiles/ \;

扩展开的知识点

find 常用选项

选项 含义
-user USER 按文件所有者查找
-group GROUP 按文件所属组查找
-name PATTERN 按文件名查找
-type f/d/l 按类型(文件/目录/链接)查找
-size +100M 按大小查找
-mtime -7 最近 7 天修改的文件
-perm MODE 按权限查找
-exec CMD {} \; 对找到的文件执行命令

exec 语法

find ... -exec COMMAND {} \;
# {} 代表找到的文件
# \; 表示 exec 结束

验证

ls /root/findfiles/

11. 查找字符串

题目要求

/etc/man_db.conf 中找所有含 sbin 的行,导入 /root/out.txt(不含空行)。

实际操作

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

扩展开的知识点

grep 常用选项

选项 含义
-i 忽略大小写
-v 反向匹配(排除)
-n 显示行号
-r 递归搜索目录
-c 只显示匹配行数
-E 扩展正则表达式
-w 匹配整个单词

验证

cat /root/out.txt

12. 创建归档

题目要求

创建 /root/backup-YYYY-MM-DD.tar.bz2 归档 /usr/local

实际操作

tar -cjf /root/backup-$(date +%F).tar.bz2 /usr/local/

扩展开的知识点

tar 压缩选项

选项 压缩格式
-z gzip(.tar.gz
-j bzip2(.tar.bz2
-J xz(.tar.xz

tar 操作选项

选项 作用
-c 创建归档
-x 解压归档
-t 列出归档内容
-f 指定文件名
-v 显示详细信息

date 命令

格式 输出
date +%F 2023-11-10
date +%Y%m%d 20231110
date +%H:%M 14:30

验证

file /root/backup-*.tar.bz2

13. 创建容器镜像

题目要求

以 sashat 用户,使用 http://content.example.com/Containerfile 创建 modify_file:latest 镜像。

实际操作

# 以 sashat 身份
ssh sashat@servera

# 下载 Containerfile
wget http://content.example.com/Containerfile

# 登录镜像仓库
podman login registry.lab.example.com
# admin / redhat321

# 构建镜像
podman build -t modify_file:latest .

扩展开的知识点

podman build

参数 含义
-t NAME:TAG 指定镜像名和标签
. 构建上下文(当前目录)

镜像仓库配置

# /etc/containers/registries.conf
unqualified-search-registries = ['registry.lab.example.com']

[[registry]]
location = "registry.lab.example.com"
insecure = true
blocked = false

验证

podman images

14. 配置容器开机自启

题目要求

创建 rootless 容器 txt2pdf,使用 modify_file 镜像,配置为 systemd 服务自动启动。

实际操作

# 创建映射目录
mkdir /opt/{txt,pdf}
chown sashat:sashat /opt/{txt,pdf}

# 以 sashat 身份运行容器
ssh sashat@servera
podman run -d --name txt2pdf \
  -v /opt/txt/:/opt/txt:Z \
  -v /opt/pdf:/opt/pdf:Z \
  localhost/modify_file:latest

# 生成 systemd 服务文件
mkdir -p ~/.config/systemd/user
cd ~/.config/systemd/user
podman generate systemd txt2pdf --files --name --new

# 启用服务
systemctl --user daemon-reload
systemctl --user enable container-txt2pdf.service

扩展开的知识点

Rootless 容器

  • 普通用户(非 root)运行的容器
  • systemd 服务文件在 ~/.config/systemd/user/
  • 使用 systemctl --user 管理

podman run 参数

→ 完整参数详解见 第 18 题 podman run 参数详解

参数 含义
-d 后台运行
--name NAME 容器名称
-v HOST:CONTAINER:Z 挂载卷(:Z 为 SELinux 标签)

podman generate systemd

参数 含义
--files 生成 .service 文件
--name 使用容器名命名
--new 每次启动创建新容器

lingering(持久化)

loginctl enable-linger sashat
确保用户退出后服务仍在运行。

验证

# 测试
podman rm -f txt2pdf
systemctl --user restart container-txt2pdf.service
podman ps
echo "hello rhcsa" > /opt/txt/rhcsa.txt
ls /opt/pdf/

15. 配置 sudo 提权

题目要求

允许 admins 组成员以 root 身份执行任何命令,无需密码。

实际操作

echo '%admins ALL=(root) NOPASSWD:ALL' > /etc/sudoers.d/admins
chmod 440 /etc/sudoers.d/admins

扩展开的知识点

sudoers 格式

谁    在哪台机器=(以谁的身份) 命令
%admins ALL=(root) NOPASSWD:ALL
字段 含义
%admins % 表示组
ALL 所有主机
(root) 以 root 身份
NOPASSWD: 不需要密码
ALL 所有命令

验证安全配置

visudo -c       # 检查 sudoers 语法

验证

su - harry
sudo id
# uid=0(root)

16. 设置默认密码策略

题目要求

新创建用户密码默认 20 天后过期。

实际操作

vim /etc/login.defs
# PASS_MAX_DAYS  20

扩展开的知识点

/etc/login.defs 密码策略

参数 含义
PASS_MAX_DAYS 密码最长使用天数
PASS_MIN_DAYS 密码最短使用天数
PASS_MIN_LEN 密码最小长度
PASS_WARN_AGE 过期前警告天数

chage 命令

命令 作用
chage -l USER 查看密码过期信息
chage -M DAYS USER 设置密码最大天数
chage -E DATE USER 设置账户过期日期

验证

useradd testuser
chage -l testuser
# Maximum number of days between password change: 20
userdel -r testuser

17. 创建系统监控脚本

题目要求

创建 /usr/local/bin/exam_sysinfo 脚本,按 CPU 百分比排序输出进程信息。

实际操作

cat > /usr/local/bin/exam_sysinfo << 'EOF'
#!/bin/bash
ps -xao user,pid,vsz,rss,%cpu --sort=%cpu
EOF

chmod +x /usr/local/bin/exam_sysinfo

扩展开的知识点

ps 输出参数

参数 含义
user 进程所有者
pid 进程 ID
vsz 虚拟内存大小
rss 实际内存大小
%cpu CPU 使用率

ps 选项

选项 含义
-x 包含无终端的进程
-a 所有用户的进程
-o 自定义输出格式
--sort=%cpu 按 CPU 排序

18. 运行一个容器(rsyslog)

题目要求

从 tar 包导入 rsyslog 镜像,推送到仓库,运行容器,用 logger 发送日志。

实际操作

# 下载并导入
wget http://content.example.com/rsyslog.tar
podman load < rsyslog.tar

# 标记并推送
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 --name logserver \
  -v /home/sashat/syslog:/var/log:Z \
  registry.lab.example.com/library/rsyslog:latest

# 进入容器写日志
podman exec -it logserver /bin/bash
logger "This is a rhcsa exam"

podman run 参数详解

参数 含义 详细说明
-d 后台运行(detach) 容器在后台执行,不占用当前终端
--privileged 特权模式 赋予容器几乎等同于宿主机 root 的权限,可访问设备、内核参数等。题目需要挂载卷并写入日志,必须加此参数
-v HOST:CONTAINER:Z 挂载卷 将宿主机目录映射到容器内;:Z 为 SELinux 私有标签(仅本容器可访问),:z 为共享标签
--name NAME 容器命名 方便后续 podman exec/restart/rm 操作

镜像来源说明

本地 (localhost/rsyslog:latest) 和远程仓库 (registry.lab.example.com/library/rsyslog:latest) 都能运行,本质是同一个镜像。

考试建议:用远程仓库地址运行,因为题目要求推送到仓库,用远程地址能验证推送是否成功。

扩展开的知识点

podman 镜像操作

命令 作用
podman load < FILE 从 tar 文件导入镜像
podman save IMAGE > FILE 导出镜像到 tar
podman image tag SRC DEST 给镜像打标签
podman push IMAGE 推送镜像到仓库
podman pull IMAGE 拉取镜像
podman exec -it CMD 在运行容器中执行命令

验证

grep rhcsa /home/sashat/syslog/messages

19. 重置 root 密码 (serverb)

题目要求

将 serverb 的 root 密码重置为 Young

实际操作

1. 重启系统
2. 在 GRUB 菜单,选择要启动的内核,按 e 编辑
3. 找到 linux 开头的行,删除到 ro 后面,添加 rd.break
4. 按 Ctrl+X 启动

5. 进入紧急模式后:
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
sh-4.4# echo Young | passwd --stdin root
sh-4.4# touch /.autorelabel
sh-4.4# exit
switch_root:/# exit

扩展开的知识点

mount 命令详解

mount -o remount,rw /sysroot
                                  └─ 挂载点:真实的系统根目录
        └─ 选项:remount(重新挂载,不卸载直接改选项)+ rw(读写模式)
    └─ -o:指定挂载选项
└─ mount:挂载命令
参数 含义
-o remount 重新挂载,不卸载直接修改挂载选项
rw 读写模式(默认 /sysroot 是只读的)
/sysroot 真实系统根目录(chroot 环境下的根)

为什么需要这步? 安全启动后 /sysroot 以只读方式挂载,改密码需要写权限,所以必须 remount 为 rw。

rd.break 流程

reboot → GRUB 菜单 → 按 e 编辑内核行 → 添加 rd.break → Ctrl+X 启动
→ mount -o remount,rw /sysroot → chroot /sysroot → 改密码 → touch /.autorelabel

关键步骤

步骤 命令 含义
1 mount -o remount,rw /sysroot 以读写方式挂载系统根
2 chroot /sysroot 切换到真实系统根目录
3 passwd 修改密码
4 touch /.autorelabel 创建标签重打标记(SELinux)

20. 配置软件仓库 (serverb)

题目要求

在 serverb 上配置 YUM 仓库,操作与 第 2 题 完全相同。

实际操作

# 与第 2 题操作一致,详见 [第 2 题](#2-配置软件仓库-servera)
cat > /etc/yum.repos.d/rhel_dvd.repo << 'EOF'
[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
EOF

dnf clean all && dnf makecache

💡 同一套操作,只是换了个服务器。 仓库配置项含义详见 第 2 题扩展知识点


21. 调整逻辑卷大小

题目要求

exam 卷组中 rhel 逻辑卷扩容到 512M,保留文件系统内容。

实际操作

# 如果逻辑卷不存在,先创建 LVM 环境
# 1. 创建分区
parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart primary 0% 100%

# 2. 创建 PV/VG/LV
pvcreate /dev/vdb1
vgcreate exam /dev/vdb1
lvcreate -L 480M -n rhel exam

# 3. 格式化并挂载
mkfs.xfs /dev/exam/rhel
mkdir /mnt/rhel
echo '/dev/exam/rhel /mnt/rhel xfs defaults 0 0' >> /etc/fstab
mount -a

# 扩容(题目核心操作)
lvextend -r -L 512M /dev/exam/rhel

扩展开的知识点

lvextend / lvreduce

参数 含义
-r 同时调整文件系统大小(resize2fs/xfs_growfs)
-L SIZE 指定新大小(绝对)
-L +SIZE 增加多少(相对)

验证命令详解

命令 用途 显示内容
df -Th 查看已挂载文件系统 文件系统类型(xfs/ext4)+ 使用率 + 挂载点
lsblk 查看块设备树 所有块设备层级关系(含未挂载的分区/LV)
lvs 查看逻辑卷 逻辑卷名、大小、所属 VG

df -Th vs lsblk 区别

  • df -Th:显示已挂载文件系统的实际使用情况,看不到未挂载的分区
  • lsblk:显示所有块设备的层级关系(磁盘→分区→VG→LV),不管有没有挂载

其他相关命令

lvs              # 查看逻辑卷信息
vgs              # 查看卷组信息
pvs              # 查看物理卷信息
blkid            # 查看设备 UUID 和文件系统类型

LVM 常用命令

命令 作用
lvs / lvdisplay 查看逻辑卷
vgs / vgdisplay 查看卷组
pvs / pvdisplay 查看物理卷
lvcreate 创建逻辑卷
lvextend 扩容逻辑卷
lvreduce 缩减逻辑卷
lvremove 删除逻辑卷

验证

df -Th /mnt/rhel
# Size 在 507M 左右正常
# 确认 fstab 中有自动挂载项

22. 配置 swap 交换分区

题目要求

向 serverb 添加一个 512MiB 交换分区,开机自动挂载。

实际操作

# 1. 创建分区
fdisk /dev/vdb
# n → 直接回车 → 分区号默认 → 起始扇区默认 → +512M → t → 分区号默认 → 82 → w

# 2. 格式化 swap
mkswap /dev/vdb2

# 3. 配置开机自动挂载
echo '/dev/vdb2 swap swap defaults 0 0' >> /etc/fstab

# 4. 启用所有 swap
swapon -a

扩展开的知识点

fdisk 操作

作用
n 新建分区
d 删除分区
p 打印分区表
t 更改分区类型
w 保存并退出
q 不保存退出

分区类型代码

代码 类型
82 Linux swap
83 Linux 标准
8e Linux LVM

fstab 格式

设备        挂载点  类型   选项     dump  fsck
/dev/vdb2  swap    swap   defaults 0     0

验证

free -m  # 查看 swap 大小

23. 创建逻辑卷

题目要求

创建逻辑卷 myvg/mylv:50 个 PE(每个 PE 16MiB),ext3 格式化,挂载到 /mnt/mydata

实际操作

# 1. 创建分区
fdisk /dev/vdb
# n → 分区号默认 → +1G → t → 分区号默认 → 8e → w

# 2. 创建卷组(指定 PE 大小)
vgcreate -s 16M myvg /dev/vdb3

# 3. 创建逻辑卷(50 个 PE)
lvcreate -l 50 -n mylv myvg

# 4. 格式化
mkfs.ext3 /dev/myvg/mylv

# 5. 挂载
mkdir /mnt/mydata
echo '/dev/myvg/mylv /mnt/mydata ext3 defaults 0 0' >> /etc/fstab
mount -a

扩展开的知识点

PE(Physical Extent)概念

  • PE 是 LVM 的最小分配单元
  • -s 16M 设置 PE 大小为 16MiB
  • 逻辑卷大小 = PE 数量 × PE 大小
  • 50 × 16MiB = 800MiB

lvcreate 参数

参数 含义
-L SIZE 按绝对大小创建
-l NUM 按 PE 数量创建
-n NAME 逻辑卷名称

验证

df -Th /mnt/mydata

24. 配置系统调优

题目要求

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

实际操作

# 查看推荐配置
tuned-adm recommend

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

扩展开的知识点

tuned 命令

命令 作用
tuned-adm recommend 查看系统推荐的调优方案
tuned-adm profile NAME 设置调优方案
tuned-adm active 查看当前激活的方案
tuned-adm list 列出所有可用方案
tuned-adm off 关闭调优

验证

tuned-adm list | grep Current
# Current active profile: virtual-guest

29. RHCSA 新增题型:配置 Umask (2026-05-24)

题目要求

设置 natasha 用户 umask 为 044,永久生效。

实际操作

# 切换到 natasha 用户
su - natasha

# 设置 umask
umask 044

# 永久生效:写入 ~/.bashrc(用户级,不是 /etc/profile)
echo "umask 044" >> ~/.bashrc
source .bashrc

# 验证
mkdir testdir
touch testfile
ls -l
dr--r--r--.  目录权限 777-044=733
-r--r--r--.  文件权限 666-044=622

关键点

要点 说明
umask 计算 目录: 777-044=733, 文件: 666-044=622
永久生效位置 ~/.bashrc(用户级),不是 /etc/profile
追加用 >> 不能用 > 覆盖,否则会清空原有内容
source .bashrc 让当前 shell 立即生效,不用重新登录

30. RHCSA 新增题型:编辑应用程序 (2026-05-24)

题目要求

/usr/bin/ex200 写入 echo 命令,执行后输出指定内容。

实际操作

# 写入命令(外单内双引号嵌套)
echo 'echo "This is RHCSA Exam"' > /usr/bin/ex200
chmod +x /usr/bin/ex200

# 验证
su - natasha
ex200
# This is RHCSA Exam

关键点

  • /usr/bin/ 在 PATH 里,放这里直接敲名字能执行
  • 引号嵌套:外单内双,防止 shell 解析内层双引号

31. RHCSA 新增题型:搜索脚本 (2026-05-24)

题目要求

创建 /usr/local/bin/mysearch 脚本,使用 find 搜索文件并输出结果。

实际操作

cat > /usr/local/bin/mysearch << 'EOF'
#!/bin/bash
find / -size +30k -size -50k -perm -4000 -type f > /root/myfile
EOF

chmod a+x /usr/local/bin/mysearch
mysearch

find 参数详解

参数 含义
-size +30k 大于 30KB
-size -50k 小于 50KB
-perm -4000 包含 SUID 位(- 是包含,不是精确匹配)
-type f 普通文件

32. RHCSA 新增题型:SELinux 调试脚本 (2026-05-24)

题目要求

编写脚本完成 SELinux 三板斧操作:添加端口、修改文件标签。

→ SELinux 命令详解见 第 3 题扩展知识点第 25 题

实际操作

cat > /root/selinux_debug.sh << 'EOF'
#!/bin/bash
echo "Fixing SELinux..."
semanage port -a -t http_port_t -p tcp 82
chcon -t httpd_sys_content_t /var/www/html/*
EOF

chmod +x /root/selinux_debug.sh

SELinux 三板斧

步骤 命令 说明
1 getenforce 查看当前模式
2 semanage port -a -t http_port_t -p tcp 82 添加非标端口
3 chcon -t httpd_sys_content_t /var/www/html/* 给文件打 Web 标签
  • chcon 是临时修改,考试环境够用
  • 永久修改用 semanage fcontext + restorecon

33. RHCSA 容器题变化:三合一 (2026-05-24)

变化说明

从自定义构建镜像 → 拉取现成镜像,3道容器题合并1道。

完整流程

# 1. 登录仓库(考前须知给地址)
podman login registry.lab.example.com

# 2. 拉取镜像(地址因座位号不同)
podman search 搜索镜像
podman pull 拉取镜像

# 3. 生成 systemd 服务
podman generate systemd --new --name container-txt2pdf --files

# 4. 移动到用户级服务目录
mv container-txt2pdf.service ~/.config/systemd/user/

# 5. 启用服务
systemctl --user daemon-reload
systemctl --user enable --now container-txt2pdf.service

# 6. 关键:启用 linger(root 执行)
loginctl enable-linger sashat

关键点

要点 说明
镜像地址 不固定,看考前须知,用 podman search 确认
挂载加 :Z SELinux 标签,否则容器可能无权限访问
linger 确保用户退出后服务继续运行,必须 root 执行
用户级服务 systemctl --user,不能 sudo

综合速查

系统服务管理

systemctl enable --now SERVICE   # 启用并立即启动
systemctl status SERVICE          # 查看状态
systemctl restart SERVICE         # 重启
systemctl reload SERVICE          # 重载配置

SELinux 速查

getenforce                        # 查看当前状态
setenforce 1/0                    # enforcing/permissive
semanage port -l                  # 列出端口标签
semanage port -a -t TYPE -p PROTO PORT   # 添加端口
chcon -t TYPE FILE                # 临时改文件标签
restorecon -Rv DIR                # 恢复默认标签
ls -lZ                            # 查看上下文

LVM 速查

pvcreate /dev/vdb1                # 创建 PV
vgcreate VGNAME PV                # 创建 VG
lvcreate -L SIZE -n LVNAME VG     # 创建 LV
lvextend -r -L SIZE DEV           # 扩容 LV + 文件系统

容器速查

podman build -t NAME:TAG .         # 构建镜像
podman run -d --name NAME IMAGE    # 运行容器
podman generate systemd NAME --files --name --new  # 生成 service
systemctl --user enable --now SERVICE
loginctl enable-linger USER       # 用户持久化

容器镜像构建方式对比:第13题 vs 第18题

核心区别

  • 第13题:给的是 Containerfile(构建配方),用 podman build 生成本地镜像
  • 第18题:给的是 tar 包(已打包的镜像),用 podman load 导入本地镜像

为什么不能互换?

  • Containerfile 是文本配方,不能 load,只能 build
  • tar 包是成品镜像,不能 build,只能 load
  • 两者最终效果一样:先在本地存储生成镜像,再 podman push 推到仓库

关键命令对比

步骤 第13题 第18题
生成本地镜像 podman build -t name:tag . podman load < file.tar
打标签 build时 -t 直接指定 podman tag localhost/name:tag registry/name:tag
推送 podman push podman push

记忆口诀

  • 有菜谱(Containerfile)→ 自己炒菜(build)
  • 有成品(tar包)→ 装盘上桌(load + tag + push)

25. chcon 命令与 SELinux 标签

chcon -t tmp_t /var/www/html/*

→ SELinux 端口管理、文件上下文命令详见 第 3 题扩展知识点

参数拆解

参数 含义
chcon Change Context,修改 SELinux 安全上下文
-t 指定修改类型(type)
tmp_t 临时文件类型标签
/var/www/html/* 目标文件

SELinux 安全上下文格式

用户:角色:类型:级别
system_u:object_r:httpd_sys_content_t:s0
              类型(type),决定进程能否访问

核心规则:进程只能访问和它类型匹配的文件。

常见类型标签

标签 含义
httpd_sys_content_t httpd 能访问的网页内容
httpd_sys_rw_t httpd 能读写的文件
tmp_t 临时文件
admin_home_t 管理员家目录文件

chcon vs semanage

命令 效果 持久性
chcon -t type file 临时改标签 ❌ 重启/restorecon 后恢复
semanage fcontext -a -t type "path" 永久改策略 ✅ 持久生效

chcon 是临时补救,semanage 才是正解。


26. ls -lz 命令(查看 SELinux 标签)

ls -lz /var/www/html/

→ SELinux 安全上下文格式详解见 第 25 题

参数

参数 含义
-l 长格式显示(权限、所有者、大小、时间)
-z 显示 SELinux 安全上下文

SELinux 上下文格式

unconfined_u:object_r:httpd_sys_content_t:s0
     ↑           ↑              ↑            ↑
   用户        角色            类型         级别
字段 含义
用户 文件属于哪个 SELinux 用户
角色 文件角色(文件固定 object_r
类型 关键字段,决定哪些进程能访问
级别 MLS 安全级别(单级系统固定 s0

其他查看方式

ls -lZ /var/www/html/      # 大写 Z,和 -z 效果一样
getfattr -n security.selinux /var/www/html/file1

一句话

ls -lz = 长格式 + 显示 SELinux 标签,检查文件安全上下文是否正确。


27. useradd -s /sbin/nologin 详解

useradd -s /sbin/nologin alice

参数

参数 含义
-s 指定用户的登录 shell
/sbin/nologin 拒绝交互式登录的特殊 shell

为什么不能登录?

  • 用户登录时系统执行其登录 shell
  • /bin/bash → 启动命令行,可交互
  • /sbin/nologin → 直接拒绝,提示 "This account is currently not available"

使用场景

不是所有用户都需要登录。系统服务用的用户不需要交互:

useradd -s /sbin/nologin nginx   # nginx 服务账号
useradd -s /sbin/nologin mysql   # 数据库服务账号

安全原则:服务用专用用户跑,但不让登录,防止被利用。

nologin vs false

shell 行为
/sbin/nologin 拒绝登录,友好提示
/bin/false 拒绝登录,静默失败

28. ls -ld vs ls -lZ 对比

ls -ld

ls -ld /home/tools
参数 含义
-l 长格式
-d 显示目录本身,不进入目录列内容
ls -l /home/tools       # 列出目录里面的文件
ls -ld /home/tools      # 只看目录自己的属性

Set GID(权限里的 s)

drwxrws---. 2 root admins 6 Nov 10 13:19 /home/tools
     Set GID
  • 目录的组执行位出现 s = Set GID
  • 效果:该目录下新建的文件,所属组自动继承 admins 组,而不是创建者的主组

对比

命令 用途
ls -ld /home/tools 查看目录本身的权限和属性
ls -lZ /home/tools 查看目录里文件的 SELinux 标签
ls -ldZ /home/tools 查看目录本身的 SELinux 标签(两者组合)

一句话-d 看目录自己,-Z 看 SELinux 标签,可以组合使用。