RHCSA第一次作业实战:用户权限、ACL与服务日志全解析
RHCSA认证是很多Linux运维入门者绕不开的第一个硬核认证而“第一次作业”往往是整个备考过程中最有仪式感的一步。它不是一道难度有多高的题目而是帮你从“看过命令”切换到“能上手敲命令”的关键节点。很多学员第一次作业做完之后心里的Linux才真正从“操作系统的概念”变成“一个可以对话的系统”。这次作业适合所有正在准备RHCSA、或者刚接触RHEL系服务器管理的人。内容是一套在虚拟机里完成的综合练习用户和组管理、目录权限、ACL访问控制、Web服务配置、日志排查和定时任务。我把完整操作过程和踩坑点都拆开讲透你跟着做一遍RHCSA的基础操作链路基本就能跑通了。1. 为什么第一份作业要这样设计1.1 先搞清楚RHCSA到底在考什么RHCSA的全称是Red Hat Certified System Administrator考试形式是纯上机实操2到3小时没有任何选择题全部是在一台RHEL服务器上完成指定的配置任务。这意味着你没有“背选项”的侥幸空间所有的能力都要落到终端命令上。考试考察的范围大致围绕几个方向用户与组管理、文件系统与权限、存储配置、系统服务管理、网络配置、日志与排错、SELinux与防火墙等。很多备考新手一开始容易犯的错是把学习重点放在“背命令”上忽略了RHCSA考察的其实是“在真实系统里完成目标”的能力。第一次作业应该模拟这种目标导向它不是让你一条条背useradd、chmod、systemctl的语法而是给你一组明确的业务结果让你自己决定用什么命令组合去达成。所以第一份作业的定位是“最小可运行的闭环”从登录系统开始到配置用户、配置目录权限、启动一个服务、验证服务状态通过日志去确认自己的操作确实生效。这条链路里每一步都在为后续LVM、SELinux、网络组等更难的内容打底。1.2 环境准备和作业清单预览做作业之前先把环境准备好。我这里用的是虚拟机方案系统选择RHEL 9或Rocky Linux 9镜像从官方渠道下载即可。虚拟机配置建议2GB内存、20GB磁盘安装时选择“Minimal install”最小化安装不要装GUI因为RHCSA考试全程都是命令行你需要习惯在纯文本界面里工作。安装完成后还需要做几件基础准备确认网络可用用ip addr查看IP地址没有IP就执行nmcli device status看网卡状态。设置主机名例如hostnamectl set-hostname rhcsa-lab。确认软件源可用执行dnf repolist看看有没有仓库输出。给root设置一个你记得住的密码并用普通用户验证sudo能否正常切换。这些动作本身也是RHCSA的基础考点别跳过。本次作业一共包含四个任务任务考察点核心命令创建用户与组设置密码策略用户管理、密码过期useradd、groupadd、chpasswd、chage创建共享目录配置ACL权限文件权限、ACLmkdir、chown、chmod、setfacl、getfacl搭建HTTP服务并设置开机自启服务管理、防火墙dnf、systemctl、firewall-cmd、curl日志查找与定时任务配置日志排错、crondjournalctl、grep、crontab这四个任务覆盖了RHCSA前几章最重要的高频操作点做完它们你就能对考试节奏有一个初步感觉。2. 核心技能点拆解为什么这些操作如此关键2.1 用户、组与密码策略从useradd到chage用户管理是RHCSA的第一道门槛因为后续几乎所有的权限、服务、文件归属都会涉及用户和组。考试不会只考“创建一个用户”而是会叠加很多条件比如指定UID、指定家目录、指定附加组、设置密码过期时间等。实际做题时常用到的命令组合是这样的groupadd hr useradd -u 3001 -g hr -G wheel -d /home/alice -s /bin/bash alice echo alice:redhat123 | chpasswd这里解释一下关键参数。-u 3001是固定UIDRHCSA考试很看重这种明确赋值-g hr指定主组-G wheel指定附加组wheel组在RHEL里默认有sudo权限这经常是题目的隐含要求-d指定家目录-s指定登录Shell。如果不指定这些参数系统会按/etc/default/useradd里的默认值创建但你无法保证它符合题目要求。设置密码时我推荐chpasswd而不是passwd --stdin因为chpasswd在RHEL 9上更稳定格式也简单就是“用户名:密码”直接通过管道输入。交互式passwd适合课堂演示但在作业脚本里管道方式更高效。密码策略这一块题目的常见问法是“将alice的密码设为90天后过期提前7天提醒”。用chage实现chage -M 90 -W 7 alice chage -l alice-M 90表示最大有效天数90天-W 7表示过期前7天开始警告。验证用chage -l alice查看输出里面有Password expires那一行能直接看到你设置的结果。这里有个容易出错的地方chage -M 0表示密码立即过期考试中如果题目要求的是“用户下次登录时必须修改密码”那么需要的是chage -d 0 alice而不是-M 0。两个参数含义完全不同务必区分。2.2 文件权限与ACL别把chmod当万能钥匙传统的UGO权限模型用三个组别属主u、属组g、其他人o和三种权限读r4、写w2、执行x1来描述访问规则简单直接但它有一个明显局限它无法同时给两个不同的用户设置不同权限。例如有一个目录/project要求用户alice能读写、用户bob只能读、其他人无法访问这时传统权限就做不到了因为传统权限的“属组”只能给一个组统一权限无法在同一组内再细分。ACLAccess Control List就是来补这个短板的。ACL允许你在传统权限之上额外为特定用户或特定组添加授权条目。RHCSA考试里ACL是明确考点作业里必须练到。设置ACL的基本命令mkdir /project chown root:dev /project chmod 750 /project setfacl -m u:alice:rwx /project setfacl -m u:bob:r-x /projectsetfacl -m是修改ACLu:alice:rwx表示给用户alice设置rwx权限u:bob:r-x给bob设置rx权限。查看ACL用getfacl /project输出里会有一行user:alice:rwx和一行user:bob:r-x还会出现一个mask字段。mask这个字段需要特别注意。ACL mask是“最大有效权限”它会把ACL里所有命名用户和命名组的权限“挡住”。比如你给alice配了rwx但mask是r-x那alice的有效权限就会被压缩成r-x。改变mask的命令是setfacl -m m::rwx /project。作业里如果发现ACL配了但用户还是不能写多半就是mask在捣乱。ACL还有一种默认ACL用d:前缀表示例如setfacl -m d:u:alice:rwx /project它表示该目录下新建的文件自动继承这个ACL权限。这在共享工作目录场景中很实用考试也可能会考。2.3 文本处理与日志排查grep、sed、awk的入门组合很多初学者会觉得文本处理命令很“虚”但一旦进入实际排错场景你马上就会明白它们的价值。RHCSA考试不会直接考“请用awk打印第几列”但当系统服务起不来、日志刷屏、配置需要批量修改时这些命令就是你的眼睛和手。日志操作是这次作业的第四个任务核心。RHEL 9上推荐用journald配合传统/var/log目录。一条最常用的排错命令是journalctl -u httpd --since 1 hour ago这条命令查看httpd服务过去一小时的日志。如果需要查SSH登录失败记录可以配合grep过滤journalctl _SYSTEMD_UNITsshd.service | grep -i failed password_SYSTEMD_UNITsshd.service是journalctl的一个过滤条件只显示sshd服务产生的日志。如果需要统计失败次数可以继续接管道journalctl _SYSTEMD_UNITsshd.service | grep -i failed password | wc -lwc -l统计行数这是最基础的日志分析组合。更进阶的可以用sed提取IP、用awk按字段输出比如统计哪个IP尝试登录最多journalctl _SYSTEMD_UNITsshd.service | grep Failed password | awk {print $(NF-3)} | sort | uniq -c这里的awk {print $(NF-3)}提取倒数第4个字段因为sshd日志里IP地址通常在该位置。sort再uniq -c就能把每个IP的出现次数聚合出来。这个组合你在这个作业里亲手跑一遍后面的排错能力就立住了。2.4 服务管理从systemctl到firewalldRHCSA考试中服务管理一直是大头。很多新手第一次接触systemctl时只会systemctl start httpd然后看到状态是running就以为大功告成。但考试必然不会只考启动它会要求“设置服务开机自启”这两件事是两码事。systemctl start只是立即启动系统重启后服务不会自动运行。要让服务开机自启必须执行systemctl enable。可以分开执行systemctl start httpd systemctl enable httpd也可以一步到位systemctl enable --now httpd--now表示同时启动并设为开机自启。这个参数我建议优先使用减少漏步骤的概率。RHEL 9默认防火墙是firewalld它有一个很容易踩坑的设计运行时状态和持久化状态是分开的。如果只执行firewall-cmd --add-servicehttp它只对当前运行生效防火墙一reload或者系统重启就失效了。正确做法是加上--permanent参数并重新加载firewall-cmd --permanent --add-servicehttp firewall-cmd --reload--reload是让永久配置立即生效。很多人在自己的虚拟机上开着防火墙却访问不了页面多半就是只做了运行时添加重启后防火墙规则丢失了。3. 典型作业题目与完整解题过程3.1 任务一创建用户和组设置密码策略题目业务场景公司有一个hr部门需要创建hr组和两个成员alice、bob同时要求alice加入系统管理员附属组wheel设置密码并让密码90天过期。我的实操过程如下。先创建组groupadd hr然后创建用户useradd -g hr -G wheel -u 3001 -d /home/alice -s /bin/bash alice useradd -g hr -u 3002 -d /home/bob -s /bin/bash bob这里alice和bob的主组都是hr附属组只有alice有wheel。之后用chpasswd批量设置密码echo alice:redhat2024 | chpasswd echo bob:redhat2024 | chpasswd最后配置密码过期策略chage -M 90 -W 7 alice chage -M 90 -W 7 bob验证阶段我习惯先看用户是否创建成功id alice getent passwd aliceid输出里能看到uid3001、gidhr、groupshr,wheel这能确认附加组加对了。getent passwd alice能确认用户在系统中可见。再验证密码策略chage -l alice输出里Password expires那一行会显示具体的过期日期这比直接看命令返回码要直观得多。这道题里最容易翻车的点是没有指定UID系统随机分配或者-G wheel写成了-g wheel把主组改成wheel了还有的学员用passwd alice交互式设密码在作业脚本里卡在等待输入那一步。密码批量设置还是推荐chpasswd。3.2 任务二创建共享目录并配置ACL权限题目业务场景创建/project目录目录属主为root所属组为hr组alice对该目录可读可写可执行bob只能读和执行其他用户一律不可访问同时要求之后新建的文件自动继承同样的ACL规则。解题步骤mkdir /project chown root:hr /project chmod 750 /project为什么先chmod 750再加ACL因为750已经保证了“其他人无权访问”组内成员默认有rx权限但题目要求alice和bob的权限不同所以传统权限只解决基础隔离具体区分交给ACL。然后设置ACLsetfacl -m u:alice:rwx /project setfacl -m u:bob:r-x /project setfacl -m d:u:alice:rwx /project setfacl -m d:u:bob:r-x /project前两条是给现有目录设置权限后两条是设置默认ACL让这个目录下未来新建的文件自动带有相同的ACL规则。验证命令getfacl /project注意看输出里是否包含default:user:alice:rwx这样的行。还要实际测试一下用户权限是否生效可以切换到alice试建文件su - alice -c touch /project/alice_test.txt如果创建成功说明写权限生效。再切换到bob尝试创建su - bob -c touch /project/bob_test.txt这里应该得到一个Permission denied这是正常的因为bob没有写权限。这条验证非常直观能帮你确认ACL不是只在命令行里好看。这道题的关键难点是理解mask。如果getfacl输出里的mask是r-x即使你给alice配了rwx她也没法写文件。如果遇到这种情况执行setfacl -m m::rwx /project把mask放开。另外chmod命令也可能改变mask的值所以先做chmod再加ACL能少踩一些坑。3.3 任务三搭建HTTP服务并设置开机自启题目业务场景安装httpd服务创建一个默认网页要求服务当前立即启动并在系统重启后能自动运行防火墙需要放行http服务确保局域网内其他机器能访问。开始操作。先安装dnf install -y httpd安装完成后创建一个测试页面echo htmlbodyh1RHCSA Homework/h1/body/html /var/www/html/index.htmlRHCSA默认的网页根目录是/var/www/html对初学者来说不要修改这个目录因为如果你把网页根目录改到/home或其他路径SELinux会阻止HTTPD读取文件需要额外处理类型标签这属于进阶内容第一次作业先用默认路径。启动并设置自启systemctl enable --now httpd验证服务状态和端口监听systemctl status httpd ss -tlnp | grep :80ss -tlnp比老的netstat -tlnp更常用输出里能看到LISTEN状态和进程名httpd。配置防火墙firewall-cmd --permanent --add-servicehttp firewall-cmd --reload这里解释一下为什么要--permanent加--reload。如果不加--permanent规则只在内存里生效防火墙服务一重启就丢如果加了--permanent但不reload那么改变只在配置文件中存在当前运行状态还没生效会出现“明明已经添加了规则但curl还是不通”的诡异现象。验证访问curl http://localhost如果返回你写的HTML内容说明本机访问正常。想验证局域网访问就找到虚拟机的IP地址ip addr show然后在宿主机浏览器里访问http://虚拟机IP能看到页面就说明防火墙放行也正确。这道题最常遇到的问题有三个第一只start没enable重启后服务失效第二firewalld规则没有加--permanent刷新后丢规则第三SELinux拦截页面在本地用curl都不通journalctl -u httpd里能看到Permission denied。第一次作业用默认路径基本不会遇到第三种但了解这个判断思路对后面很有用。3.4 任务四日志查找和定时任务配置题目业务场景确认alice用户的SSH登录行为统计日志中“Failed password”出现的次数同时配置一个定时任务让系统每分钟把当前时间追加到/tmp/timelog.txt。先看登录日志。SSH服务在RHEL 9上默认通过journald采集journalctl _SYSTEMD_UNITsshd.service这个命令输出很长所以通常配合grep过滤。查找失败的登录尝试journalctl _SYSTEMD_UNITsshd.service | grep -i failed password统计次数journalctl _SYSTEMD_UNITsshd.service | grep -i failed password | wc -l如果你想确认alice用户有没有成功登录过可以改用lastlog或lastlast -u alice如果日志显示有登录记录说明之前alice的登录行为确实发生过。这些命令本身也是RHCSA的常用考点。再配置定时任务。编辑root用户的crontabcrontab -e如果你是用root身份执行默认编辑的是root的定时任务如果想编辑指定用户的任务用crontab -u alice -e。输入一行配置* * * * * echo $(date) /tmp/timelog.txtcrontab的五个星号分别表示分、时、日、月、周这里全部用*表示每分钟执行一次。$(date)会返回系统当前时间。保存退出后等一分钟查看文件cat /tmp/timelog.txt如果文件里已经有一行或多行时间记录说明定时任务生效。再验证开机自启方面crontab服务一般默认就开着但建议也顺手确认systemctl status crond这道题里的易错点是crontab -e保存时如果格式错误系统不会报错但任务不执行。常见错误是写成分号分隔或者多加了空格。写完后用crontab -l查看当前任务列表确认内容无误。定时任务的日志排查也是一个经验点。如果任务没跑先看/var/log/cron里面有每条任务的执行记录。例如tail -n 50 /var/log/cron如果看到CMD (echo $(date) /tmp/timelog.txt)这行说明调度器确实执行了。这个排错思路比瞎猜高效得多。4. 常见问题与避坑实录4.1 权限和ACL的几个典型“翻车”现场第一次做权限类作业出错率最高的环节几乎都集中在权限语义和ACL的理解上。这里我整理几个最常见的现场给你提前打个预防针。第一个坑是“目录没有x权限导致用户无法进入”。ACL里你给用户配置了rw但没有配置x用户依然无法进入目录。因为对目录来说x权限代表“可以穿过这个目录”没有x即使你有r和w也无法cd进去、无法访问里面的文件。所以如果作业要求用户能访问目录ACL或chmod权限里一定要带x。第二个坑是临时修改权限时用了chmod不小心把ACL mask覆盖了。比如你已经配好setfacl之后又执行了chmod 750 /project这会把mask调整为r-x用户的写权限可能就丢了。如果你的场景里既需要ACL精细授权又需要设置传统权限顺序上先做chmod再做setfacl最后再核对一次getfacl。第三个坑是默认ACL没有设置。题目要求“在目录里新建的文件自动继承权限”很多学员只在目录上加了u:alice:rwx但没有加d:u:alice:rwx这条默认ACL。结果是目录本身能访问但里面新建的文件没有继承用户还是写不了。记住默认ACL必须带d:前缀而且设置的时机是先加默认ACL再创建文件因为默认ACL只对之后新建的文件生效。4.2 网络、服务和防火墙的排查清单服务类作业出现问题的概率也很高但绝大多数原因可以靠一套固定排查思路解决。我按经验概率从高到低排列你遇到服务不通时按这个顺序查第一服务本身是否真的在运行。systemctl status显示的Active状态如果是failed或inactive直接看日志journalctl -u httpd --no-pager -n 30第二端口是否在监听。ss -tlnp | grep 80如果没有输出说明服务进程可能根本没起来或者配置的端口不是80。第三防火墙是否拦截。firewall-cmd --list-all查看当前放行列表。如果http服务不在列表里按前面说的--permanent --add-servicehttp加规则。第四SELinux是否拦截。getenforce查看状态如果是Enforcing且服务异常看ausearch -m avc -ts recent有avc拒绝记录则是SELinux问题。第一次作业建议把HTTP服务路径保持在默认位置少一层麻烦。这套排查顺序适用于几乎所有“服务访问不了”的问题不只是httpd。RHCSA考试里zex系统服务的故障排查题也大多是这种思路。4.3 学习习惯与考试心态最后说点题外话。第一份作业做错很多题并不可怕可怕的是用“背答案”的方式刷题。RHCSA的红帽考试题库虽然有限但考试环境是全新的虚拟机题目参数会变用户会变目录会变。如果只是背命令换个参数就卡住了。我见过太多学员在作业里把当时的命令粘进笔记考场上遇到类似题目却不知道该怎么改参数。一个很有效的练习方法做完一次作业之后把虚拟机恢复到做作业前的快照然后凭笔记或记忆重做一遍。第一次做懵懵懂懂第二遍能独立完成任务才算真正掌握。第一遍可以看着文档敲第二遍一定要合上笔记。能完成第二遍说明你已经脱离了“照着抄”的阶段。做作业时的验证习惯也要养成。每完成一个任务不要看命令输出变成绿色就觉得没问题而是用独立命令去验证结果。比如创建用户后用id验证配置ACL后用getfacl验证配置服务后用curl验证配置定时任务后等一分钟cat文件确认。RHCSA的评分标准只关心结果不在乎你用了什么命令所以你也要用结果来评判自己而不是用“我敲了这条命令”来自我安慰。5. 第一次作业之后接下来该怎么走这份作业覆盖的内容用户管理、ACL、服务管理、防火墙、日志和定时任务几乎就是RHCSA前半场的核心骨架。你把这套东西练熟后面再接触LVM逻辑卷管理、SELinux用户域、网络配置、系统启动排错会发现很多操作都是这些基础能力的组合叠加。从我带班的经验看第一次作业是分化开始的地方。有人做完之后对命令行心生畏惧有人做完之后开始有自己的排错套路和习惯。区别不在于基础好坏而在于有没有形成“先想清楚目标再选命令最后独立验证”的操作流程。养成这个流程比多做十道题更有价值。一个小建议给每份作业建一个自己的命令速查表不要用网上现成的用自己的话和常用参数记录。之后复习时这个表比任何教材都顺手。第一次作业只是起点带着“系统是可以被理解”的信念继续往下练就好。