ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RHCSA实操:从用户权限到SELinux与防火墙的Linux系统管理指南

RHCSA实操:从用户权限到SELinux与防火墙的Linux系统管理指南 我本来只是想把RHCSA的第二次作业赶紧做完交差没想到这一轮实操下来反而把很多之前模糊的概念彻底打通了。如果你也在备考rhcsa认证或者刚学完Linux基础命令想找个方向练手这篇记录应该能帮你少走不少弯路。这次作业的内容不算复杂但覆盖面很广涉及用户权限、SELinux、防火墙、计划任务这几个RHCSA考试里的高频重点。我会把作业要求、我的踩坑过程、每条命令背后的逻辑以及最后总结的排查技巧都写出来直接对标考试场景看完就能照着练。1. 这次作业的考核目标与知识框架1.1 为什么第二次作业会聚焦这几个模块RHCSA的考纲范围很明确很多培训机构都会把内容拆成几轮作业来推进。第一次作业一般集中在文件系统操作、vim使用、tar打包解压、软硬链接这些基础功。到了第二次作业就会明显偏向系统管理”的方向也就是从单纯操作文件升级到管理用户、控制访问、保障服务安全。我这次拿到的作业清单里明确要求在一台最小化安装的RHEL 9/CentOS Stream 9上完成创建本地用户和用户组设置密码策略和sudo权限配置文件系统权限包括特殊权限位和ACL访问控制调整SELinux模式、文件上下文和安全布尔值配置firewalld防火墙规则放行或限制指定服务设置cron计划任务和at一次性任务使用journalctl完成基础日志排错。这几个模块之所以被放在一起是因为它们在真实运维场景里本来就是联动出现的。比如你装了一个HTTP服务客户端访问不了排查顺序通常是先看服务有没有起再看防火墙放没放行最后确认SELinux有没有拦。如果这三块知识割裂地学遇到问题根本串不起来。所以我觉得老师这么布置作业本质上是想让我们建立配置-安全-排错一体化的思维模式。1.2 作业环境与基础准备我这次用的环境是VMware Workstation里的一台CentOS Stream 9虚拟机分配了2核CPU、4GB内存、40GB磁盘。之所以推荐虚拟机而不是物理机是因为RHCSA考试本身就要求在类似环境中操作而且虚拟机可以随时打快照做坏了一个还原就完事练习成本极低。系统装好之后要做的第一件事不是急着敲命令而是配好基础网络和软件源。我用root用户登录先把主机名改成了station.example.com这种考试风格的格式然后配置静态IP。最小化安装的系统默认很多包都没有建议先装一个基础工具集后面所有操作都会用到# 设置主机名 hostnamectl set-hostname station.example.com # 更新软件源并安装常用工具 dnf update -y dnf install -y vim bash-completion net-tools lsof tar man-pages这里有个小坑我要特别提醒如果你用的不是红帽官方的订阅镜像dnf update之前一定要先检查源能不能正常用。我一开始用的是默认官方源结果因为网络原因直接卡死在下载阶段。后来切换到国内开源镜像站之后就顺畅多了。配置软件源可以写一个简单的repo文件在/etc/yum.repos.d/下具体镜像地址可以上网查一下你所在区域可用的源。1.3 理解RHCSA考试的评分逻辑在动手做作业之前我特意研究了一下rhcsa认证的评分方式。这门考试是上机实操给你一堆任务列表你在真实系统上完成操作系统自动评分。它不像笔试那样考你背命令而是看你最终系统状态是否符合要求。所以练习的时候必须养成一个习惯做完一步就实际验证一步而不是我敲了命令就算完。举个例子创建一个用户webadmin要求该用户属于webgroup组并且拥有对/var/www/html目录的读写权限。如果你只敲了useradd和usermod但没有检查用户的初始组、Supplementary组或者没有确认目录权限的实际生效情况考试评分就会判定你失败。这种细节越早意识到越好我第二次作业里就吃过这方面的亏后面第4章会详细说。2. 工具与环境的选型逻辑2.1 选择RHEL类系统的理由RHCSA认证是基于红帽企业Linux实机考试的所以练习环境最稳妥的选择就是RHEL或者它的下游发行版。RHEL本身需要订阅学生申请免费开发者订阅也比较方便但很多人嫌弃申请流程麻烦。这时CentOS Stream就成了绝佳的替代品——它和RHEL同源命令、配置路径、服务管理方式几乎一模一样唯一的区别是更新节奏更快但应对RHCSA考试绰绰有余。还有人用Rocky Linux、AlmaLinux这类RHEL复刻版它们和RHEL的兼容性更高仔细对比起来选择哪一版都行但要记住别用Ubuntu或Debian来练RHCSA。因为RHCSA考试考察的是dnf、systemctl、firewalld、selinux这套体系Ubuntu用的是apt、ufw、apparmor体系完全不一样练了也白练。2.2 账号切换与sudo机制的区别在RHCSA环境中使用root账号操作是最直接的但考试里很多题目会要求你用普通用户完成授权操作这就必须理解sudo设计的目的。我这次作业里明确要求用户operator不允许直接登录shell但允许通过sudo执行所有管理命令。两个条件同时满足看起来有点矛盾但实际配置起来并不复杂。useradd operator -s /sbin/nologin把登录shell设为nologin用户就不能交互登录了。然后编辑/etc/sudoers.d/operator文件写入operator ALL(ALL) ALL这个用户通过sudo -i或sudo 命令就能以root身份执行操作。你在做这类配置时强烈建议用visudo -f /etc/sudoers.d/operator来编辑文件而不是直接vim去改因为visudo会做语法检查格式错了它会警告你避免把自己锁在sudo门外。2.3 对命令选择与包依赖的判断做系统管理作业时经常遇到这条命令找不到的情况原因多半是相关软件包没装。比如你想用semanage修改SELinux上下文最小化安装默认根本没有这个命令。它属于policycoreutils-python-utils包必须先装dnf install -y policycoreutils-python-utils再比如getfacl、setfacl这类ACL工具虽然核心util-linux包里自带一部分但完整功能还需要acl包。我的经验是每次作业前先dnf install -y acl policycoreutils-python-utils setools-console ncurses-term把这类边角料工具提前补齐后面省很多事。这也侧面说明一个道理Linux运维不只是看你会不会敲命令还要知道你手头缺什么、怎么补齐。3. 核心实操细节与作业复现全流程3.1 用户、组和密码策略的完整配置我这次作业的第一大块是创建若干用户并设置合规的密码策略。考试里这类题目最常见的要求是创建用户时指定UID、主组、附加组并设置密码过期策略。下面是我实际执行的一组练习直接抄这个思路就行# 创建主组 groupadd webgroup groupadd dbgroup # 创建用户并指定UID和主组 useradd -u 2001 -G dbgroup -g webgroup -d /home/webadmin webadmin echo Password123 | passwd --stdin webadmin # 查看用户信息 id webadmin需要注意的是-g指定的是主组PrimaryGroup-G指定的是附加组SupplementaryGroups。一个用户的默认组概念很重要如果只用useradd webadmin而不指定系统会创建一个同名组webadmin并作为用户主组。但考试里往往要求用户主组是某个指定组这是新手最容易漏的细节。密码策略主要体现在/etc/login.defs和/etc/shadow两个文件。比如要求新密码最短8位、必须同时包含字母和数字、每30天强制改一次密码。/etc/login.defs里已经有默认值你可以调成满足作业要求PASS_MAX_DAYS 30、PASS_MIN_DAYS 0、PASS_MIN_LEN 8。但这种配置只影响以后新建用户对于已经存在的用户要单独改对应行chage -M 30 -m 0 -W 7 webadmin chage -l webadmin-W 7表示密码过期前7天开始提醒。做这类操作时一定要用chage -l验证它会显示账号的密码过期时间、最小天数、最大天数、警告天数等。考试评分很多时候就是检查这些字段你光改文件不验证等于白做。3.2 文件系统权限与特殊权限位RHCSA考试对文件权限的要求远不止chmod 755那种基础三数字权限。文件所有者User、所属组Group、其他人Other的三组rwx权限当然必须熟练但更常考的是SUID、SGID和Sticky Bit这三个特殊权限位以及ACL访问控制列表。我在作业里的一个具体场景是需要让webgroup组的所有成员都能在/var/www/html/shared目录下创建文件并自动继承组所有权同时不允许用户删除不属于自己的文件。这个需求对应两个特殊权限位mkdir -p /var/www/html/shared chown -R root:webgroup /var/www/html/shared chmod -R 2770 /var/www/html/shared数字开头那个2就是SGID位。SGID作用于目录时新创建的文件会自动归属于目录的属组而不是创建者的默认组。Sticky Bit用1前缀表示作用在/tmp这类共享目录上限制只有文件所有者或root才能删除文件。这些特殊位在ls -l输出里分别显示为s和t比如drwxrws--T这种。ACL的作用更强大了。比如目录的属组是webgroup但你还想额外给一个dbuser单独写权限普通chmod做不到就得用ACLsetfacl -m u:dbuser:rwx /var/www/html/shared setfacl -m d:u:dbuser:rwx /var/www/html/shared第一条命令给用户dbuser设置针对目录的读写执行权限。第二条里的d:是default ACL它决定了以后在这个目录下新建的文件会默认继承什么ACL规则。很多人只记住第一条忘了第二条结果新建文件后ACL丢失考试里至少会扣一分。验证ACL必须用getfacl普通ls -l只能看到一个加号看不了具体授权明细这也是一个容易被忽略的点。3.3 SELinux三种模式、布尔值、文件上下文SELinux是RHCSA考试中概念性最强、也最让人头大的一部分。我这次作业里专门安排了一个任务让Apache以非标准端口8080提供服务同时保证SELinux不拦截。这个过程涉及三个层面的知识。第一层是SELinux的运行模式。enforcing强制、permissive宽容、disabled关闭三个模式要分清。考试一般不要求你关闭SELinux而是要求你在enforcing模式下让服务正常运行因为这才符合生产环境的安全要求。修改模式用setenforce临时改运行态持久化修改要编辑/etc/selinux/config。第二层是布尔值。SELinux里有一个“开关”体系它控制某个域能不能执行某类操作。比如允许httpd通过网络访问家目录、允许FTP读取用户家目录都是由布尔值控制的。查看和修改布尔值getsebool -a | grep httpd setsebool -P httpd_can_network_connect_db on-P参数写-P才会永久生效重启不丢失。不带-P只影响当前运行状态。考试里如果你只改临时值重启后规则失效评分直接失败。第三层是文件上下文。SELinux会给每个文件打一个type标签进程只能按照策略访问对应标签的文件。比如Apache默认只能访问httpd_sys_content_t类型的文件。如果你把网站目录放在自定义路径/webdata必须手动修改上下文semanage fcontext -a -t httpd_sys_content_t /webdata(/.*)? restorecon -Rv /webdata这里必须强调一下semanage fcontext和restorecon的配合。semanage只是写入了规则真正生效还得靠restorecon把现有文件的标签刷成规则里的类型。如果你漏了restoreconls -Z /webdata看到的还是原来的类型服务自然访问不了。排查SELinux问题最通用的一条命令是ausearch -m avc -ts recent grep denied /var/log/audit/audit.logausearch的输出会直接告诉你哪个进程、访问哪个文件、被哪个策略拒绝。我在作业里就是靠它定位到Apache的日志目录上下文不对一条restorecon解决掉问题。这种排错思路在考试遇到未知SELinux问题时非常好用别瞎猜先看avc日志。3.4 firewalld防火墙规则配置RHCSA考试里防火墙这块重点不是让你去理解iptables那套复杂规则而是要求熟练使用firewalld的富规则和常规放行操作。考试环境中的网卡通常属于public这个zone我这次作业的要求是允许HTTP和HTTPS服务从外部网卡访问同时禁止某个IP段访问SSH。常规放行服务firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps firewall-cmd --reload这里最容易犯的错是忘记--reload。firewalld有两种配置运行时配置和永久配置。不加--permanent的修改只对当前运行有效重启后丢失加了--permanent只是写入配置不reload也不会立即生效。所以最稳妥的套路是加--permanent最后一定跟一个--reload。禁止IP段访问SSH可以用富规则firewall-cmd --permanent --add-rich-rulerule familyipv4 source address10.10.0.0/24 service namessh reject firewall-cmd --reloadrich-rule的写法比较繁琐但考试里出现频率不低。它的逻辑是匹配IP段、匹配服务、执行动作。你也可以用自己的环境测一下能否访问。另外验证防火墙状态不要只看配置实际测试更靠谱比如从另一台机器ssh连一下看是不是被拒绝。如果是在虚拟机里操作可以直接在本机curl服务端口测试连通性。提示做完防火墙操作建议用firewall-cmd --list-all查看当前zone的详细规则确认服务、端口、富规则都按预期存在。这个命令能让你一眼看出有没有遗漏。3.5 计划任务cron与at的配置要点计划任务是RHCSA里的送分题但越是送分题越容易掉以轻心。cron分为系统级和用户级。系统级任务写在/etc/crontab用户级任务用crontab -e编辑作业里通常考的是用户级。我这次作业的任务要求是每天凌晨2点30分执行/usr/local/bin/backup.sh。crontab -e -u webadmin # 内容 30 2 * * * /usr/local/bin/backup.sh注意crontab的五个时间字段依次是分、时、日、月、周。30 2 * * *表示每天2点30分周字段*表示不限制。很多人容易把顺序搞反写成2 30 * * *结果变成凌晨2点30分执行看起来一样其实那是30分2点不对就是单纯的顺序问题考试非常喜欢挖这个坑。还有一种情况是要求每5分钟执行一次对应的写法是*/5 * * * * /your/command*/5表示每5分钟触发一次这是cron里常见的步进语法。如果你配置的是脚本任务记得先确认脚本有执行权限并且脚本首行有正确的shebang比如#!/bin/bash。我踩过一次坑脚本本身没问题但是crontab环境变量和交互shell不一样导致脚本里调用的命令找不到路径。解决办法很简单在脚本里使用绝对路径或者在crontab里设置PATH。at一次性任务我就不多展开核心是记住at now 5 minutes这种时间写法以及atq查看队列、atrm删除任务。实践的时候建一个任务然后看看输出很快就能掌握。4. 实操过程中的常见问题与排查方法4.1 用户无法通过sudo执行命令作业里配置好sudo后我测试发现用户执行sudo ls一直报错。第一反应是sudoers文件语法有问题但用visudo -c检查又显示正常。后来排查才发现是sudoers.d文件的权限设置不对。sudo有一条安全限制/etc/sudoers.d/下的文件不能被组用户或其他用户写入否则sudo会拒绝加载。我用ls -l一看文件权限竟然变成了rw-rw-r--修正为0440后问题立刻消失。chmod 0440 /etc/sudoers.d/operator visudo -c这个坑非常隐蔽因为你在root下直接vim编辑完一般不会去关注文件权限但sudo会严格按照权限检查。遇到sudo无法生效的情况不要急着怀疑语法先看权限。4.2 SELinux导致服务启动失败我启动httpd服务时报错Job for httpd.service failed但systemctl status httpd显示的报错信息并不够直观。最有效的方法还是看avc日志。那次我通过ausearch -m avc -ts recent发现是httpd_t域被拒绝访问/webdata下的文件原因是目录上下文还是default_t而非httpd_sys_content_t。我用semanage fcontext改写规则加上restorecon -Rv重新标记后服务一切正常。这类问题在考试里特别经典遇到时一定要养成日志优先的思维别靠经验瞎猜。SELinux排错三板斧第一看ls -Z确认文件标签第二对比ps -eZ确认进程域第三查avc日志看具体拒绝条目。三板斧用下来绝大多数问题都能定位。4.3 防火墙放行后端口仍然不通有一次我添加了HTTP服务的永久规则reload之后用curl测试还是不通。排查发现原因是这台机器同时启用了多个网卡而HTTP请求走的是另一个zone的接口我配置的规则只对publiczone生效。解决方式有两个要么把接口加进publiczone要么直接在对应zone上加服务。# 把默认网卡加入public zone firewall-cmd --permanent --zonepublic --add-interfaceens160 firewall-cmd --reload这个坑说明一个道理firewalld的zone机制决定规则应用范围必须先确认流量从哪个zone进入才能对症放行。用firewall-cmd --get-active-zones查看当前各接口所属zone是排查防火墙问题的第一步而不是盲目加规则。4.4 忘记root密码怎么办RHCSA考试经常有一道题叫重置root密码流程是重启进入GRUB菜单按e编辑启动项在linux行末尾追加rd.break然后ctrl-x启动进入紧急模式。接着重新挂载根文件系统并修改密码mount -o remount,rw /sysroot chroot /sysroot passwd root touch /.autorelabel exit reboottouch /.autorelabel很关键它触发SELinux在重启时重新标记文件系统否则修改过密码的shadow文件上下文可能有问题导致无法登录。做这个操作之前记得先给虚拟机打快照万一改坏了还能回滚。这种重置流程虽然看着简单但考试时间紧张时容易手忙脚乱平时多练几遍形成肌肉记忆很重要。5. 作业做完之后的验证与复盘建议5.1 怎么自查作业是否真正完成做完所有题不能直接关电脑走人一定要系统性地自查一遍。我习惯按模块列表逐项验证用户模块用id和getent passwd确认账号信息、chage -l确认密码策略权限模块用ls -ld和getfacl确认目录权限、特殊位和ACLSELinux用getenforce确认模式、ls -Zd确认目录标签防火墙用firewall-cmd --list-all确认规则落地计划任务用crontab -l确认任务已保存。如果每一项都有明确输出并且输出内容符合作业要求才算真正完成。很多情况下你觉得做了但实际因为-P没加、--reload没执行、restorecon没跑系统状态根本没有改变测试一下立刻露馅。所以在做任何操作时都要养成改完必查、查完必测的习惯。提示考试评分看的是最终系统状态不是过程。只要系统状态符合要求哪怕你只用一条命令搞定了所有目标也能拿满分。所以自查的本质就是确认最终状态达标。5.2 学习命令不能光靠死记硬背很多同学学Linux习惯背命令但我做了这轮作业后的真切感受是命令不是背出来的是用出来的。每条命令背后的逻辑其实都指向同一个问题——系统状态该怎么到达目标状态。比如usermod -aG这个命令-a表示append-G表示附加组列表。如果你不加-a就会把用户从原有附加组里踢出去只保留你当前指定的组。这种细节在敲错一次之后比背十遍都印象深刻。我建议你准备一个错误日志本子每次作业里踩到的坑都记下来标注原因和解决办法。这个日志的复习价值极高尤其考试前两周翻阅一下能快速唤醒记忆。我自己就维护了这样一个Markdown笔记里面记录了这次作业遇到的所有坑以后复习只需看它即可。5.3 把作业场景扩展成考试模拟题做完作业后我还把作业要求反过来改成了几道模拟题逼自己换个角度思考。比如原题是创建用户webadmin并加入webgroup我反过来问自己如果要让webadmin从webgroup里移除但不影响他其他组成员身份该用什么命令答案是gpasswd -d webadmin webgroup。这种反向思考能帮你把知识点吃透而不只是机械地完成任务。模拟考试还有一个关键限时。我会给自己定一个小时把所有操作从头到尾做一遍中间不看任何笔记。第一次做的时候超过半小时卡在SELinux上第二次、第三次熟练之后时间就能控制在考试要求内了。RHCSA考试强度不算低平时练到闭着眼都能操作的程度考场才不会慌。6. 如何把这次作业延续成持续的学习计划6.1 与后续学习内容的衔接第二次作业里用到了SELinux、firewalld、用户权限这些知识不是孤立存在的。RHCSA考纲后半部分还有网络配置、存储管理、容器基础等内容它们都在依赖你对系统安全和管理工具的掌握。比如学习NFS共享你就要同时配置防火墙放行nfs服务、设置SELinux布尔值允许nfs导出学习容器时也要了解容器和SELinux之间的关系。所以往后的学习计划里可以围绕服务搭建安全策略这种组合方式做练习每个服务都当成一个完整项目来做而不是单点敲命令。6.2 面向rhcsa认证的冲刺建议如果你目标是拿到rhcsa认证我的建议是把作业里每道题都当成真实考试题目对待不要只看能跑还要看快不快。考试时间有限熟练度决定成败。平时操练时注意以下几点多用Tab补全减少输错概率提高速度习惯用man查看命令帮助考试环境允许查帮助善用visudo、firewall-cmd --permanent --reload这类成套操作比如永久化重载习惯别每次漏后半句每次配置完都做反向验证比如改了防火墙就顺便curl测试改了ACL就getfacl复查。6.3 个人实操体会我做这轮作业最大的转变是开始从运行命令的人变成检查系统状态的人。一开始我总想着把命令敲完就完事后来发现运维的核心其实是验证——验证配置是否生效、验证服务是否正常、验证权限是否符合预期。RHCSA考试虽然只是基础认证但它培养的这套配置-验证-排错的习惯是后续考RHCE和工作里最受用的能力。这次作业里我吃过最多的亏集中在两个地方一个是SELinux的restorecon经常忘记执行另一个是firewalld的永久配置不reload不生效。这两类问题在真实环境里其实比考试更常见很多线上事故都是因为当时改了配置以为生效了重启之后服务全挂。从现在开始养成改配置必reload、改标签必restorecon、改权限必验证的习惯比多背几十条命令有意义得多。如果你现在也正在做RHCSA相关的练习不妨刻意训练一下这个习惯。做完题别急着交逐项检查最终状态让验证成为你操作的一部分而不是事后补救。这次作业对我来说收获最大的不是那些命令本身而是这种对待系统的态度。后面再有什么新的练习或考试心得我会继续分享出来一起把基础打扎实。
返回列表