🐧 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=不检查 |
验证
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 |
添加用户到附加组 |
验证
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 |
删除计划任务 |
验证
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 DIR 或 chmod 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 结束
验证
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 |
匹配整个单词 |
验证
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
验证
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
验证
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 |
逻辑卷名称 |
验证
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 标签)
→ 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
| 参数 |
含义 |
-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 标签,可以组合使用。