介绍
本次最终引导式实验将整合多项 RHCSA 备考技能。你仍将获得命令指导,但这些步骤更接近管理员的验证工作流:检查系统、配置所需状态,并使用标准工具证明最终结果。
在本实验中,你将创建一个本地操作员身份、准备持久化存储、从该存储部署一个小服务、添加 SELinux 和防火墙策略,并运行最终的就绪检查。
检查准备好的系统
在此步骤中,你将检查为最终工作流准备的资源。首先确认块设备、服务状态和 SELinux 模式。
环境初始化已在 public 区域中永久保留 SSH 和使用 3002/tcp 的 LabEx 浏览器终端访问规则。更改应用程序的防火墙策略时,请保留这些管理访问规则。
进入项目目录。
cd /home/labex/project
显示准备好的分区路径。后续命令将复用此路径,因此你无需猜测哪个块设备属于该实验。
cat /home/labex/project/rhcsa-final-part
检查准备好的块设备。它目前还没有最终的文件系统,因此这是你格式化前的基准状态。
lsblk "$(cat /home/labex/project/rhcsa-final-part)"
检查最终服务是否尚未配置。|| true 可以确保即使此时该单元尚未存在,实验也能继续进行。
systemctl status rhcsa-final-web.service --no-pager || true
在开始之前确认 SELinux 处于强制(enforcing)模式。强制模式很重要,因为后续的 SELinux 标签不仅仅是信息性的,它们会影响策略是否被应用。
getenforce
创建操作员身份和共享目录
在此步骤中,你将创建一个本地组、一个本地用户以及一个设置了 setgid 的共享目录。这些命令在编写时考虑了安全性,即使你需要重新运行它们也没问题。
如果组不存在,则创建该组。getent group 首先检查本地名称服务,|| 部分仅在查找失败时创建组。
getent group rhcsaops || sudo groupadd rhcsaops
如果 finaladmin 用户不存在,则创建该用户。
id finaladmin >/dev/null 2>&1 || sudo useradd -m -s /bin/bash -G rhcsaops finaladmin
确保该用户是操作员组的成员。-aG 选项用于追加组成员身份,而不是替换用户现有的附加组。
sudo usermod -aG rhcsaops finaladmin
id finaladmin
为操作员笔记创建一个共享目录。模式 2770 赋予组完全访问权限并设置 setgid 位,这样新文件就会继承 rhcsaops 组。
sudo mkdir -p /srv/rhcsa-final/team
sudo chown root:rhcsaops /srv/rhcsa-final/team
sudo chmod 2770 /srv/rhcsa-final/team
以 finaladmin 身份写入一个测试文件。
sudo -u finaladmin bash -c 'echo final validation access > /srv/rhcsa-final/team/finaladmin.txt'
检查目录和文件。
sudo stat -c '%a %U:%G %n' /srv/rhcsa-final/team /srv/rhcsa-final/team/finaladmin.txt
准备持久化存储
在此步骤中,你将在准备好的分区上创建文件系统,并按 UUID 进行持久化挂载。这反映了 RHCSA 风格任务中使用的存储验证模式。
将准备好的分区路径存储在 shell 变量中。
part="$(cat /home/labex/project/rhcsa-final-part)"
创建一个带有可识别标签的 ext4 文件系统。此操作会破坏准备好的练习分区,因此请务必在确认设备路径后再执行。
sudo mkfs.ext4 -F -L RHCSA_FINAL "$part"
创建挂载点。
sudo mkdir -p /mnt/rhcsa-final
获取文件系统 UUID 并替换该挂载点可能存在的旧 fstab 行。UUID 是持久化挂载的稳定标识符,删除旧行可以防止 fstab 中出现重复条目。
uuid="$(sudo blkid -s UUID -o value "$part")"
sudo sed -i '/\/mnt\/rhcsa-final/d' /etc/fstab
添加持久化挂载条目。
echo "UUID=$uuid /mnt/rhcsa-final ext4 defaults 0 0" | sudo tee -a /etc/fstab
从 fstab 挂载并检查结果。mount -a 证明 fstab 行当前有效,而 findmnt 和 df 则确认了挂载目标和可用容量。
sudo mount -a
findmnt /mnt/rhcsa-final
df -h /mnt/rhcsa-final
部署并启用最终服务
在此步骤中,你将在挂载的文件系统上放置 Web 内容,并创建一个在本地端口 18083 上提供服务的 systemd 服务。
创建 Web 内容目录。
sudo mkdir -p /mnt/rhcsa-final/www
创建内容文件。
echo "RHCSA final validation service" | sudo tee /mnt/rhcsa-final/www/index.html >/dev/null
设置权限,以便 labex 服务用户可以读取内容,而无需使其全局可写。该服务只需要组读取和目录遍历权限,不需要广泛的写入权限。
sudo chown -R root:labex /mnt/rhcsa-final/www
sudo chmod 750 /mnt/rhcsa-final/www
sudo chmod 640 /mnt/rhcsa-final/www/index.html
创建服务单元。该服务从挂载的内容目录运行,并绑定到本地主机的 18083 端口,这使得使用 curl 进行本地验证变得非常容易。
sudo tee /etc/systemd/system/rhcsa-final-web.service >/dev/null <<'EOF'
[Unit]
Description=RHCSA final validation web service
After=network.target
[Service]
Type=simple
User=labex
Group=labex
WorkingDirectory=/mnt/rhcsa-final/www
ExecStart=/usr/bin/python3 -m http.server 18083 --bind 127.0.0.1
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
保护单元文件,重新加载 systemd 并启用服务。/etc/systemd/system 下的单元文件应由 root 用户所有,daemon-reload 会让 systemd 在你启用并重启服务之前读取新的单元配置。
sudo chown root:root /etc/systemd/system/rhcsa-final-web.service
sudo chmod 644 /etc/systemd/system/rhcsa-final-web.service
sudo systemctl daemon-reload
sudo systemctl enable rhcsa-final-web.service
sudo systemctl restart rhcsa-final-web.service
sleep 1
测试服务。
systemctl is-active rhcsa-final-web.service
curl -s http://127.0.0.1:18083/
添加 SELinux 和防火墙策略
在此步骤中,你将完善服务策略。为内容和端口添加持久化的 SELinux 标签,然后使用 firewalld 开放端口。
添加或更新持久化文件上下文规则。|| 模式使其可以安全地重新运行:当规则缺失时添加它,当路径已经有自定义规则时修改它。
sudo semanage fcontext -a -t httpd_sys_content_t '/mnt/rhcsa-final/www(/.*)?' || sudo semanage fcontext -m -t httpd_sys_content_t '/mnt/rhcsa-final/www(/.*)?'
应用上下文规则。restorecon 会更改当前文件标签以匹配你刚刚创建的持久化 SELinux 规则。
sudo restorecon -Rv /mnt/rhcsa-final/www
添加或更新 SELinux HTTP 端口标签。添加或修改模式可以同时处理全新系统和端口标签已存在的情况。
sudo semanage port -a -t http_port_t -p tcp 18083 || sudo semanage port -m -t http_port_t -p tcp 18083
启动 firewalld 并永久开放服务端口。
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-port=18083/tcp
sudo firewall-cmd --reload
检查标签和防火墙状态。这些检查将策略工作与可观察的状态联系起来:文件标签、允许的 HTTP 端口类型以及开放的防火墙端口。
ls -Z /mnt/rhcsa-final/www/index.html
sudo semanage port -l | grep '^http_port_t'
sudo firewall-cmd --list-ports
运行最终就绪检查
在此步骤中,你将使用在整个课程中使用的相同工具来验证完整的系统状态。这不是一份书面报告,而是一次操作检查。
检查本地身份和组成员身份。
id finaladmin
getent group rhcsaops
检查持久化存储。你正在同时验证实时挂载和保存的 fstab 条目,因为仅验证其中任何一个都只是存储要求的一半。
findmnt /mnt/rhcsa-final
grep /mnt/rhcsa-final /etc/fstab
检查服务。
systemctl is-enabled rhcsa-final-web.service
systemctl is-active rhcsa-final-web.service
curl -s http://127.0.0.1:18083/
检查 SELinux 和 firewalld。最终状态应显示 SELinux 处于强制模式、服务文件上有 HTTP 内容标签,并且 firewalld 中开放了 18083/tcp 端口。
getenforce
ls -Z /mnt/rhcsa-final/www/index.html
sudo firewall-cmd --list-ports
总结
你通过配置操作员身份、setgid 共享目录、持久化存储、systemd 服务、SELinux 文件和端口标签、firewalld 暴露以及基于命令的最终验证,完成了一个最终的引导式就绪工作流。



