
培训课到最后一堂我通常会给学员布置一个“大活”面前这台刚装完最小化系统的服务器要在限时之内完成存储扩容、用户权限、Web服务部署、防火墙与SELinux策略、故障恢复等一系列配置最终变成一台能稳定对外提供服务的生产机器。这个环节就是RHCSA结课综合项目。说实话很多学员在单项练习时感觉良好一进综合项目就原形毕露——这恰恰是它最有价值的地方。这篇文章我会把项目中遇到的高频问题完整拆开从任务书设计、LVM扩容、权限与SELinux排错、服务联调一直到grub和root密码故障恢复全部按我实际带练的顺序讲一遍。内容对准备RHCSA考试的人、带培训的老师、以及想自测Linux系统管理水平的读者都有参考价值可以直接拿去当模拟题做。1. 综合项目为什么比刷题更有价值任务书设计与考纲对照1.1 平时练的是零件综合项目装的是整机我见过太多“刷题型选手”单独问LVM怎么扩、单独问SELinux怎么配回答得头头是道。可一旦给一台陌生机器要求在无提示的情况下把多个需求串起来就手忙脚乱。原因是单项练习的“提示感”太强了——你打开LVM专题心里早知道这题要建PV、做VG、切LV但综合项目里没人告诉你现在该用LVM还是直接分个区也没人提醒你改完/etc/fstab后要mount -a验证。RHCSA考试本身就是这种“只给结果要求、不给操作路径”的实战模式。综合项目模仿的正是这一点它是把几十个独立考点重新编排成一套“服务器上线任务”逼你从需求反推技术方案。做过一遍之后你对各模块之间如何衔接、重启后哪些配置会失效的理解会远超刷十套题。1.2 我设计的结课任务书可直接当模拟题自测以下这套任务书是我在结课项目里实际使用的版本环境为RHEL 9.x虚拟机目标是把一台刚装完系统的裸机配置成可用的业务服务器。想自测的同学可以完全照做环境RHEL 9.x2核4G内存40G系统盘 10G数据盘 1. 设置主机名为 server01.example.com配置静态IP 192.168.10.10/24 网关192.168.10.1DNS为192.168.10.1 2. 将10G数据盘加入LVM创建卷组vgdata创建5G逻辑卷lvdata 格式化为xfs挂载到/data并设置开机自动挂载 3. 将lvdata在线扩展到8G保持xfs文件系统数据不丢失 4. 创建用户组devops创建用户user1主组user1补充组devops和wheel 创建用户user2登录shell为/sbin/nologin设置各自密码 5. 配置sudo允许devops组成员无密码执行systemctl restart httpd 6. 创建协作目录/project/share属组devops权限2770供devops组共享文件 7. 配置计划任务每天02:30以root身份备份/var/log/messages到/backup/ 备份文件名带日期只保留最近7天 8. 安装并配置httpd默认网页输出server01.example.com welcome 9. 在/wwwhost目录创建index.html通过httpd的8000端口对外提供服务 并确保重启后依然有效 10. 配置firewalld默认区域放行http服务和8000/tcp端口 11. 保持SELinux为enforcing并确保第9题网站能正常访问 12. 配置sshd禁止root远程登录仅允许user1远程登录 13. 配置chronyd与时间服务器同步并设置开机自启 14. 故障题系统root密码丢失请重置为新密码 15. 故障题/boot/grub2/grub.cfg被删除请恢复引导并正常进入系统你看这些任务没有一个超纲但每一条都带着“生产环境味道”。第2题和第3题衔接是LVM的核心用法第6题设计成devops协作目录是为了考setgid位的业务场景第9题把自定义目录、非标准端口、SELinux三者强行绑定是最容易翻车的组合拳第15题则是纯粹的临场心态考验。1.3 任务书与RHCSA考纲的对应关系下面这张表是我在结课总结时给学员对照用的能清楚看到这套任务覆盖了RHCSA的哪些重点域任务编号对应考纲领域核心考察点1、13系统基础与网络配置主机名、nmcli静态IP、chrony时间同步2、3、14存储管理LVM创建、xfs扩容、swap、重置密码4、5、6用户与权限用户组、sudo、setgid协作目录7自动化任务crontab、备份脚本、日志轮转思路8、9、10、11服务与安全httpd、firewalld、SELinux上下文与端口12远程管理安全sshd加固、AllowUsers限制15故障恢复grub手动引导、紧急模式修复对照表的价值在于做完项目后你可以逐个打勾知道自己哪块知识还是“空心”的。考试前如果这套任务能全部独立完成且重启后所有配置仍然生效那通过RHCSA的概率已经相当大了。2. 从装系统开始环境规划和初始配置里藏着的细节2.1 虚拟机规格与手动分区方案很多人觉得装系统不是考点直接一路默认。但在综合项目里“手动分区”才是正确选择——因为RHCSA考试明确要求你处理分区场景而且默认的自动分区方案往往会吃掉整个磁盘后续做LVM扩容时反而没有干净的实验空间。我的建议配置VMware或VirtualBox都行2核CPU、4G内存、40G系统盘加10G数据盘。创建虚拟机时把数据盘单独留出来先不分区等系统装完再模拟“服务器加硬盘”的真实场景。手动分区时我是这么切的挂载点/用途大小文件系统说明/boot1Gxfs引导分区不用太大/15Gxfs根分区装系统后剩余会较大swap2Gswap交换分区按内存一半以上规划/var/log5Gxfs单独分区可防止日志占满根分区/home剩余xfs剩余空间给用户数据这里有个容易被忽略的点/var/log单独分区是“日志写满不影响系统”的经典做法考试和面试都可能问到。安装程序默认用的LVM方案可以保留但要确保分区方案里给后续练习留出未分配的磁盘空间。2.2 软件包选择与初始账号规划软件包选择上我的建议是不选“带图形界面”的Workstation选Server额外勾选“系统管理工具”这类基础包组。考试环境基本是命令行图形界面既占资源又容易让你产生依赖。装完系统后如果发现缺东西再用dnf安装比如dnf install -y vim bash-completion net-tools nmstate这些不是RHCSA必须但对操作效率提升明显。bash-completion能自动补全命令参数nete-tools提供ifconfig等传统网络工具方便对比排查。初始账号也要提前规划。安装界面会让你创建root密码和一个普通用户我建议普通用户就用user1密码设成符合策略的强密码密码记到笔记里。后面做sudo、sshd限制都用得着省得到时候再useradd一遍。2.3 装完系统后的“摸底检查”系统装完不要急着做任务先花五分钟摸底。这五分钟能帮你摆脱“不知道自己改了什么”的混乱状态。# 查看系统版本 cat /etc/os-release # 查看网络接口和IP ip addr # 查看主机名 hostnamectl status # 查看SELinux状态 getenforce sestatus # 查看防火墙状态 systemctl status firewalld # 查看磁盘和逻辑卷情况 lsblk vgs重点记住两个“初始事实”SELinux默认是Enforcing、firewalld默认是开启的。很多学员做题做到一半发现服务访问不了第一反应是“把SELinux关掉”这就是大忌——RHCSA明确要求你会在Enforcing模式下解决问题而且动不动就setenforce 0重启后会原形毕露。3. 存储与LVM扩容占分最重、最容易临场翻车的一关3.1 新磁盘加入与PV/VG/LV创建流程任务书第2题要求把10G数据盘纳入LVM。先说实话如果你只是想挂载一块新盘直接用mkfs.xfs mount 就够了为什么要绕一圈用LVM因为LVM解决了两个生产环境痛点一是分区大小无法在线调整二是单块磁盘容量有限LVM可以把多块盘组合成一个卷组再灵活划分逻辑卷。形象点说物理分区像一个个固定大小的房间而LVM像仓库里的货架你可以把好几个房间的墙打通成一个大厅卷组再根据需要在里面划出不同大小的隔间逻辑卷隔间不够用了随时扩容。模拟场景开始。插入第二块10G磁盘后先确认系统识别lsblk正常会看到新的磁盘设备比如/dev/vdb虚拟机环境或/dev/sdb物理机环境。然后创建PV、VG、LV# 创建物理卷 pvcreate /dev/vdb # 查看物理卷 pvs # 创建卷组 vgcreate vgdata /dev/vdb # 查看卷组 vgs # 创建5G逻辑卷 lvcreate -L 5G -n lvdata vgdata # 查看逻辑卷 lvs创建完LV后它会在/dev目录下出现两个可用的路径一个是设备映射器路径/dev/mapper/vgdata-lvdata一个是友好路径/dev/vgdata/lvdata两者指向同一设备用哪个都行。接下来格式化并挂载# 格式化为xfs mkfs.xfs /dev/vgdata/lvdata # 创建挂载点 mkdir /data # 临时挂载 mount /dev/vgdata/lvdata /data # 确认挂载结果 df -h /data到这里任务书第2题的“手动部分”完成了但还没完——题目要求“开机自动挂载”这就要落到3.3节的fstab配置。3.2 在线扩容同一个命令xfs和ext4的后续操作完全不同任务书第3题要求把lvdata在线扩展到8G。在线扩容的意思是业务不能停数据不能丢挂载状态不能中断。整个流程分两步很多学员只做第一步就去看结果然后疑惑“为什么df -h没变化”。第一步扩展逻辑卷本身# 方式一扩容到指定大小8G lvextend -L 8G /dev/vgdata/lvdata # 方式二在当前5G基础上增加3G lvextend -L 3G /dev/vgdata/lvdata第二步同步扩展文件系统。这一步才是让df -h显示变化的操作而且xfs和ext4的命令完全不同文件系统扩展命令是否支持缩容xfsxfs_growfs /data按挂载点不支持ext4resize2fs /dev/vgdata/lvdata按设备路径支持xfs是RHEL默认文件系统考试和生产环境绝大多数情况都会遇到。它的扩展命令要指定挂载点因为xfs本身不关心设备名只关心挂载结构# 扩展xfs文件系统 xfs_growfs /data # 验证容量 df -h /data如果学员用的是ext4会习惯性写成resize2fs结果报了“Filesystem mounted”一堆警告这就是没搞清楚文件系统差异。xfs不支持缩容这件事要特别记牢所以第3题我要求扩到8G而不是缩回3G目的就是避开这个不支持的场景。3.3 fstab、UUID和“重启后依然挂载”的验证逻辑开机自动挂载是fstab的工作但怎么把设备写进fstab有讲究。最稳的方式是用UUID不用设备路径# 查看文件系统UUID blkid /dev/vgdata/lvdata然后把下面这行追加到/etc/fstabUUIDxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs defaults 0 0fstab每行六个字段的含义是设备标识、挂载点、文件系统类型、挂载选项、是否dump备份、是否fsck检查。日常练习一般写成defaults 0 0即可最后一位是0表示开机不做fsck避免ext系列自动检查时出意外。为什么不直接用/dev/vgdata/lvdata因为内核在启动早期加载设备驱动有顺序问题设备路径在某些场景下会漂移UUID则稳定不变。这不是玄学而是生产环境实实在在踩过的坑。写完fstab后必须验证否则写错一个字符下次开机可能直接进emergency mode# 卸载后按fstab重新挂载验证配置正确 umount /data mount -a # 查看挂载状态 findmnt /data每次改完fstab都执行一次mount -a这是一个能救命的肌肉记忆。3.4 扩展swap的两种方法任务书里没单独写swap但实际项目里学员经常会遇到“swap太小”的问题而且RHCSA考纲也覆盖swap管理。最常见有两种做法。第一种用LVM新建一个swap逻辑卷推荐和现有LVM结构统一# 在vgdata卷组里创建2G的lvswap lvcreate -L 2G -n lvswap vgdata # 格式化为swap mkswap /dev/vgdata/lvswap # 立即启用 swapon /dev/vgdata/lvswap # 写入fstab echo UUID$(blkid -s UUID -o value /dev/vgdata/lvswap) none swap defaults 0 0 /etc/fstab第二种用swapfile文件形式的swap不依赖LVM# 创建2G的零填充文件 dd if/dev/zero of/swapfile bs1M count2048 # 权限必须600否则内核警告 chmod 600 /swapfile # 格式化为swap mkswap /swapfile # 启用 swapon /swapfileswapfile方式在云服务器上很常见因为云环境不方便调整分区。但RHCSA考试里LVM方式更保险因为你在fstab里写/dev/vgdata路径或UUID都好解释也符合主流配置规范。4. 用户权限与SELinux把“安全”要求从口号变成可落地配置4.1 用户批量创建与“主组/补充组”的选择任务书第4题要求创建用户组和用户。这里有个关键细节useradd创建用户后系统会自动创建一个同名主组所以user1的默认主组是user1。题目要求“补充组为devops和wheel”意思是这两个组是额外附加的不能覆盖主组。正确做法# 创建用户组 groupadd devops # 创建用户并指定补充组 useradd -G devops,wheel user1 # 创建不能登录系统的服务账号 useradd -s /sbin/nologin -G devops user2 # 批量设置密码 echo User12345 | passwd --stdin user1 echo User12345 | passwd --stdin user2为什么要用补充组而不是把主组直接改成devops因为主组决定用户“默认文件组”属性补充组则用来赋予附加权限。把用户塞进补充组可以同时拥有多个组的权限而不影响用户文件默认归属。比如user1同时属于wheel可以sudo和devops可以访问协作目录这是最典型的权限叠加。小技巧考试环境里如果需要批量创建很多用户用循环最省事for name in user1 user2 user3; do useradd -G devops $name echo $name:Passw0rd | chpasswd done4.2 sudo规则精确授权语法比权限本身更容易错任务书第5题要求“devops组成员无密码重启httpd”意思是这个组的人执行sudo时不需要输密码。配置sudo必须用visudo命令打开不要直接vim /etc/sudoers因为visudo保存时会检查语法。在/etc/sudoers.d/下建一个独立规则文件是更规范的做法# 用visudo -f 编辑独立文件 visudo -f /etc/sudoers.d/devops文件内容%devops ALL(ALL) NOPASSWD: /usr/bin/systemctl restart httpd这一行四个部分的含义分别是谁%devops组、在哪台主机上ALL、以什么身份执行ALL括号里指目标用户、能执行什么命令/usr/bin/systemctl restart httpd。最容易翻车的点有两个一是命令路径必须是绝对路径systemctl实际位于/usr/bin/systemctl可以用which systemctl确认二是NOPASSWD:的冒号后面必须跟命令不能换行否则语法检查直接报错。写完之后用下面方法验证# 检查语法 visudo -c # 查看user1实际拥有的sudo权限 sudo -l -U user1然后切到user1实际试一次su - user1 sudo systemctl restart httpd如果要求输密码说明NOPASSWD没生效如果提示“不在sudoers文件中”说明规则没匹配到。这种精确授权在生产环境非常实用比把所有管理员都塞进wheel组安全得多。4.3 协作目录的setgid方案与sticky bit场景任务书第6题是协作目录/project/share属组devops权限2770。这里的关键是“2”这个特殊权限位也就是setgid位。先看常规命令mkdir -p /project/share chown root:devops /project/share chmod 2770 /project/share2770的含义2表示setgid位770表示属主root有rwx、属组devops有rwx、其他人无权限。setgid位的作用是任何在/shares目录下新建的文件或子目录自动继承目录的属组devops而不是创建者自己的主组。这个机制对协作场景至关重要。如果没有setgid位devops组成员A创建的文件属组是A的主组组成员B可能就没有写权限协作就崩了。有了setgid所有文件都归devops组大家才能彼此修改。用ls -ld可以看到权限位上的sdrwxrws---. 2 root devops 6 Jan 1 00:00 /project/share另一个常见特殊权限是sticky bit典型例子是/tmp目录权限1777。sticky bit的作用是目录对所有用户可写但只有文件所有者、目录所有者或root才能删除文件。这样多个用户共用一个临时目录时谁也不能乱删别人的文件。这两类特殊权限在考试里经常以“判断以下权限含义”的形式出现。4.4 SELinux故障的标准定位与修复流程任务书第11题是“SELinux保持enforcing并确保网站能正常访问”这是综合项目里学员最头疼的部分。大多数人遇到网站403或连接被拒第一反应是关SELinux。但正确路线是看日志、找到被拒绝的操作、用正确的文件上下文或布尔值修复。先复现典型故障。第9题要求把网页放在自定义目录/wwwhost并通过8000端口访问配置完成后curl一下curl http://localhost:8000大概率返回403 Forbidden因为/wwwhost目录的SELinux类型是default_t而httpd只允许读取httpd_sys_content_t类型的目录。标准排查链路# 1. 确认SELinux模式 getenforce # 2. 查看审计日志里的AVC拒绝记录 ausearch -m AVC -ts recent # 或者 grep denied /var/log/audit/audit.log | tail -20日志里会看到类似这样的关键信息typeAVC msgaudit(...): avc: denied { getattr } for pid1234 commhttpd nameindex.html devdm-2 ... tcontextsystem_u:object_r:default_t:s0 tcontextsystem_u:object_r:httpd_sys_content_t:s0看到default_t这个类型修复方法就是用semanage把目录类型改成httpd能读的类型# 定义目录的SELinux文件上下文持久化 semanage fcontext -a -t httpd_sys_content_t /wwwhost(/.*)? # 应用上下文 restorecon -Rv /wwwhost # 再验证 curl http://localhost:8000这里(/.*)?是正则写法表示/wwwhost目录本身及其下所有文件和子目录。semanage持久化配置后即使目录重建restorecon也能恢复正确标签。另一个高频故障是“改了非标准端口8000后服务死活起不来”。原因是SELinux限制了httpd只能监听http_port_t类型的端口默认只包含80、443等。修复方法# 把8000端口加入httpd允许监听的端口列表 semanage port -a -t http_port_t -p tcp 8000这一点极其容易忽略firewalld放行了8000sshd也正常端口却还是被SELinux卡住。遇到“服务起不来”的故障先查SELinux端口类型是RHCSA实战里最重要的经验之一。5. 服务联调与安全加固从httpd能跑到sshd敢收5.1 firewalld的“永久生效”陷阱任务书第10题要求放行http服务和8000端口。firewalld最经典的坑就是“没加--permanent参数重启后配置丢失”。正确配置# 确认防火墙在运行并开机自启 systemctl enable --now firewalld # 永久放行http服务 firewall-cmd --permanent --add-servicehttp # 永久放行8000/tcp端口 firewall-cmd --permanent --add-port8000/tcp # 重新加载配置使永久规则生效 firewall-cmd --reload # 查看当前区域的全部规则 firewall-cmd --list-all如果你执行了不带--permanent的规则它只对当前会话有效reload后消失。这在综合项目中是“重启后失效”的高频原因之一。还有个容易混淆的点--add-servicehttp和--add-port80/tcp效果看起来一样但前者还要能识别服务名所对应的端口配置/etc/services和firewalld内置服务定义后者是直接放行端口。考试时按题目要求的表述来写题目说“放行http服务”就用service方式题目说“放行8080端口”就用port方式都能达到目的但理解区别能避免你被题目文字绕进去。5.2 httpd自定义目录与端口下的SELinux配合任务书第8、9题合起来是整套项目里最综合的一道题安装httpd、默认页输出固定内容、自定义目录/wwwhost、监听8000端口。安装与默认页面dnf install -y httpd systemctl enable --now httpd echo server01.example.com welcome /var/www/html/index.html然后配置8000端口的虚拟主机。在/etc/httpd/conf.d/下新建配置文件比如www-host.confListen 8000 VirtualHost *:8000 DocumentRoot /wwwhost Directory /wwwhost Require all granted /Directory /VirtualHost创建目录和页面文件mkdir /wwwhost echo Site on port 8000 /wwwhost/index.html验证配置语法并重载服务# 语法检查如果输出Syntax OK再继续 httpd -t systemctl reload httpd这里要说清楚改完配置用reload而不是restart。restart会断开现有连接、重启整个进程reload只是平滑重载配置不中断服务。生产环境改配置默认用reload只有改监听端口这类需要重建socket的场景才必须restart但httpd的Listen变化用reload也能生效稳妥起见可以先语法检查再reload。接下来就是4.4节说的SELinux文件上下文和端口类型问题把semanage和restorecon步骤做一遍再用curl验证curl http://localhost:8000 curl http://192.168.10.10:8000一条从“改配置→查SELinux→查防火墙”的完整联调验证到这里才算闭环。5.3 sshd加固改完配置别急着restart任务书第12题要求禁止root远程登录只允许user1远程登录。配置文件是/etc/ssh/sshd_config修改两个关键项PermitRootLogin no AllowUsers user1第一行禁止root直接登录第二行限制仅user1可登录。AllowUsers的优先级很高只要写了就只允许列表里的用户登录其他用户全部拒绝。改完配置后的操作顺序很重要# 1. 语法检查 sshd -t # 2. 平滑重载配置不中断现有会话 systemctl reload sshd为什么这里不推荐restart因为你是通过SSH连到服务器上操作的如果使用systemctl restart sshd可能会短暂断开所有连接如果配置里不小心改了端口甚至可能直接把你踢出去再也连不上。reload则不影响已有连接新连接才使用新配置风险小得多。验证时最好开两个终端一个保持当前连接另一个用root尝试登录确认被拒绝再用user1登录确认正常。这种“双终端验证法”在远程管理场景里是保命技能。5.4 chrony时间同步与crontab备份脚本的实操细节第13题配置时间同步命令本身不难常被忽略的是“验证”和“自启”# 安装chrony dnf install -y chrony # 修改/etc/chrony.conf添加或修改时间服务器 # 格式示例 # server time.example.com iburst # 启用并开机自启 systemctl enable --now chronyd # 验证时间源状态 chronyc sources # 验证系统时间与时间源同步 timedatectl第7题的计划任务稍微复杂一点。备份/var/log/messages文件名带日期保留7天。我建议把备份逻辑写成脚本再交给crontab调用而不是直接写一长串命令。脚本的好处是可测试、可排错、可复用。创建/usr/local/bin/backup_logs.sh#!/bin/bash # 备份目录 mkdir -p /backup # 删除7天前的备份文件 find /backup -name messages-*.tar.gz -mtime 7 -delete # 打包压缩messages日志 tar czf /backup/messages-$(date %F).tar.gz /var/log/messages然后赋权并加入计划任务chmod x /usr/local/bin/backup_logs.sh # 编辑root的计划任务 crontab -ecrontab内容30 2 * * * /usr/local/bin/backup_logs.sh五个字段依次是分钟、小时、日、月、周。30 2 * * *表示每天2点30分执行。如果写成* 2 * * *含义是每天2点的每一分钟都执行一次一个小时内跑60次这是新手常犯的错误。脚本里我特意用了/usr/local/bin/backup_logs.sh绝对路径因为cron环境下的PATH变量非常精简只包含/usr/bin和/bin如果你写相对路径或依赖脚本内部cd切换目录很容易出现“手动执行正常、cron执行失败”的诡异现象。验证计划任务是否执行的日志方法grep CRON /var/log/cron ls -lh /backup/6. 故障恢复专项综合项目里最考验临场心态的部分6.1 root密码重置rd.break的完整流程与.autorelabel的作用第14题是模拟root密码丢失。这个题表面是“重置密码”实际考的是系统启动流程和SELinux标签概念。RHEL 9的完整重置流程1.重启系统在GRUB菜单界面选中内核行按e进入编辑模式。 2.找到以linux开头的那一行在行尾追加参数rd.break3.按Ctrl x启动系统会进入一个initramfs的紧急shell。 4.此时/sysroot目录以只读方式挂载需要重新挂载为可写mount -o remount,rw /sysroot5.切换根目录到sysrootchroot /sysroot6.重置root密码echo NewRoot123 | passwd --stdin root7.关键一步创建.autorelabel标记文件touch /.autorelabel8.连续输入两次exit退出系统会自动重启。第7步很多人不理解。因为系统启动早期阶段SELinux还没完整加载你此时创建的密码文件或配置文件的SELinux标签可能不正确。touch /.autorelabel会让系统在重启时自动对所有文件执行一次SELinux重新标记确保标签正确。如果不做这一步可能出现密码已改但登录后各种服务权限错乱的问题。等待重启的时间比正常启动长是正常的因为autorelabel在后台跑文件重标记。重启后用新密码登录这题才算彻底完成。6.2 grub引导损坏与emergency mode的修复思路第15题模拟/boot/grub2/grub.cfg被删除。这是故障恢复题里最考验心态的一道系统重启后直接停在grub提示符没有任何菜单。你需要在grub提示符下手动引导内核再进入系统重建grub.cfg。先回顾一下/boot分区里有什么vmlinuz开头的内核文件、initramfs开头的initramfs文件grub2目录下的配置文件。手动引导就是告诉GRUB内核在哪、根文件系统在哪、initramfs在哪。在grub提示符下的操作# 加载xfs文件系统模块 grub insmod xfs # 查看所有可用磁盘分区 grub lsls会输出类似(hd0) (hd0,gpt2) (hd0,gpt1)的列表其中gpt1通常是/boot分区1G的那个。接着# 指定/boot所在分区 grub set root(hd0,gpt2) # 查看该分区下的文件确认内核文件完整名称 grub ls /boot grub ls / # 手动引导内核root指向系统的根逻辑卷 grub linux /vmlinuz-5.14.0-362.el9.x86_64 root/dev/mapper/rhel-root # 指定initramfs grub initrd /initramfs-5.14.0-362.el9.x86_64.img # 启动系统 grub boot这里的内核版本文件名以你系统里实际安装为准可以用ls /boot看到后照抄。手动引导进入系统后重建配置文件grub2-mkconfig -o /boot/grub2/grub.cfg重启验证能正常进入GRUB菜单这题就算完成。grub这类题考的不是命令背得熟不熟而是你是否理解启动流程。如果连/boot分区是哪个都不清楚进grub提示符就彻底懵了。另一个更常见的故障模式是/etc/fstab写错重启后进入emergency mode。这种场景的思路类似输入root密码进入维护shell检查fstab哪一行有问题注释或修复后执行mount -a验证再输入exit继续启动。所以我在3.3节反复强调fstab要备份、改完要验证就是为了让你尽量不触发这个故障。6.3 systemd服务起不来的标准排查链路综合项目中可能会埋一个“服务故障”的坑比如httpd起不来。怎么排查记住这条链路systemctl status看状态journalctl看日志systemctl cat看配置内容。我模拟一个常见故障httpd配置里指定了不存在的DocumentRoot目录服务启动失败。排查过程如下第一步看服务状态systemctl status httpd输出会显示Active: failed (Result: exit-code)之类但conf的error信息往往不直观。接着看具体日志journalctl -u httpd -n 50 --no-pager日志里可能有Failed to configure httpd with argument...或者No such file or directory这时候基本能定位是配置问题。第二步检查配置语法httpd -t如果输出DocumentRoot must be a directory那就找到了根因。创建目录或改配置后执行systemctl daemon-reload systemctl start httpd systemctl status httpd注意改了unit文件或相关系统配置后先daemon-reload再重启服务否则systemd可能还在用旧配置。这个习惯在排查systemd服务问题时能省掉很多“明明改了却不生效”的困扰。排查的底层逻辑其实是“让日志告诉你答案”而不是瞎猜。无论是httpd、sshd还是firewalld日志都是还原现场的第一手证据。7. 结课复盘翻车率最高的六个细节和一个验证习惯7.1 备份与语法检查改任何配置前都要有的肌肉记忆综合项目做完我把学员翻车的案例统计了一遍发现绝大多数不是“不会”而是“改完就崩、崩了不知道改了什么”。根基原因是没养成两个习惯改前备份、改后语法检查。改任何系统配置文件先备份cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak备份文件放在同目录下恢复时一条cp命令就能搞定。改完配置后用对应的语法检查工具验证常见的对应关系配置文件语法检查命令/etc/ssh/sshd_configsshd -t/etc/httpd/conf/httpd.conf 及conf.d下的文件httpd -t/etc/sudoers及sudoers.d文件visudo -ccrontabcrontab -e自带语法提示/etc/chrony.confchronyd -Q server ...有了这两个习惯综合项目里至少一半的“改完起不来”问题都能在造成后果之前被拦截。7.2 “重启后失效”三巨头任务书里大量题目都有“重启后依然生效”的隐性要求学员最容易栽在下面三个地方第一防火墙规则没加--permanent。前面反复强调不带这个参数reload一次规则就没了。第二网络配置没设置autoconnect。用nmcli配置IP时如果connection没有autoconnect yes重启后网卡不上线SSH直接断。第三服务只start没enable。systemctl start httpd只是本次启动生效reboot后服务没起来网站就挂了。这三类问题的共同点是当时验证没问题重启后原形毕露。所以结课项目我一直要求学员在全部任务完成后主动reboot一次然后逐项验证。这一步能筛掉大半隐患。7.3 逐项验证清单做完一项打一个勾最后分享我要求学员在项目末尾填写的一份验证清单照着做基本不会带着隐藏问题交卷# 1. 主机名和网络 hostnamectl status ip addr show # 2. LVM与挂载 vgs lvs df -h /data findmnt /data # 3. 用户与sudo id user1 sudo -l -U user1 # 4. 协作目录权限 ls -ld /project/share touch /project/share/test ls -l /project/share/test # 5. Web服务与安全 curl http://localhost curl http://localhost:8000 getenforce ss -tlnp | grep -E :80|:8000 firewall-cmd --list-all # 6. sshd ssh -o PubkeyAuthenticationno user1127.0.0.1 # 7. 计划任务 crontab -l ls -l /backup/ # 8. 重启后复验 reboot # 重启后重复执行上面的关键项做完清单后如果时间允许建议把整台机器删除重建一次不看任何笔记从头执行一遍任务书。第一次做综合项目可能花四五个小时第二次会快很多第三次如果能压到三个小时内完成且全部通过验证那你进考场的把握就很稳了。我在实际带项目时反复跟学员说一句话综合项目不是“考完就扔”的作业它是一面镜子照出的是你对系统底层逻辑的真实理解。把这份任务书吃透、把重启后失效的坑踩平、把故障恢复的命令练成肌肉记忆你就不是“背过RHCSA”而是真正“会用RHCSA”了。