尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

RHCSA综合实战:从零搭建论坛,串联LVM、NFS与SELinux核心考点

发布时间:2026/9/29 18:13:43

资讯中心
01
ARTICLE

RHCSA综合实战:从零搭建论坛,串联LVM、NFS与SELinux核心考点

RHCSA综合实战:从零搭建论坛,串联LVM、NFS与SELinux核心考点
备考RHCSA的朋友常遇到一个尴尬单个知识点练得滚瓜烂熟比如LVM扩分区、SELinux布尔值、firewalld放行端口闭着眼都能敲可一旦面对一个“综合性任务”就懵了——不知道先做哪步、后做哪步也不知道这些知识点之间怎么咬合。我的经验是拿“搭建一个论坛”当RHCSA的综合收尾项目。论坛不大不小但刚好能把用户权限、LVM、NFS、Web服务、数据库、SELinux、防火墙、计划任务这些核心考点串成一条完整的链路。这篇文章把整个项目的规划、实施和排错过程完整写出来适合正在备考RHCSA的人照着敲一遍也适合刚入行的初级运维理解“一台真实业务服务器是怎么从零到能用的”。1. 为什么选“论坛”当综合项目而不是随便搭个网页1.1 论坛项目天然覆盖RHCSA大部分考点我先对比过几个候选项目只搭个静态网页涉及不到数据库和动态语言只做LVM练习涉及不到网络服务只配置SELinux和防火墙又缺少业务压力。这些“单点练习”都有一个共同问题做完之后你还是不知道一个真实业务系统是怎么运转的。论坛项目不一样。一个最朴素的论坛也需要一个Web服务商Apache/Nginx处理HTTP请求一个动态语言运行时PHP等跑业务逻辑一个数据库MariaDB/PostgreSQL存帖子和用户数据一个上传目录存放用户头像或附件一台或多台服务器涉及网络存储一套安全策略既要有SELinux保护进程又得在防火墙放行必要端口。这几乎就是RHCSA考纲的缩影。而且它不是把考点孤立地摆在那里而是要求你按照依赖关系串起来先有存储再装服务再调安全再验证最后排错。做完一遍你对“系统管理”这四个字的理解会完全不一样。1.2 整体架构设计两台机器真实模拟我不建议在一台虚拟机里把所有东西塞进去那样NFS就练不到了。为了覆盖RHCSA中关于网络存储的考点我设计了两台服务器角色主机名IP内部实验网段职责Web/DB节点server1.example.com192.168.56.101部署Apache、PHP、MariaDB跑论坛程序NFS存储节点server2.example.com192.168.56.102提供LVM分区通过NFS共享论坛上传目录为什么要把上传目录放到独立机器上两个原因。第一RHCSA明确考NFS挂载这是绕不开的考点第二现实里论坛这种写操作频繁的业务往往会把上传文件放在共享存储上方便后面做多台Web节点负载均衡。所以这个设计不是为考试硬凑的而是贴近生产环境的。后面的章节就按“先准备环境、再做存储、再装服务、再调安全、最后验证排错”的顺序推进。这个顺序本身就是系统管理的标准施工流程。2. 实验环境准备从虚拟机到基础系统配置2.1 虚拟机规格与系统安装我用的是VMware Workstation虚拟化平台不限VirtualBox也一样。两台虚拟机配置保持一致即可操作系统Rocky Linux 9.5最小化安装。备考阶段用Rocky替代RHEL完全可行命令和目录结构几乎一致唯一要注意的是别把“注册订阅”这类RHEL专属操作当成必考点CPU2核内存2048 MB跑ApachePHPMariaDB不富余但足够用磁盘系统盘20 GB另加一块20 GB数据盘/dev/sdb专门留给LVM练习网卡两块。一块NAT用于下载软件包一块Host-Only用于内网互访。Host-Only网段固定为192.168.56.0/24。最小化安装后第一件事就是配网。我习惯用nmcli因为RHCSA考试环境没有图形界面命令行才是命根子。以server1为例nmcli connection modify ens33 ipv4.addresses 192.168.56.101/24 nmcli connection modify ens33 ipv4.gateway 192.168.56.1 nmcli connection modify ens33 ipv4.dns 192.168.56.1 nmcli connection modify ens33 ipv4.method manual nmcli connection up ens33主机名也要改掉考试会考hostnamectlhostnamectl set-hostname server1.example.com hostnamectl set-hostname server2.example.com # 在server2上执行改完之后用hostnamectl查看确认。很多新手会漏掉这一步结果后面所有服务配置里主机名都用不上。2.2 基础软件包安装两台机器都需要先同步软件源缓存然后安装基础工具dnf makecache dnf install -y vim wget tar bash-completion nfs-utilsserver2需要装nfs-utils为后面做NFS服务端准备server1装nfs-utils是为了当客户端挂载。这一步不需要刻意区分两台都装了不亏。bash-completion强烈建议装考试敲命令的时候Tab补全会帮你省不少时间。2.3 用户、组与sudo权限RHCSA考试里“用户与权限”占了不小的比重这个项目正好用得上。我规划了两个管理入口日常管理用户forum_admin加入wheel组获得sudo权限论坛维护组forum_team成员是helpdesk和backup_ops两个用户模拟多人协管论坛的场景。创建命令groupadd forum_team useradd -G wheel forum_admin useradd -G forum_team helpdesk useradd -G forum_team backup_ops echo Pssw0rd | passwd --stdin forum_admin echo Pssw0rd | passwd --stdin helpdesk echo Pssw0rd | passwd --stdin backup_ops这里有个细节值得说useradd -G指定的是附加组不会覆盖usermod -g设置的主组。如果你想给某个用户换主组用的应该是usermod -g forum_team helpdesk。考试经常会在这两个参数上设陷阱。sudo权限不用额外改配置文件因为wheel组默认就在/etc/sudoers里有%wheel ALL(ALL) ALL这条规则。但我要求用sudo时免密方便自动化脚本执行所以单独建了/etc/sudoers.d/forum_adminecho forum_admin ALL(ALL) NOPASSWD: ALL /etc/sudoers.d/forum_admin chmod 440 /etc/sudoers.d/forum_admin注意/etc/sudoers.d下的文件权限必须是440否则sudo会拒绝加载。这个坑我见人踩过不止一次。3. 存储层综合题LVM分区与NFS共享配置3.1 server2数据盘的LVM划分存储层是这个项目的奠基石。server2上的20 GB数据盘/dev/sdb规划如下创建一个物理卷/dev/sdb1创建卷组vg_data创建逻辑卷lv_forum大小8 GB挂载到/data/forum剩余空间先留着后面练习逻辑卷扩容用。命令parted /dev/sdb --script -- mklabel gpt -- mkpart primary xfs 1MiB 100% pvcreate /dev/sdb1 vgcreate vg_data /dev/sdb1 lvcreate -L 8G -n lv_forum vg_data mkfs.xfs /dev/vg_data/lv_forum mkdir -p /data/forum mount /dev/vg_data/lv_forum /data/forum写入/etc/fstab确保重启自动挂载echo /dev/mapper/vg_data-lv_forum /data/forum xfs defaults 0 0 /etc/fstabmount -a验证一下fstab有没有写错这个习惯一定要养成——fstab写错导致重启进不了系统的案例太多了。现在LVM还剩下约12 GB空闲空间。先不着急扩容我在排错章节会专门演示一次在线扩容操作因为lvextendxfs_growfs是RHCSA高频考题。3.2 server2:导出NFS共享NFS配置是我认为RHCSA里“看着简单、实则很容易翻车”的部分。先在server2上设置共享目录并导出cat /etc/exports EOF /data/forum 192.168.56.0/24(rw,sync,no_root_squash) EOF systemctl enable --now nfs-server exportfs -ravexportfs -rav执行后会在屏幕上列出已导出的目录这一步是验证exports配置是否被正确解析的关键。三个选项分别意味着rw允许读写sync要求同步写入no_root_squash允许客户端root保留root权限。需要特别提醒的是no_root_squash在生产环境慎用。数据盘挂到客户端后如果没有这个选项客户端root会被映射成nobody用户文件权限很容易搞得莫名其妙。这里加上它纯粹是为了简化实验环境真实生产一般不加。验证共享是否可见在server1上执行showmount -e 192.168.56.102如果能看到/data/forum出现在输出里说明NFS服务端基本正常。3.3 server1把NFS挂到上传目录在server1上创建挂载点并挂载mkdir -p /data/uploads mount -t nfs 192.168.56.102:/data/forum /data/uploads写入fstab时我建议加一个选项echo 192.168.56.102:/data/forum /data/uploads nfs defaults,_netdev 0 0 /etc/fstab_netdev这个选项很关键。它告诉系统等网络就绪后再挂载这个文件系统。如果不加重启时systemd尝试挂载NFS但网络还没起来启动流程会卡住可能直接导致进不了系统或者挂载失败。这也是RHCSA考试里隐藏的一个小坑。为什么论坛的Web根目录不放NFS上而是只把uploads子目录放上去因为Web服务自身Apache和PHP代码应该跑在本地磁盘上NFS只存放用户上传的可变数据。如果整个Web目录都挂NFS一旦NFS节点宕机网页直接全挂而上传目录单独在NFS上即使存储出问题论坛还能正常读贴只是上传功能故障影响面小得多。这个设计原则值得写进你的运维习惯里。4. Web服务与数据库部署让论坛真正跑起来4.1 安装Apache、PHP和MariaDB在server1上安装软件包dnf install -y httpd php php-mysqlnd php-fpm mariadb-server在RHEL 9系里php默认以php-fpm方式运行不再是老的mod_php。这意味着Apache需要额外配置才能把PHP请求转给php-fpm处理。这也是很多人照着老教程部署失败的原因——他们只知道装包却不知道还要改代理配置。启动服务systemctl enable --now httpd php-fpm mariadb然后配置Apache把.php请求转发给php-fpm在/etc/httpd/conf.d/php-fpm.conf写入FilesMatch \.php$ SetHandler proxy:fcgi://127.0.0.1:9000 /FilesMatch这里的端口9000是php-fpm默认监听的地址。改完配置必须重启服务才生效systemctl restart httpd php-fpm验证PHP是否正常工作创建测试页/var/www/html/info.php?php phpinfo();浏览器或curl访问http://192.168.56.101/info.php看到phpinfo页面就说明Apache和PHP之间的通道已经打通。这一步不验证后面论坛页面白屏时你根本不知道是PHP的问题还是业务代码的问题。4.2 初始化MariaDB数据库RHCSA考的是系统管理不是数据库开发所以数据库这层做到“能建库、能授权、能连接、能备份”就够。初始化mysql_secure_installation按提示设置root密码、删除匿名用户、禁用root远程登录。然后创建论坛数据库和专用账号CREATE DATABASE forum_db DEFAULT CHARACTER SET utf8mb4; CREATE USER forumlocalhost IDENTIFIED BY ForumPss123; GRANT ALL PRIVILEGES ON forum_db.* TO forumlocalhost; FLUSH PRIVILEGES;建表语句保持最小可用即可USE forum_db; CREATE TABLE posts ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100) NOT NULL, content TEXT NOT NULL, author VARCHAR(50) DEFAULT anonymous, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );这里有一个考试常考的细节forum用户只允许从localhost连接。如果是生产环境PHP和数据库在同一个机器上这么配没问题但如果Web和DB分离就得把localhost改成192.168.56.%或者具体的Web服务器IP。RHCSA虽然没有考到集群部署那么深但这个概念理解了对你审题有帮助——考试经常问“某个连接被拒绝可能是什么原因”排除思路就来自这里。4.3 极简论坛页面部署论坛程序本身不用太复杂体现“能发帖、能看帖”即可。/var/www/html/index.php展示全部帖子列表?php $conn new mysqli(localhost, forum, ForumPss123, forum_db); $result $conn-query(SELECT * FROM posts ORDER BY created_at DESC); ? !DOCTYPE html html headmeta charsetutf-8title内部技术论坛/title/head body h1内部技术论坛/h1 a hrefpost.php发布新帖/a hr ?php while ($row $result-fetch_assoc()): ? h3? htmlspecialchars($row[title]) ? smallby ? $row[author] ?/small/h3 p? nl2br(htmlspecialchars($row[content])) ?/p hr ?php endwhile; ? /body /html/var/www/html/post.php接收新帖并写入数据库?php if ($_SERVER[REQUEST_METHOD] POST) { $conn new mysqli(localhost, forum, ForumPss123, forum_db); $stmt $conn-prepare(INSERT INTO posts (title, content, author) VALUES (?, ?, ?)); $stmt-bind_param(sss, $_POST[title], $_POST[content], $_POST[author]); $stmt-execute(); header(Location: index.php); exit; } ? form methodpost 标题input typetext nametitlebr 内容textarea namecontent/textareabr 作者input typetext nameauthor valueanonymousbr button typesubmit发布/button /form同时给Apache配置一个Alias让URL路径/uploads/指向NFS挂载目录cat /etc/httpd/conf.d/forum-uploads.conf EOF Alias /uploads/ /data/uploads/ Directory /data/uploads Require all granted /Directory EOF systemctl reload httpd为什么不用符号链接而是用Alias因为httpd对符号链接默认开启Options FollowSymLinks但在SELinux环境下符号链接目标目录的上下文如果不对访问还是会被拒绝。用Alias更直接、更可控排错也少一层。到这一步论坛已经能在本地跑通了。接下来才是RHCSA真正的重头戏——安全策略配置这也是最多人功亏一篑的地方。5. 安全加固SELinux和防火墙是论坛的两道生死关5.1 SELinux上下文为什么NFS目录会403如果你此刻直接访问http://192.168.56.101/浏览器大概率能看到index.php的内容但一旦上传文件到/uploads/再访问那个文件就会收到403 Forbidden。所有人第一次都会在这里卡住。先看SELinux的开关状态和文件上下文getenforce ls -Z /var/www/html/index.php ls -Z /data/uploads你会发现本地Web目录的文件上下文是system_u:object_r:httpd_sys_content_t:s0而NFS挂载目录的上下文是system_u:object_r:nfs_t:s0。SELinux看到的是nfs_t不是httpd_sys_content_t于是判定httpd无权读它直接拒绝。解决办法有两个方法一修改挂载选项以指定上下文方式挂载NFSmount -o contextsystem_u:object_r:httpd_sys_content_t:s0 192.168.56.102:/data/forum /data/uploads这个方式最干净但fstab里也要同步加上否则重启后上下文又变回去。方法二用semanage fcontext打持久化标签再restoreconsemanage fcontext -a -t httpd_sys_content_t /data/uploads(/.*)? restorecon -Rv /data/uploads注意/data/uploads本身是NFS挂载点restorecon能不能生效取决于NFS服务端是否允许客户端打标签。实测中这种方案不太稳定所以我更建议用挂载上下文的方式。这也是为什么我在fstab里特意配置了NFS挂载参数的原因。除了上下文还有一个布尔值必须打开setsebool -P httpd_use_nfs 1-P表示持久化重启不丢。httpd_use_nfs这个布尔值控制的就是httpd能否访问NFS文件系统。如果不打开哪怕上下文改对了访问仍然会被SELinux拦截。两步缺一不可。5.2 firewalld放行http端口和NFS相关服务SELinux处理完防火墙还得放行。在server1上开放http服务firewall-cmd --permanent --add-servicehttp firewall-cmd --reload firewall-cmd --list-allserver2作为NFS服务端要放行NFS相关的三个服务firewall-cmd --permanent --add-servicenfs firewall-cmd --permanent --add-servicerpc-bind firewall-cmd --permanent --add-servicemountd firewall-cmd --reload这三个缺一不可。rpc-bind是NFS依赖的RPC端口mapper服务mountd负责处理mount请求。我遇到过只放行nfs服务、结果客户端showmount -e能通但mount一直卡住的情况原因就是mountd端口没放行。严格讲linux-nfs的mountd端口是动态分配的生产环境要固定端口后在防火墙精确放行。实验环境直接放行三个服务就够不再展开。6. 端到端功能验证发帖、上传、备份一个都不能少6.1 功能验证的完整流程所有配置做完开始验收。第一步确认服务状态全部正常systemctl status httpd php-fpm mariadb第二步浏览器访问http://192.168.56.101/index.php手工发一篇测试帖标题写“RHCSA综合项目测试”正文随意作者写forum_admin。回到列表页确认帖子出现说明Apache、PHP、MariaDB三层链路打通。第三步验证上传目录是不是真正写到了server2的NFS共享上。在server1上传一个文件到/data/uploads/然后分别在两台机器上看ls -l /data/uploads/ # server1上NFS客户端视角 ls -l /data/forum/ # server2上NFS服务端视角两个目录内容一致就说明NFS读写正常。再查看一下文件的安全上下文ls -Z /data/uploads/确认上下文是httpd_sys_content_t而不是nfs_t这一步我每次都会做因为外观上“能访问”和“上下文正确”是两码事。6.2 用cron实现数据库自动备份论坛上线后数据库备份是必须的操作也是RHCSA中“计划任务”考点的落地场景。在server1上给root用户配置croncrontab -e添加任务0 2 * * * /usr/bin/mysqldump forum_db | gzip /backup/forum_$(date \%F).sql.gz日期格式化里的%号在cron中必须转义为\%这是很多人第一次写cron时踩的坑。$(date \%F)会展开成类似forum_2025-06-01.sql.gz的文件名方便按天区分备份。注意/backup目录需要提前创建并用root写入不然cron任务会因为权限不足静默失败。验证cron是否真的执行可以查看rsyslog日志grep CRON /var/log/secure或者干脆把备份时间改到两分钟后跑一次真实验证再改回凌晨2点。这个方法虽然简单但比单纯靠诊断日志确认要直观得多。7. 排错复盘实际部署中最容易翻车的三个场景7.1 uploads目录403先查SELinux还是先查权限我的习惯是先确认SELinux状态再看文件系统权限。因为SELinux的拦截往往不直观而文件权限一看就知道。遇到403按下述顺序排查getenforce # 确认SELinux是否Enforcing tail -f /var/log/audit/audit.log # 看有没有AVC denial记录 ls -Z /data/uploads/ # 检查目录上下文 getsebool httpd_use_nfs # 检查布尔值是否打开当时我的audit.log里出现了非常典型的记录typeAVC msgaudit(1717...): avc: denied { read } for pid... commhttpd nameuploads devnfs ino... scontext... tcontext... tclassdir看到devnfs我立刻知道问题在NFSSELinux的组合上而不是系统文件权限。直接检查布尔值果然httpd_use_nfs是off。打开后问题解决。整个过程花了不到5分钟靠的是顺序正确——如果先去折腾chmod和chown可能半天都找不到根因。7.2 PHP页面白屏错误日志才是真正的线索另一个高频问题是PHP页面直接空白。Apache的error_log经常只有一条泛泛的记录而PHP自身的错误信息默认是不展示的。处理方法是看php-fpm的日志tail -f /var/log/php-fpm/error.log journalctl -u php-fpm -n 50当时的报错是登录数据库用的密码与授权的不匹配。我按提示复查了post.php里的连接参数发现密码中有一个大小写错误。这里我想强调不要在代码里硬编码生产数据库密码即使是在实验环境也至少用环境变量引用来管理。RHCSA考试虽不考这个但你以后做生产环境的系统管理这个习惯会让你少挖很多坑。排查白屏时还可以临时开启PHP错误显示改/etc/php.inidisplay_errors On改完重启php-fpm刷新页面就能看到具体错误。定位后再把display_errors关掉——生产环境开这个等于把服务器内部结构暴露给用户。7.3 NFS挂载异常重启即失效和mount卡住问题有几次我重启server1后发现/data/uploads是空的手动mount又能成功。问题就出在fstab里的顺序和选项上。正确写法是192.168.56.102:/data/forum /data/uploads nfs defaults,_netdev 0 0_netdev是关键。如果没有它systemd会在网络栈没就绪时尝试挂载NFS结果就是挂载失败目录为空或者干脆启动卡住。我还试过另一种情况server1上能看到共享但mount命令一直挂起。这时去server2上查exportfs -v systemctl status rpcbind firewall-cmd --list-all十有八九是firewalld没放行mountd。这里也提醒大家NFS排错时showmount能通不代表mount能通因为showmount只依赖rpc-bind而mount操作还需要mountd端口可达。过度诊断一句mount命令在客户端默认会等待一段时间才超时可以用-o soft,timeo30限制等待时长避免服务器端异常时客户端进程被卡死。8. 从项目回到考试这个项目覆盖了哪些RHCSA考点8.1 考点对照清单做完整个项目我整理过一张对照表方便备考时自查RHCSA考点模块本项目对应操作掌握程度要求用户与组创建forum_admin、helpdesk、backup_ops配置附加组能说出usermod与useradd的区别sudo授权配置/etc/sudoers.d验证免密sudo能区分visudo与直接改文件的差别LVM管理pvcreate/vgcreate/lvcreate挂载与fstab能完成逻辑卷扩容NFSexports配置、showmount验证、客户端挂载能解决常见NFS权限问题SELinux布尔值、fcontext、AVC日志分析能根据audit.log定位拒绝原因firewalld添加http、nfs、rpc-bind、mountd服务能区分运行时配置与永久配置systemd服务管理启动、开机自启、查看状态能处理服务启动失败计划任务crontab配置数据库备份能看懂cron语法并验证执行日志排错查看httpd、php-fpm、audit日志能定位业务故障根因网络基础nmcli配置IP、主机名、DNS能脱离图形界面配置网络可以看到这个项目几乎把RHCSA九成以上的实操考点都过了一遍。做完后你再去做模拟题会发现很多“选择题”你根本不用背——因为你已经知道某个配置没写会产生什么实际后果。8.2 扩展空间哪些地方还能继续加深项目跑通后我建议你再做几个扩展实验把已掌握的知识往生产方向推一点给论坛站点配置HTTPS证书加入mod_ssl这涉及证书文件和私有密钥的权限管理和HTTP混用时你需要处理80端口重定向这一步能加深你对“网络协议栈”和“服务配置”之间关系的理解。为php-fpm创建独立的运行用户池不要把PHP进程统一跑在httpd用户下这涉及pool.d目录配置和SELinux用户域能让你真正理解进程最小权限原则。用autofs替代fstab里的静态NFS挂载让客户端在访问/data/uploads时才自动挂载。autofs不在RHCSA核心考纲里但它和你已经掌握的NFS知识无缝衔接值得一练。我的建议是先把主链路反复做到不用看笔记、直接盲敲再去做扩展。因为RHCSA考试要求的不是“看过”而是“能在无提示环境下独立完成”。盲敲不是背命令而是让肌肉记住配置逻辑——当你不需要思考“下一步该干嘛”的时候说明这个项目里的知识已经被你消化成自己的了。最后分享一个个人体会以后我每逢学新东西都习惯用一个“综合项目”来验收而不是继续刷单点练习。单点练习解决的是“我知道这个命令”综合项目验证的是“我能把它用在真实业务上”。RHCSA的终极目标不是记住命令而是让你成为那个在出问题时能冷静查日志、一步步定位根因的人而搭建论坛这个项目恰好能把你推到那个位置上。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。