RH124二刷总结:从用户权限到SELinux的系统管理实战 1. 为什么RH124后半程才是真正的分水岭如果有人问我在RH124课程里最难熬的是哪个阶段我的答案一定是后半程。前半程学的是ls、cd、cp、mv、vim这些基础操作只要跟着敲一遍基本都能上手。可从用户与权限开始画风突然就不一样了命令不再只是对单文件操作而是要你理解一套系统级的逻辑关系。你会发现同一个命令在不同场景下要搭配不同的参数甚至同一个需求可以拆出三种完全不同的实现路径。这种落差感其实很正常。RH124的定位是红帽系统管理一它真正想培养的不是会敲命令的操作员而是能独立管理一台Linux服务器的管理员。前半程解决的是怎么和环境打交道后半程解决的是怎么让系统按你的意图运转。这两者的思维方式完全不同前者是记后者是想。现在市面上的RH124总结大多喜欢按模块罗列命令看起来满满当当真正遇到综合场景时还是不知道怎么下手。这篇总结我从二刷的角度来写重点不在于告诉你有哪些命令而在于把这些零散的知识点串成几条清晰的思路。我会把用户权限、systemd服务、软件仓库、网络配置、SELinux与防火墙、日志归档这几个大模块拆开揉碎讲清楚每个模块背后的设计逻辑再给出一套可以直接照搬的操作模板。这篇内容适合正在准备RH124或想补系统管理基础的朋友也适合已经上过课但总觉得学完就忘的学员。如果你正处于命令都见过组合却不会的尴尬期这篇总结应该能帮你把脑子里那些碎片拼起来。2. 用户与权限管理从背命令到系统级思维2.1 用户、组与系统文件的对应关系用户管理这节很多初学者最迷惑的地方在于明明有useradd命令为什么还要去记/etc/passwd、/etc/shadow这些文件我的理解是命令只是入口文件才是真相。考试和实际排错时你看到的往往是文件内容而不是命令执行结果。需要掌握的第一张表是/etc/passwd。它每行七个字段依次是登录名、密码占位符x、UID、主组GID、注释字段、家目录、默认Shell。注意这里密码字段永远显示为x真正的密码散列在/etc/shadow里普通用户无权读取。这个设计本身就值得思考把密码单独隔离到一个文件再配合shadow文件的权限控制就是为了防止普通用户通过读密码文件拿到可爆破的散列值。组的定义在/etc/group和/etc/gshadow中。创建用户时要注意主组和附加组的区别主组写在passwd文件的第四列是用户创建文件时的默认属组附加组通过usermod -G指定目的是让用户获得访问其他组资源的权限。实际操作中我经常看到有人分不清这两个概念创建用户时一股脑把需要的组全用-g塞进去结果主组变成了业务组默认属组一团乱。建议遵循RHEL的设计思路让系统为每个用户创建同名私有组User Private Group再用-G把用户追加到业务附加组里这样既干净又不容易出错。验证时别只靠记忆用两条命令查实id zhang groups zhang getent passwd zhang前两条看UID、GID和组归属第三条直接从用户数据库里读记录。组合拳打下来配置有没有生效一目了然。2.2 权限位的读法与权限组合的常见套路权限绝对是RH124的送分题也是丢分题。说它送分是因为规则本身很简单说它丢分是因为考试不会只让你算一个数值而是把权限和场景绑在一起考。你得把r、w、x映射到数字上r4w2x1。三个一组分别对应属主、属组、其他用户的权限。常用的组合就这么几档755属主可读写执行其他人可读执行这是目录的默认档位。644属主可读写其他人只读这是普通文件的默认档位。700仅属主可读写执行常用于家目录、密钥目录。600仅属主可读写常用于配置文件或私钥。1777在权限前加上特殊位这是/tmp目录的标准权限所有人可写但只有文件属主或root能删除。修改权限用chmod支持数字和符号两种写法。数字写法胜在简洁符号写法胜在可读。比如要给文件增加属主执行权限数字写chmod 744符号写chmod ux如果你总是记不住数字对应关系符号写法更不容易出错。改属主用chown注意RHEL中一个常见的组合姿势chown user:group file一条命令同时改属主和属组避免两次执行产生中间状态。递归加-R时务必想清楚目录下如果有大量文件你是在按统一模板批量授权还是在破坏某些文件原有的细致权限。递归修改是权限事故的高发地。2.3 场景题拆解把需求翻译成命令序列RH124考试和课后题非常喜欢出这类综合场景比如创建一个名为ops的组。创建用户zhang要求其主组为ops附加组为wheel家目录为/home/zhang登录Shell为/bin/bash密码设置为1个符合强度要求的值。最终确保普通用户无法进入zhang的家目录。这个题至少串了组、用户、密码、权限四个知识点。合理的操作顺序是这样的groupadd ops useradd -g ops -G wheel -m -d /home/zhang -s /bin/bash zhang echo StrongPassw0rd! | passwd --stdin zhang chmod 700 /home/zhang id zhang ls -ld /home/zhang先建组再建用户避免用户创建时引用了不存在的组。useradd -g指定主组-G指定附加组-m保证家目录被创建。-d用于显式指定家目录路径虽然这里默认路径和它一致但考试中改家目录需求的场景很常见。最后一步chmod 700很关键。题目要求普通用户无法进入本质是other位不能有任何权限700设计恰好满足。做完记得验证id zhang看组是否生效ls -ld /home/zhang看目录权限。这个场景的教训是题目给的需求要逐条拆解成对应的命令动作漏任何一条都会失分。我第一次练习时只记了useradd和passwd完全忘了动家目录权限结果题目后半问直接翻车。权限管理最忌讳我以为。3. systemd服务管理知识点多但逻辑极为线性3.1 systemd到底管理什么unit与运行状态RHEL7以后系统里所有服务、挂载点、设备、套接字甚至关机动作都被抽象成了unit单元。RH124阶段你接触最多的就是service类型和target类型前者管服务后者管运行目标。systemd是PID 1Linux内核启动后第一个进程就是它一切服务都由它拉起并监管。这也是为什么排查问题时systemctl status的输出优先级要高于你自己手动ps aux找进程。查看服务状态别只记systemctl status一个命令多练几个视角systemctl status sshd systemctl list-units --typeservice --state running systemctl list-unit-files第一条看单个服务的实时状态第二条看当前系统上正在运行的全体服务第三条看所有unit的启用配置。考试里经常问某服务当前是否在运行以及某服务是否设置开机自启这两个问题恰好对应前两条命令的输出字段别搞混。顺带提一个容易混淆的状态active (exited)和active (running)。前者表示服务进程已经正常退出——典型如systemd-tmpfiles-setup干完活就退出但这不代表服务故障后者表示主进程还在跑。看到active (exited)时别慌先确认这类服务的设计意图。3.2 启动、停止、开机自启的完整套路服务管理最常用的命令组我习惯按操作维度记忆systemctl start sshd # 立即启动不关注下次开机 systemctl stop sshd # 立即停止 systemctl restart sshd # 停止并重新启动 systemctl reload sshd # 重新加载配置不中断服务 systemctl enable sshd # 设置开机自启 systemctl disable sshd # 取消开机自启 systemctl enable --now sshd # 启动并设置开机自启reload和restart的差别值得多说两句。reload是给主进程发信号让它重新读取配置文件服务进程不中断restart是先stop再start会有短暂的服务中断。生产环境里能reload就尽量reload比如ssh、httpd这类长连接服务restart会踢掉所有在线会话。RH124虽然不直接考这个概念但它经常出现在请在不中断服务的情况下应用配置变更这类题目里。修改了unit文件后必须执行systemctl daemon-reload否则systemd不认新增或变更的配置。这个步骤漏掉是最常见的实践错误不是服务本身有问题而是systemd压根没感知到文件变化。3.3 运行目标从运行级别到systemd target老一批管理员都记得SysVinit时代的运行级别0到6systemd把运行级别抽象成了target。RH124要掌握的核心就三个graphical.target图形化多用户界面multi-user.target文本多用户界面reboot.target / poweroff.target重启和关机查看和切换systemctl get-default systemctl set-default multi-user.target systemctl isolate multi-user.targetset-default是改默认值重启后生效isolate是立即切换到目标状态用于临时切换。考试常见需求是把系统默认启动级别改为文本界面一条systemctl set-default multi-user.target搞定不需要改/etc/inittab。你也可以通过把symlink目标指向来看看原理解释——实际上systemd就是把/etc/systemd/system/default.target这个软链接指向multi-user.target手工操作和命令效果完全等价。4. 软件包管理dnf仓库与rpm底层4.1 仓库文件不是能装东西的地方刚接触dnf的同学容易把仓库理解成一个文件夹其实它是软件包的元数据来源地。系统通过/etc/yum.repos.d/目录下的.repo文件知道去哪里找软件包然后用dnf命令下载并解析依赖。一个典型的repo文件长这样[AppStream] nameAppStream baseurlfile:///mnt/AppStream enabled1 gpgcheck0baseurl是核心它告诉dnf包源在哪里。可以是http地址也可以是本地目录。RHEL安装镜像里通常包含BaseOS和AppStream两个仓库挂载ISO后把baseurl指向挂载点下的对应目录就能搭建一个完全离线的软件源。enabled1表示启用gpgcheck0表示跳过GPG签名校验。考试环境经常给一个本地目录让你配置仓库最容易出错的环节就是路径写错或漏写mnt挂载点层。配置完成后的完整验证流程dnf repolist dnf clean all dnf makecache dnf install httpd -yrepolist能看到仓库状态clean all清理缓存makecache重新构建缓存。我习惯在每次改完repo文件后都执行一遍这三连能省去大量为什么install报找不到包的排查时间。4.2 dnf的模块化流多版本共存的关键RHEL8之后引入了模块化Module别被这个新概念吓到。简单说模块化让同一个软件包可以有多个版本流比如PostgreSQL同时提供13、15、16版本你通过dnf module选择启用哪一个。dnf module list dnf module list postgresql dnf module enable postgresql:16 dnf module install postgresql:16module enable是激活指定流install则直接安装。RH124阶段不用深入理解流内部机制但必须知道怎么查看可用模块和切换版本。考试会有为指定服务安装指定版本软件的需求如果你直接dnf install postgresql而不管模块流装出来的版本可能根本不是题目要的。4.3 rpm底层常用操作dnf是高层工具底层安装包格式是rpm考试中经常会让你用rpm查询或校验重点掌握这四个rpm -qf /etc/ssh/sshd_config # 某个文件属于哪个包 rpm -ql httpd # 列出包安装了哪些文件 rpm -qc httpd # 只列出包的自带配置文件 rpm -V httpd # 校验包内文件是否被改过rpm -V特别适合排查系统异常但说不清哪里被改的问题。它会把包内文件的原始校验值和当前文件系统里的值对比输出异常项。没输出通常说明没被改有输出就逐行看属性位M开头是权限或属主变了S开头是文件大小变了这基本能锁定排查方向。5. 网络配置实战从客户端工具到永久配置5.1 NetworkManager与nmcli的对应关系RHEL的网络管理默认由NetworkManager负责nmcli是它的命令行客户端。别把它想得太玄它的作用等价于一个网卡配置编辑器你做的每一个nmcli操作最终都会落到/etc/NetworkManager/system-connections/目录下的配置文件里。查看当前网络状况nmcli device status nmcli connection showdevice status看物理网卡状态connection show看连接配置。注意设备和连接是两个不同的概念设备是网卡硬件eth0、ens160连接是网卡上的配置集合比如有线连接1。一张网卡上可以有多个连接配置但同一时间只能激活一个。修改IP地址的完整套路nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.10.50/24 ipv4.gateway 192.168.10.1 ipv4.dns 8.8.8.8 nmcli connection up ens160这里最容易犯错的是漏掉ipv4.method manual。默认网卡通常是auto也就是DHCP自动获取。如果你只改了ipv4.addresses不把方式切到manual网卡可能仍然走DHCP改了个寂寞。改完一定用nmcli connection up激活让配置立即生效。验证看ip addr show ens160或nmcli device status。5.2 主机名与DNS的正确改法修改主机名RHEL官方推荐用hostnamectlhostnamectl set-hostname server1.example.com hostnamectl status一个要注意的细节是改完主机名显示可能不会立即出现在shell提示符里重新打开终端或执行bash刷新一下即可。改DNS配置时直接编辑/etc/resolv.conf在RHEL9里可能白费功夫因为NetworkManager会在连接激活时重置这个文件。正确做法是用nmcli把DNS写到连接配置里nmcli connection modify ens160 ipv4.dns 114.114.114.114 223.5.5.5 nmcli connection up ens160这个坑我踩过无数次手动改resolv.conf后一次网络重启就还原了。要在NetworkManager体系下让DNS修改持久化一切改动都必须落到connection配置上。5.3 网络故障排查的检查顺序讲排查思路之前先给结论网络问题排查一定要自底向上从链路层到应用层一层层剥。第一步看物理和数据链路ip link show关注网卡是否UP状态。第二步看IP地址ip addr show 或 ip address show确认地址和掩码是否配置正确。第三步看路由ip route show重点是默认路由default via是否指向正确的网关。第四步看连通性ping网关能通说明同网段通信正常再ping一个跨网段IP能通则路由没问题。第五步看端口和监听ss -tlnp确认目标服务确实在监听对应端口。这个顺序不是机械流程而是利用排除法快速缩小范围。我在实验环境里遇到SSH连不上时99%的问题都出在网卡没激活或者地址写错这两个环节很少真的是网络硬件故障。6. 安全加固两大件SELinux与firewalld6.1 从三个模式理解SELinux的设计SELinux是RH124最劝退的部分很多同学一看到权限拒绝就习惯性setenforce 0关掉它。我的建议是考试时千万别这样操作这等于主动送分。先把三个模式记清楚enforcing强制模式违反策略直接拦截permissive宽容模式记录违规但不拦截适合排错disabled彻底关闭查看和临时切换getenforce setenforce 0 # 临时切到permissive setenforce 1 # 临时候切到enforcingsetenforce只临时生效重启后恢复配置文件里的设定。永久修改要编辑/etc/selinux/config里的SELINUX字段。注意disabled模式只在系统启动时生效从enforcing切到disabled需要重启重启后SELinux才真正不加载。排错时最有用的套路是把SELinux临时切到permissive复现一次操作再查看审计日志看操作是否被SELinux拦截。日志在/var/log/audit/audit.log里被拒绝的访问会留下AVC记录。这样既能确认是不是SELinux导致的问题又不用直接关掉安全机制。6.2 上下文、restorecon与布尔值SELinux的核心概念是标签也叫上下文。每个文件、进程、端口都被贴了一个类型标签比如网页文件通常是httpd_sys_content_t普通文件通常是etc_t或default_t。当你把一个文件mv到Nginx或Apache的目录下文件的SELinux类型不会自动跟着变结果就是Web服务无权读取这个文件。查看文件上下文ls -Z /var/www/html/恢复正确上下文用restoreconrestorecon -Rv /var/www/html/如果restorecon搞不定说明该路径还不在SELinux规则库里需要手动添加semanage fcontext -a -t httpd_sys_content_t /data/www(/.*)? restorecon -Rv /data/www这组命令RH134考得更深但RH124阶段你必须理解restorecon的用途。考试里最典型的就是把网页文件放到自定义目录后网页始终无法访问原因就是SELinux类型不对。先ls -Z看类型再restorecon修复问题基本当场解决。布尔值Boolean是SELinux提供的策略开关。例如允许HTTP服务访问MySQL数据库需要开启getsebool -a | grep httpd setsebool -P httpd_can_network_connect_db on-P参数千万不能少它表示持久化否则重启后布尔值回到默认状态。RH124只需掌握getsebool查看和setsebool开启关闭的基本技能剩余靠semanage解决。6.3 firewalld的区域与服务firewalld用区域zone定义一组信任级别。RHEL默认网络接口都在public区域这是最严格的策略——只放行SSH和DHCP其他入站流量一律拒绝。常用操作全在这组命令里firewall-cmd --state firewall-cmd --get-default-zone firewall-cmd --list-all firewall-cmd --permanent --zonepublic --add-servicehttp firewall-cmd --permanent --zonepublic --add-port8080/tcp firewall-cmd --reload--permanent表示写入运行时配置的持久化版本但不会立刻生效必须配合--reload让改动生效。如果操作时忘了加--permanent那这个规则只对当前会话生效重启就丢。还有一点要区分放行服务名要用--add-service http放行自定义端口用--add-port 8080/tcp。服务名实际上是端口名的映射优先使用服务名可读性更好。强烈建议改防火墙规则后执行firewall-cmd --list-all验证结果别自信到不检查。我见过太多端口明明加了但还是不通的案例结果是规则加到了public区域但网卡实际处于home或internal区域策略根本没落到正确区域上。7. 日志与归档压缩考试中的隐形得分点7.1 journalctl三板斧systemd把所有服务的日志统一交给journald管理查看日志的核心命令就是journalctl。RH124阶段最常用的三招journalctl -u sshd # 只看sshd这个服务 journalctl -p err # 只看err及以上级别 journalctl --since 1 hour ago # 只看最近一小时三个条件可以组合比如排查sshd最近报错journalctl -u sshd -p err --since today实时跟踪日志用journalctl -f配合systemctl status sshd看服务状态基本能搞定90%的服务故障排查。初学者有个误区一出问题就翻/var/log/messages但messages里信息太杂远不如按服务名过滤来得直接。journald把日志默认放在内存/run/log/journal里重启会清空持久化需要创建/var/log/journal目录RH124不深入考但你要知道这个机制存在。7.2 归档是备份的基础tar命令不只是压缩它是打包压缩的组合。打包是把多个文件合成一个文件压缩是把打包结果体积缩小。RH124要求会的三个压缩算法gzip速度最快压缩率一般扩展名.tar.gzbzip2速度中等压缩率更好扩展名.tar.bz2xz压缩率最高耗时最长扩展名.tar.xz打包压缩的通用格式tar czvf backup.tar.gz /etc /var/log tar cjvf backup.tar.bz2 /etc /var/log tar cJvf backup.tar.xz /etc /var/logc是创建z/j/J对应三个压缩工具v是显示进度f是指定输出文件。解包时只用一个x压缩参数tar xzvf backup.tar.gz我建议把常用解压和打包指令写进实验笔记因为机械记忆容易混。多一个实战技巧备份时排除无关文件用--exclude参数tar czvf home_backup.tar.gz --excludehome/zhang/.cache /home这条会把用户目录里最大的缓存目录跳过备份速度和体积都会有明显改善。7.3 日志轮转与时间同步日志轮转logrotate解决的是日志无限增长撑爆磁盘的问题。RHEL默认配置在/etc/logrotate.conf大部分服务会在/etc/logrotate.d/下有自己的轮转规则。RH124阶段不需要你写轮转配置但要能读懂文件里daily/weekly、rotate 4、compress这些关键字的意思。时间同步虽然不直接属于日志模块但它和日志分析强相关。服务器时间不准日志里的时间戳就没有参考意义排错时你会浪费大量时间在对不上时间上。检查时间用timedatectl同步时间用chronyc tracking。RHEL9里不再默认提供ntpdatechrony才是正主。8. 二刷之后我建议的考前自测方法8.1 按场景自测而不是按命令自测命令背得再熟组合不起来等于零。与其一遍遍敲systemctl restart不如给自己出几道综合场景题。比如场景一机器里有一个本地ISO镜像挂载在/mnt/iso请配置一个本地软件仓库然后安装httpd并设置为开机自启。场景二创建用户alice要求她属于web组附加组为wheel设置密码并确保她可以通过SSH登录到系统。场景三把Web服务的文档根目录改到/opt/webroot并保证SELinux不拦截访问防火墙放行http流量。这三道题覆盖了仓库配置、用户管理、SELinux上下文、firewalld放行、目录权限等高频考点而且全部是需求式题干——考试就是这么考的。做的时候别偷懒只看答案每一步都执行执行不动就查日志直到整个场景跑通为止。8.2 碰到报错时的标准操作顺序实验环境里每天都会遇到各种报错我的排错顺序已经固化成一套肌肉记忆看systemctl status 服务名确认服务的当前状态和最近日志。看journalctl -u 服务名 -p err --since today抓最新报错。检查配置文件语法比如改完httpd.conf先执行httpd -t验证语法。确认涉及的文件目录权限和SELinux上下文。确认防火墙规则是否放行相关端口。记住这条经验报错信息是系统的求助信号不要视而不见去网上搜某个命令报错怎么办。先读报错再对症下药如果再配合搜索引擎对症搜索效率反而更高。RH124考的就是这个能力在有限信息里判断问题出在哪个环节。8.3 一套值得反复敲的实验搭建法我自己的练习方法很笨但很有效准备两台虚拟机一台当服务器一台当客户端每隔几天就把常用配置全部重建一遍。第一次用30分钟第二次用15分钟第三次你就会发现很多命令已经变成条件反射了。每做完一次重建把错误记录下来。那些命令没打全路径写错忘了restorecon的低级错误只有亲手踩过才知道在纠结什么。记录错误还有一个额外好处到了考前翻一遍全是自己真实的易错点比任何笔记都贴近你的薄弱环节。关于语言环境建议尽早把系统的菜单和命令行切到英文。不是崇洋媚外而是考试环境默认是英文命令报错也是英文。提前培养英文阅读习惯能在考场上省下不少翻译时间。RH124的难度不在某个单独的知识点而在你能否把用户、权限、服务、软件、网络、安全这些模块在同一个场景里同时运用起来。二刷时每做完一个实验停下来想一想这个配置如果下次从头搭我会漏掉哪一步这个习惯比任何寻宝式的备考笔记都值钱。