资讯动态

RHCSA结课综合作业全解析:从LVM到SELinux的Linux服务器配置实战

发布时间:2026/10/20 22:28:09 来源:尧图企业网站定制
如果你正在准备RHCSA结课综合作业那这篇文章大概率适合你。RHCSA 全称是红帽认证系统管理员对应的是红帽 EX200 考试而所谓的“结课综合作业”通常是培训课程或自学计划里用来串起整个 Linux 系统管理知识链的最后一环。它不是一个孤立的大项目更像是把用户权限、存储管理、网络配置、服务部署、SELinux、防火墙、容器这些零散知识点全部揉进一台虚拟机和一套业务场景里逼着你把“学过”变成“会做”。很多人刚拿到作业题时会觉得任务又多又杂但其实这门作业真正考察的只有一件事你能不能按需求把一个从零初始化的 Linux 系统配置成一台符合预期、重启后依然生效、行为可复现的服务器。我见过太多人做作业时靠图形界面和临时命令蒙混过关一到验证环节就原形毕露。这篇文章我会按自己的学习路线把综合作业的思路拆开、踩过的坑复盘一遍也会给出可以直接照做的配置参考希望能帮你少走弯路。1. 综合作业在学什么先搞清题目背后的考察逻辑1.1 一份典型RHCSA综合作业的任务清单我手头接触过的综合作业大部分会模拟这样一个场景一个刚安装好的最小化 RHEL 系统需要你把它配置成一台企业内部服务器。典型任务会包括设置正确的主机名和静态网络配置本地或远程的软件仓库创建一批用户和用户组并按要求设置密码、属组、附加组和 sudo 权限配置系统时区并启用 chrony 时间同步用 LVM 创建指定大小的逻辑卷格式化后挂载到指定目录并且重启不丢配置一个简单的 Web 服务修改 SELinux 策略和防火墙规则让服务能在受限环境下正常工作最后可能还会加一个小任务比如创建定时任务或者部署一个 podman 容器。这些任务看起来彼此独立其实有一条很深的逻辑线任何一台真实服务器都需要先解决“系统起来了”“网络通了”“软件能装了”“服务能跑了”“权限和安全可控了”这五件事。综合作业就是把这条线上的关键环节各抽一道题组合成一份 2 到 3 小时的实操考核。所以做作业时不要只盯着单一命令要时刻问自己这道题放在整个系统里它解决的是哪个层面的问题1.2 评分视角不是“能做”而是“可复现”不少学员做作业和参加考试有一个共同的误区喜欢用临时手段达成目标。比如直接用systemctl stop firewalld关掉防火墙来让端口通或者用chmod 777粗暴解决权限问题甚至把/etc/fstab写好之后从不执行mount -a验证。在综合作业的评分环境里阅卷人不会关心你的操作过程只会检查系统的最终状态和重启后的状态。你关了防火墙虽然服务能访问但只要评分标准里写着“firewalld 必须 running 且放行特定端口”这题分数就没了。换个说法评分看的是“可复现的配置结果”。这意味着所有配置都必须写在配置文件里所有服务都必须设置为开机自启所有挂载都必须能在重启后自动恢复。你要从“我想办法让它现在能用”切换到“我让它每次开机都自动变成我想要的样子”。这个思维上的转变我认为是综合作业和平时练手的最大区别。2. 环境设计与初始化搭一个能安全折腾的实验场2.1 虚拟机与分区规划给作业一个不后悔的地基综合作业一般推荐在虚拟机里完成。我用的是常见的虚拟化软件系统镜像建议选 RHEL 9 或者与课程匹配的 9.x 版本安装时选择最小化安装而不是带图形界面的工作站模式。为什么要最小化因为实际服务器大多没有桌面环境而且题目里的配置几乎全在命令行完成图形界面反而会干扰你的操作习惯。分区规划是我建议每个人拿到系统后第一时间检查的事情。默认自动分区通常把所有空间都放在根分区这在综合作业里可能不是最优解。因为后续 LVM 任务可能要求“新建一个 2GiB 的逻辑卷并挂载到 /data”如果你的根分区把磁盘空间全占了后面新建 PV 时就会发现没有空闲空间。所以安装阶段我会手动分区/boot给 1GiB/给 15GiB 左右swap 根据内存大小给 2 到 4GiB剩下空间全部留作 LVM 的物理卷或空闲区域等作业要求出来再建卷组和逻辑卷。另外虚拟机可以开启快照。完成一个阶段的任务比如把网络、仓库、用户全部配好并且验证重启没问题后拍一张快照。这样如果后面做容器或 SELinux 任务时把系统搞得起不来可以快速回滚而不是从头重装浪费时间。2.2 网络与软件仓库配置最容易丢分的隐藏前提网络配置虽然常常不是作业里的单独大题却是一切任务的基础。我曾经见过某学员做 Web 服务题怎么都访问不到页面折腾半天才发现虚拟机的 IP 地址是 DHCP 分配的重启之后变了他写死在 Apache 配置里的 IP 自然失效。这种事情并不少见。正确的做法是使用nmcli配置静态 IP。在 RHEL 9 里网络管理默认由 NetworkManager 接管编辑/etc/sysconfig/network-scripts/ifcfg-*的老方法已经不推荐了。我会用类似下面的命令nmcli con mod ens160 ipv4.addresses 192.168.100.10/24 nmcli con mod ens160 ipv4.gateway 192.168.100.1 nmcli con mod ens160 ipv4.dns 192.168.100.1 nmcli con mod ens160 ipv4.method manual nmcli con up ens160配完以后一定执行ip addr show确认地址生效再执行ping测试网关连通性。千万别省这一步地址没生效后面所有服务测试都是空话。软件仓库是另一个大坑。很多综合作业会给你一个本地仓库地址或者离线镜像要求你配置 yum 仓库并安装指定软件包。这里最常见的问题是只配置一个 repo导致软件包查找不全。RHEL 9 的仓库通常至少需要baseos和appstream两个源前者提供基础软件包后者提供应用流。如果你只写了其中一个安装 httpd 时可能提示找不到软件包。配置完仓库后我建议先执行dnf repolist dnf clean all dnf install vim bash-completion -y顺手把常用工具装上后面操作会舒服很多。2.3 自检脚本用最小成本验证全部配置综合作业里最容易出现的情况是明明一步一步都做了但某个细节没生效。我习惯在作业做到一半时写一个简单的检查脚本把每一项任务的期望结果用命令输出出来。比如检查主机名用hostnamectl status检查挂载用findmnt /data检查服务状态用systemctl is-active httpd检查 SELinux 模式用getenforce。把这些命令汇总到一个脚本里执行一次就能看到所有关键状态。这个习惯的好处是你不需要靠记忆去逐个验证。而且如果题目要求“重启后依然生效”你可以先把配置全做完然后执行shutdown -r now开机后再跑一遍脚本所有状态一目了然。这个思路到了真实考试里也能派上用场因为考试最后通常会有重启环节重启后系统的状态才真正决定你拿多少分。3. 核心实操环节拆解从用户权限到SELinux3.1 用户、组、sudo与密码策略权限题的完整套路用户和组几乎是我见过所有 RHCSA 作业里必考的内容而且这类题容易得分也容易因为细节丢分。典型的题目会要求创建用户webadmin、dbadmin、opsuser创建组webteam、dbteam指定某些用户的主要组和附加组为指定用户设置密码并且要求这些用户的密码在多少天后必须修改。这里我强烈建议养成用useradd -G而不是事后usermod -aG的习惯。因为useradd -G可以在创建用户时直接指定附加组避免出现用户已经存在才想起来补附加组的麻烦。但如果你要修改已有用户的附加组记得usermod -aG必须带-a参数。我见过不少人写usermod -G webteam webadmin结果把用户已有的附加组全部覆盖掉造成意料之外的权限变化。密码策略涉及/etc/login.defs和chage命令。作业通常要求“用户首次登录必须修改密码”或者“90 天后密码过期”前者用chage -d 0 用户名后者可以设置chage -M 90 用户名。不要把密码策略想得太复杂核心就三个参数最小修改天数-m最大修改天数-M警告天数-W。sudo 权限配置也是高频点。推荐的做法是不要直接编辑/etc/sudoers而是在/etc/sudoers.d/下新建一个独立文件。这个目录机制本来就允许管理员拆分管理 sudo 规则。比如想让webteam组的所有成员可以不用密码执行 systemctl 管理 httpd可以写echo %webteam ALL(ALL) NOPASSWD: /usr/bin/systemctl restart httpd, /usr/bin/systemctl start httpd, /usr/bin/systemctl stop httpd /etc/sudoers.d/webteam写完后用visudo -c检查语法。注意文件里不能出现空格在用户名组名之间格式应为 “%webteam ALL(ALL) NOPASSWD: ...”带一个空格即可。用visudo -c验证后再用另一个账号执行sudo -l确认规则能生效。3.2 存储方案LVM与swap的常规套路存储任务在综合作业里的地位非常高因为 Linux 服务器离不开磁盘空间管理。LVM 的完整流程是创建 PV、创建 VG、创建 LV、格式化、挂载、写入 fstab。每一步都有对应命令但容易出问题的往往是细节。假设作业要求“创建一个卷组 appvg在其中创建一个 2GiB 的逻辑卷挂载到 /app”。先用lsblk或fdisk -l确认新磁盘设备名比如/dev/sdb。然后pvcreate /dev/sdb vgcreate appvg /dev/sdb lvcreate -L 2G -n applv appvg mkfs.xfs /dev/appvg/applv mkdir /app mount /dev/appvg/applv /app写入 fstab 时我不建议直接写设备路径如/dev/appvg/applv因为设备名在某些情况下会变化。更稳妥的是用blkid查 UUID然后写UUIDxxx /app xfs defaults 0 0。但要注意XFS 文件系统的 fstab 挂载参数一般写 defaults 就够了不需要写_netdev。如果系统里有一个挂载失败的条目开机可能进入 emergency mode所以在开发阶段我通常会加nofail选项比如defaults,nofail这样就算分区没接上系统也能正常启动。swap 配置相对简单但有一个常见变化RHEL 9 里推荐用systemd-swap还是传统的 swap 文件其实常规做法还是可以用 swap 分区或 swap 文件。创建一个 512MiB 的 swap 文件fallocate -l 512M /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile如果fallocate在特定文件系统上不支持就改用dd if/dev/zero of/swapfile bs1M count512。写入/etc/fstab时写/swapfile none swap defaults 0 0然后重启后用swapon --show验证。3.3 服务部署Web服务、定时任务与日志Web 服务是整个综合作业里最容易建立起成就感的部分因为一旦配好你立刻能从浏览器或curl看到结果。这里的服务九成是 httpd。安装后需要创建静态页面、开放端口、放行 SELinux 上下文。一个常见场景是把/var/www/html下建立index.html内容是一些业务欢迎页然后要求通过本机 IP 能访问。httpd 的基础配置很少需要改主配置文件除非作业要求修改监听端口。如果要求改端口比如从 80 改成 8080需要修改/etc/httpd/conf/httpd.conf里Listen 80为Listen 8080然后必须同时处理防火墙和 SELinux。很多人改完端口后只重载服务发现 curl 还是不通原因就是忘了 SELinux 里 httpd 的网络端口标签需要调整。这种情况下执行semanage port -a -t http_port_t -p tcp 8080才能让 SELinux 放行这个端口。修改完成后systemctl restart httpd再用ss -tlnp | grep httpd确认监听。定时任务是一个小而经典的题。比如要求每天 02:30 运行/usr/local/bin/backup.sh。正确做法是echo 30 2 * * * root /usr/local/bin/backup.sh /etc/cron.d/backup注意/etc/cron.d目录下的文件除了命令之外必须指定运行用户而且文件名里不能有.其实 cron.d 下的文件只要不包含句点这个说法不一定对。我习惯写成系统认可的格式即可。也可以直接用crontab -e -u root编辑 root 的 crontab。但作业如果要求“为指定用户创建定时任务”用crontab -u 用户名 -e更直接。写完以后可以用crontab -l -u 用户名验证。日志也是综合项目里容易被忽略的一环。作业可能要求配置 syslog 把认证日志输出到指定文件或者配置 logrotate 让日志按天轮转。前者可以在/etc/rsyslog.conf或/etc/rsyslog.d/下加一行比如authpriv.* /var/log/auth.log然后重启 rsyslog。后者通常不用改因为系统自带的 logrotate 已经把常见日志都管理好了你只需检查/etc/logrotate.conf和/etc/logrotate.d/下有没有对应条目。说实话作业里的日志题更多是让你理解日志在哪里、怎么开、怎么轮转而不是让你从零实现一套日志系统。3.4 SELinux和防火墙整个作业里最容易被“暴力解决”的部分SELinux 和防火墙是综合作业里最劝退人的两个点。很多人的第一反应是“关了不就完事了”但在考试和作业里禁用 SELinux 往往等于直接白做。所以在开始做任何服务部署题之前我建议先用getenforce确认当前是Enforcing还是Permissive。如果是 Disabled也建议改回 Enforcing因为这样你才能真实体会服务在 SELinux 限制下的行为。httpd 相关的 SELinux 题有几种常见变化。如果要求“把网站目录放在 /opt/webcontent 而不是默认的 /var/www/html”你需要给这个自定义目录设置正确的上下文。两种办法推荐用semanage fcontext添加规则然后restorecon应用临时做法是直接用chcon -R -t httpd_sys_content_t /opt/webcontent。两者的区别在于semanage fcontext写入持久化策略restorecon之后仍能保持chcon只改当前标签文件系统重新标记后会丢失。作业里凡是要求“重启后依然生效”的都应该用 semanage 方案。semanage fcontext -a -t httpd_sys_content_t /opt/webcontent(/.*)? restorecon -Rv /opt/webcontent理解一下这个命令(/.*)?是正则表示匹配目录本身和它下面所有子目录、子文件。少了这个重启后或者新建子目录后新文件的上下文可能不对。防火墙方面firewalld 的操作重点不是 stop而是知道怎么放行指定服务或端口。放行 http 服务的标准命令是firewall-cmd --permanent --add-servicehttp firewall-cmd --reload如果作业要求放行一个非标准端口比如 8080/tcp就执行firewall-cmd --permanent --add-port8080/tcp。这里有一个很容易丢分的地方不加--permanent的话规则只对当前运行时生效重启之后规则消失。我在检查学员的作业时几乎每次都能揪出这种漏写。所以写完一定要养成习惯先确认命令带没带--permanent再执行firewall-cmd --reload最后用firewall-cmd --list-all复查。4. 复盘与排错那些作业里反复出现的坑4.1 端口不通第一时间排查顺序很重要做 Web 任务或者任何网络服务任务时只要你发现访问失败我建议不要盲目猜而是按顺序查先查服务有没有监听再查防火墙再查 SELinux最后查远端访问路径。很多人一上来就查防火墙其实服务根本没启动的情况更常见。查询服务监听端口用ss -tlnp | grep 80如果你能看到*:80这样的监听记录说明服务起来了。看不到的话先systemctl status httpd看服务状态再看日志。服务监听正常后在另一台机器或本机用curl http://localhost/测试。如果本机能通外部或虚拟机能访问再用firewall-cmd --list-all看端口有没有放行。SELinux 的排查稍微隐蔽一点。如果服务监听了、防火墙也放行了但访问时出现连接被拒绝或某些页面元素无法加载就要看 AVC 日志。传统命令是grep AVC /var/log/audit/audit.log但 RHEL 9 里你还可以用ausearch -m avc -ts recent查最近记录。看到 denied 信息后里通常会告诉你缺什么布尔值或策略。比如 httpd 要访问用户家目录时常见的是httpd_read_user_content这个布尔值没打开。开启即可setsebool -P httpd_read_user_content on-P表示持久化同样是为了重启后不丢。4.2 挂载不生效fstab与systemd之间的习惯性错位“重启后挂载消失”是我在综合作业答疑里被问过最多的问题。原因通常不是你没写 fstab而是写完之后没有验证。你可能觉得只要把一行UUID... /app xfs defaults 0 0写进/etc/fstab系统重启就一定会挂载。实际上fstab 语法有一丁点错误重启时系统为了安全可能会直接进入 emergency mode或者直接跳过这条挂载。所以写完 fstab 之后第一时间执行mount -a。这个命令会按 fstab 配置重新挂载所有尚未挂载的文件系统。没有报错说明语法基本正确报错的话屏幕上的信息会直接告诉你问题来自哪一行。常见错误是 UUID 抄错、挂载点目录不存在、文件系统类型写错。挂载成功后再用findmnt /app确认。还有一个细节如果你用的是 LVM 逻辑卷部分环境开机时设备节点还没就绪fstab 里的设备路径解析可能失败。这也是我为什么建议用 UUID 而不是/dev/appvg/applv。如果仍然因为某些存储设备出现启动问题可以在挂载选项里加x-systemd.device-timeout30或者nofail让 systemd 不要因为一个挂载失败就卡住整个开机流程。4.3 服务起不来看日志比猜配置更快综合作业里还有一类问题是服务启动失败。我在辅导时常用一句话总结“不要反复重启服务停十次也不如看一次日志。”遇到 httpd 或者其他服务启动失败先执行systemctl status httpd journalctl -u httpd -n 50journalctl出来的日志会告诉你很多信息语法错误会指出是/etc/httpd/conf/httpd.conf的哪一行有问题端口被占用会提示Address already in use权限不足会提示目录无法访问。不管是哪种都比一遍又一遍systemctl restart来得快。服务启不来还有一种常见原因配置文件里指定了错的文件路径比如自定义网站根目录/opt/webcontent不存在。这个只要ls -ld /opt/webcontent就能看出来。有些学员配置完发现 httpd 起来了但访问时 403这通常是 SELinux 上下文不对或者目录缺少可执行权限。检查一下/opt/webcontent的权限是不是 755owner 是不是 root目录能不能被 others 读取和执行。如果业务需要用户目录下的文件还要看家目录权限httpd 默认不允许访问权限过紧的用户家目录。5. 考试之外这套技术栈对我的实际意义5.1 从“作业”到“生产环境”的思维切换RHCSA 结课综合作业做下来之后最大的收获其实不是那一堆命令而是对 Linux 系统整体运转逻辑的理解。上学时我也觉得fstab、systemd、SELinux这些概念抽象难懂但在虚拟机上把一套作业完整做完再经历几次“重启后服务不见了”“端口怎么都通不了”“权限被 SELinux 拦得死死的”之后我就明白了真实服务器里的每一个服务都要经历“安装、配置、启动、防护、验证”这五个环节哪一环没做好服务都不可能稳定运行。这个思维对工作之后的帮助是实打实的。生产环境里你不可能动不动就关防火墙、禁 SELinux也不可能改完配置不验证就直接重新上线。综合作业里那些被反复强调的 “重启生效” 和 “可复现配置”本质上就是生产环境对运维人员的基本要求。平时多花一点时间理解配置背后的原理比背多少命令都有用。5.2 复盘清单与个人建议按我自己的经验下面的复盘清单在交作业或考试之前非常值得过一遍检查项期望状态常见问题主机名稳定且符合题目要求只在当前 shell 改未写 /etc/hostname网络配置静态 IP、重启不变DHCP 分配导致 IP 变化软件仓库appstream 和 baseos 都可用只配一个源、GPG 检查失败用户/组/sudo属组、附加组、sudo 规则正确usermod 忘写 -a覆盖附加组存储/LVM指定大小、挂载点正确、重启生效没写 fstab、UUID 复制错误Web 服务端口监听、页面可访问防火墙未放行、SELinux 上下文不对定时任务时间、用户、命令正确cron.d 下文件未指定用户SELinuxEnforcing且业务规则齐全chcon 标签重启丢失防火墙放行最小必要端口忘了 --permanent服务自启enable 而不是 only startsystemctl start 后重启又没了把这些检查项做成一个脑子里的模板到了考场或者做新项目时自然就知道该往哪几步走。我个人在实际操作中的体会是每一条命令跑完之后都要马上用对应的查询命令看结果而不要急着进入下一步。mount -a之后看findmntsystemctl enable --now之后看is-enabledfirewall-cmd --reload之后看list-all。“做一步验一步”这句话虽然朴素却是整个 RHCSA 学习过程中对我帮助最大的一条经验。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑