1. RHCSA第二次作业到底在考什么?
RHCSA这个认证,只要接触过Linux运维的人应该都不陌生。它是Red Hat Certified System Administrator,也就是红帽认证系统管理员。很多人备考时都把重心放在最后几套模拟题上,但真正让我把基础打牢的,反而是第二次作业这套看起来“平平无奇”的练习。这次作业没有复杂的服务部署,也没有容器和编排,核心就围绕用户、组、文件权限、归档和链接这几个点展开。听起来很简单,可等你上手做一遍就会发现,每一个小命令背后都藏着考试喜欢挖的坑。
我拿到作业时,第一反应是“就这?”。但做完之后我意识到,RHCSA的机考环境和你平时在虚拟机里随便敲命令完全不是一回事。第二次作业的价值不在于命令本身,而在于它逼着你去理解Linux系统里“权限模型”和“用户模型”的底层逻辑。如果你正在准备RHCSA认证,或者刚接触Linux想验证自己的基础,这套作业就是一块特别好的试金石。它能暴露你对useradd、chmod、setfacl这些命令到底是“背下来了”还是“真懂了”。
这次作业的任务描述不算复杂:在系统中新建几个组和用户,设置主组和附加组,创建项目目录并配置特定的属主和权限,还要用ACL做额外授权,最后检查归档和链接相关操作。很多初学者会卡在中间某一步,比如ACL的mask、目录的默认权限、软链接的目标路径这几个点上。下面我就按我的实际操作顺序,把这套作业完整拆开讲一遍。
1.1 为什么第二次作业聚焦“用户与权限”
Linux是一个多用户系统,权限控制就是它的安全基石。RHCSA机考里有一类经典题型,叫“配置本地用户与组”,满分可能就占5到10分,但几乎每场考试都会出现。第二次作业把用户、组、权限、ACL、链接放在一起,目的就是让考生在同一个场景里把这几条线串起来。
你不能只会useradd zhangsan,你还要知道useradd默认的umask是多少、创建出来的家目录权限是什么、usermod -aG和usermod -G的区别有多大。你也不能只会chmod 777,你得明白数字权限里的4、2、1对应读、写、执行,目录的执行权限意味着“能否进入这个目录”,对目录而言r和x必须搭配使用才是真正的可读写。这些细节在作业里一旦没搞清楚,后面做项目目录的权限配置时很容易出现“目录进去了却创建不了文件”这种诡异现象。
还有一个容易被忽略的点:红帽考试环境是RHEL或者Rocky Linux,默认启用了SELinux。第二次作业虽然不一定要求你调整SELinux,但目录权限、ACL和SELinux上下文三者叠加时,表现出的症状很像“权限不足”。所以我一开始就建议,练习时不要关闭SELinux,否则考试时你会被本机没有的问题卡住。
1.2 作业场景还原与需求拆解
我这里按比较常见的作业要求来描述,方便你对号入座。整套作业大致分四块:第一,创建组devops和admin;第二,创建用户alice、bob、carol,指定主组和附加组;第三,创建项目目录/data/project,要求属主为root、属组为devops,权限为2770,并且额外授权alice可写、bob只读、carol无权限;第四,完成关于软链接、硬链接和tar归档的验证操作。
需求里有个很容易踩坑的设计:2770开头的2是setgid位,它会让该目录下新建的文件自动继承目录的属组,也就是devops。很多人在这一步会用chmod 770,漏掉setgid,结果后续用alice创建文件后,文件属组还是alice而不是devops,作业验收就不通过。这个细节在考试里是实打实的采分点。
我把这个场景拆解成四个可验证的小目标:一是用户和组的存在性与属性正确;二是目录的属主、属组、特殊权限正确;三是ACL授权之后,不同用户的实际行为符合预期;四是链接和归档能按题目要求建立并验证。下面所有操作都围绕这四个目标展开。
2. 实操前准备与整体思路
2.1 搭建一个接近考试的实验环境
想要踏踏实实过一遍RHCSA第二次作业,我建议不要直接用本机或者太花哨的桌面环境。最省事的方式是在本机装一个虚拟机软件,然后安装Rocky Linux 9或Rocky Linux 8的最小化版本,和红帽企业版的操作逻辑几乎一致。如果你只想快速验证命令,容器里也可以跑,但容器默认的systemd和SELinux行为和完整系统差别很大,用来练RHCSA作业会产生误导。
装好系统后,建议用root登录,创建几个普通用户作为操作入口。作业里的所有操作都需要root权限,但考试时你有一个普通的非root用户,然后通过sudo或直接切到root来执行。练习时也推荐这样做,否则你无法体会权限拒绝到底发生在哪一层。
我自己的实验环境是Rocky Linux 9,虚拟机分配2核CPU、2GB内存、20GB磁盘。装完之后第一件事是关闭防火墙或者放行必要的服务吗?不用。第二次作业不涉及网络服务,但考试第一题往往是配置网络,所以习惯上我会把网卡配置成静态地址,用nmcli操作,顺便复习网络配置。然后确认selinux处于Enforcing模式,这是考试默认状态。
2.2 把作业拆成可验证的小目标
拿到题目先别急着敲命令。我把需要验收的点列成一张自查表,每做完一步就对照检查一次。这样不但能提高准确率,还能训练“考试时复查”的习惯。以本项目为例:
getent passwd alice能查到用户,id alice能显示正确的uid、主组和附加组。getent group devops能查到组,groupmems -l devops能列出组内成员。ls -ld /data/project显示drwxrws---,属主为root,属组为devops。getfacl /data/project能看到alice的rwx权限和bob的r-x权限。setfacl -m d:u:alice:rwx是否设置正确,默认ACL能不能被新文件继承。- 软链接和目标文件之间是否能正确穿透,硬链接的inode是否一致。
- tar归档能否按指定路径打包,解压后权限保持不变。
这份自查表看起来简单,但每个条目都能对应到RHCSA的考试目标。我后来就发现,很多人在家练习全靠“眼睛看”,不看getent也不看getfacl,到考场就蒙了。所以从第二次作业开始,建立“命令执行后必须验证输出”的习惯,比多做十道题还有用。
3. 完整实操:用户、权限、ACL、链接与归档
3.1 创建用户和组:useradd、usermod和groupadd的配合
先创建两个组。这里没有技巧,但要记住,组名不要带大写字母,红帽考试默认使用小写。执行:
groupadd devops groupadd admin然后创建三个用户。作业要求alice的主组是devops,附加组是admin;bob的主组是admin,附加组是devops;carol的主组是自己创建的同名组,附加组为空。这个写法要用到-g和-G参数:
useradd -g devops -G admin alice useradd -g admin -G devops bob useradd carol注意,useradd -G后面指定的是附加组,多个组用逗号分隔。如果某个用户已经存在,需要用usermod -aG追加附加组。这里最容易犯的错是漏掉-a,直接用usermod -G,导致把用户从其他附加组里踢出去。在作业里,alice只有一个附加组还看不出来,到了真实生产环境,一个用户可能挂了五六个附加组,一旦漏写-a就出事故。
接着检查:
id alice id bob id carol groupmems -l devops groupmems -l admin这里有几件事要说明:groupmems -l需要root才能运行,普通用户可以用groups alice查看。如果你发现alice的uid是1000,不用在意,RHCSA对UID没有固定要求,除非题目明确说“UID为3000”。但有一种情况是题目要求“创建用户时指定UID”,那就必须用useradd -u,这时候记得不要和现有用户冲突。
还有一个小细节:useradd创建用户时会自动创建一个和用户名相同的组。所以carol不指定主组时,主组就是carol。如果你不想生成同名组,可以用useradd -N,但作业一般不会这么要求。实际工作中也很少用-N,因为同名组是很多管理脚本默认依赖的。
3.2 文件权限与umask:从数字到符号都要会
创建目录:
mkdir -p /data/project先看它当前权限:
ls -ld /data/projectroot创建的目录默认权限是755。作业要求设置成2770,也就是drwxrws---。这个2就是setgid位。设置命令:
chmod 2770 /data/project chown root:devops /data/project顺序上,我习惯先chown再chmod,因为chown不会影响已有权限位,先改属主和属组,再调整权限,检查的时候更清晰。当然反过来也行。重要的是理解数字权限的算法:2是setgid,7是属主权限rwx,7是属组权限rwx,0是其他用户无权限。
利用符号方式也能做:chmod g+s /data/project只加setgid,chmod u=rwx,g=rwx,o= /data/project设置常规权限。考试时两种都可能出现,你要能看懂ls -l输出的S和s。
umask是这次作业里隐含的考点。默认umask是022,新建目录权限是755,新建文件是644。如果题目要求所有新建文件对属组可写,那就要设置umask 002或者更严格的027。改全局配置可以写在/etc/profile或/etc/bashrc,但只针对当前作业进程,直接在命令行umask 002就够了。需要注意的是,umask影响的是“新建文件/目录”,对已经存在的文件不起作用。
3.3 ACL授权:setfacl和默认ACL的坑
目录权限变成了2770后,devops组内成员对目录都有rwx权限。现在要求alice在组内可以写,bob只能读。但他们都属于devops组,通过传统权限没有办法区分,所以必须用ACL。
先清除可能存在的多余ACL,然后设置:
setfacl -m u:alice:rwx /data/project setfacl -m u:bob:r-x /data/project这里有个极易搞错的知识点:对目录而言,如果只给r-x,意味着用户能读取目录内容、能进入目录,但不能在目录里创建文件或删除文件。题目里“bob只读”的意思通常是“能在目录下列出文件、能进入,但不能增删改”。如果你给的是r--,那bob连进入目录都做不到,因为进入目录需要执行权限。RHCSA考试里这类细节非常多,你要习惯把读、写、执行和“能否进入目录”对应起来。
配置完后查看:
getfacl /data/project你会看到类似这样的输出:
# file: data/project # owner: root # group: devops user::rwx user:alice:rwx user:bob:r-x group::rwx mask::rwx other::---特别注意mask::rwx这一行。mask决定了ACL里“除了owner之外的所有用户/组”能获得的最大权限。如果后面执行了chmod g-w /data/project,mask会从rwx自动变成r-x,这时alice虽然是rwx,实际也会被削成r-x。这个现象叫mask限制,也是考试常见的坑。解决办法是用setfacl -m m::rwx /data/project重新调整mask,但更根本的是:不要在执行ACL设置后随手乱改组权限。
如果你需要让以后在目录里新建的文件自动继承ACL,还需要设置默认ACL:
setfacl -m d:u:alice:rwx /data/project setfacl -m d:u:bob:r-x /data/project加上d:前缀的ACL会作为默认权限,复制到新创建的文件或子目录上。这个题在RHCSA里经常以“要求新增用户对新建文件也有权限”的形式出现。如果不加d:,那alice只能在目录本身创建文件,但无法写别人创建的文件,因为新文件不会自动带alice的ACL。
3.4 软链接、硬链接和tar归档验证
链接题也是RHCSA第二次作业的常客。软链接就是一个快捷方式,可以跨越文件系统,也可以指向目录;硬链接则只能在同一个文件系统内创建,且不能指向目录。验证方法是用stat看inode。
假设作业要求在/data下创建一个软链接/data/project_link,指向/data/project:
ln -s /data/project /data/project_link注意这里目标是绝对路径还是相对路径。如果写成ln -s project /data/project_link,那么这个软链接会指向/data/project_link/project,一旦访问就是断链。考试时有人就这么丢分。用ls -l /data/project_link能看到链接目标,用readlink也能查看。
硬链接的经典验证方式是:
echo "hello" > /data/project/file.txt ln /data/project/file.txt /data/project/file_hard.txt stat -c '%i' /data/project/file.txt /data/project/file_hard.txt输出的两个inode相同,说明是硬链接。修改任何一个文件,另一个也会变,因为本质是同一个文件。硬链接不能跨文件系统,所以在/data下测试没问题,但不要对着home目录和/tmp试。
tar归档的作业要求一般是这样:把/data/project打包成/root/project_backup.tar.gz,并且要求权限信息保留。执行:
tar -czvf /root/project_backup.tar.gz /data/projectc是创建归档,z是gzip压缩,v是显示详细过程,f是指定归档文件。要验证内容,用tar -tzvf /root/project_backup.tar.gz列目录;要解压到指定目录并保留权限,用tar -xzvf /root/project_backup.tar.gz -C /tmp/restore。这里需要注意:tar的-C必须放在源归档文件之后,顺序错了会报错。另外,如果作业要求“将目录本身打包进去,而不是只打包里面的内容”,那就要检查归档内第一层路径是否包含了project。
4. 排错实录:我在作业里踩过的4个坑
4.1 用户创建成功却无法登录
我第一次做这套作业时,创建完alice,高高兴兴用su - alice切过去,结果系统提示su: failed to execute /bin/bash: Permission denied。我当时还以为是权限问题,查了半天才发现,原来系统里之前存在一个同名的用户目录或者shell配置问题。
这种情况最常见的原因是用户shell指向了/sbin/nologin。如果你在创建用户时曾手动指定过shell,或者拷贝过/etc/passwd里的旧用户,可能会把shell改成/sbin/nologin。检查方法:
getent passwd alice看到最后一段是/bin/bash就正常,如果看到/sbin/nologin,用usermod -s /bin/bash alice修正。还有一个可能是家目录权限不对,家目录如果被设置成700,其他用户自然进不去,但root切换用户时通常不会触发这个问题。我做作业时遇到的是因为虚拟机里之前跑过一个脚本,把默认shell改成nologin了,属于环境残留问题。
4.2 权限改了还是拒绝访问
这个问题几乎人人都会遇到。现象是:chmod 2770 /data/project之后,用alice切进去,用touch创建文件,结果Permission denied。
我的排查步骤是:先ls -ld /data/project确认权限,再id alice确认身份,然后getfacl /data/project看ACL。最后发现问题是目录上一级的/data权限是700,而alice不属于root组,没有执行权限,根本进不了/data目录。RHCSA考试很爱考这种“父目录没有x权限导致无法访问子目录”的陷阱,文件权限再正确,父目录进不去也白搭。
解决办法也很简单:chmod 755 /data或者chown root:root /data后给属组加rx。这里要特别注意,/data本身可能还有别的业务目录,不能随便给所有人都能写。作业场景下只给755就够了。
4.3 软链接“不生效”的真相
有一次我在/data下创建软链接,指向/data/project,然后用ls /data/project_link查看内容,能正常看到文件。于是我以为没问题,但验收时却发现,用cat /data/project_link/secret.txt报错“No such file or directory”。
后来用readlink /data/project_link一看,输出是project,而不是/data/project。因为我在执行ln -s时用了相对路径。软链接里的project会相对于软链接所在的目录解析,也就是/data/project才对,但我的软链接也放在/data,所以结果竟然碰巧是对的?不对,因为软链接文件全路径是/data/project_link,它相对自身所在目录/data去找project,路径应该是/data/project,所以其实能访问。但真正的坑是我在后面又移动过一次链接文件,导致相对路径失效。
更稳妥的考试习惯是:软链接统一用绝对路径创建,虽然相对路径更灵活,但在RHCSA这种有明确验收标准的场景里,绝对路径能让readlink的结果和预期一致,不容易产生歧义。
4.4 作业验收时最容易丢分的表达问题
这个坑和命令无关,但比命令更致命。RHCSA考试不是让你把最终状态摆出来就行,它需要你按题目指定的方式验证。比如题目说“配置用户alice的附加组为admin”,你不能只执行usermod -aG admin alice,最好还要执行id alice确认输出里包含groups=...。题目说“配置目录权限”,就必须用ls -ld或stat去核对权限位,而不是凭记忆说“我设置了”。
还有一点是不要创建多余的东西。作业要求建一个目录,你顺手建了一个无关的test目录,虽然不影响主目录权限,但考场上有时候会自动评分脚本会扫描是否有不该出现的额外资源,一旦产生干扰项就有可能被判违规。这听起来很苛刻,但确实是我在模拟考试平台里遇到过的扣分原因。
5. 从作业到RHCSA机考:这些习惯现在就要养
5.1 考试环境与作业环境的差异
实验室里你在root下敲命令,考试时你通常以一个普通用户登录,然后通过sudo提权。RHCSA机考的图形界面和终端布局也和你自己装的虚拟机不完全一样。所以从第二次作业开始,我建议所有命令都尽量以“普通用户 + sudo”的方式敲一遍。比如:
sudo useradd -g devops -G admin alice因为考试里你可能会碰到“普通用户没有sudo权限”的初始状态,这时候必须切换到root或者用su -。这个判断本身也是考点。
另外,考试采用的是自动评分,每个检查点都是独立的。只要最终状态正确,评分脚本不会关心你用了多少条命令、有没有读过man手册。这就要求你平时养成“用命令改变状态,并用命令验证状态”的习惯。不要靠GUI工具,不要靠鼠标右键设置权限,因为考试提供的GUI环境不一定完整。
5.2 提交流程与评分机制
红帽考试的评分机制是考后自动执行一系列检查脚本,检查的是“系统当前状态是否满足题目要求”。比如检查/etc/passwd中是否存在alice,检查她的主组,检查/data/project的权限位,检查ACL的getfacl输出。这些检查不会问你“当时怎么做的”,只看现在是不是对。
所以我在完成作业后,一定会跑一遍完整的复查命令,把输出的每一项都对照作业要求过一遍。这里有一个我常用的综合检查脚本,虽然考试时不能一次输入这么多,但练习时能节省大量时间:
id alice id bob id carol getent group devops getent group admin ls -ld /data/project getfacl /data/project ls -l /data/project_link stat -c '%a %U %G' /data/project我还会专门用sudo -l -U alice检查sudo权限,虽然本次作业不一定要求,但这是RHCSA高频考点。
5.3 一套可以复用的检查清单
到目前为止,我每次做类似作业都会整理一份检查清单,你可以直接复制来用。这份清单按RHCSA考试目标排列,第二次作业里已经覆盖了其中大部分:
- 用户存在性、UID/GID、附加组:
id、getent passwd - 组存在性、组内成员:
getent group、groupmems -l - 目录权限、属主属组、特殊权限:
ls -ld、stat - ACL权限和默认ACL:
getfacl - 软链接目标和有效性:
ls -l、readlink - 硬链接inode一致性:
stat -c '%i' - 归档文件存在且内容完整:
tar -tzvf - SELinux上下文(如果涉及):
ls -Z
把这些命令做成一个习惯动作,每次做完作业都跑一遍。你不一定会用到所有输出,但一旦哪里不对,你马上就能定位到具体环节。我个人体会是,RHCSA备考中最不值钱的就是“我记住命令了”,最值钱的是“我知道系统当前处于什么状态,并知道怎么把它改到目标状态”。第二次作业恰好就是训练这种状态切换能力的最佳起点。
最后再分享一个小技巧:手动做完所有操作后,把下面的命令执行一遍,把输出和你的预期对比,如果全部一致,那这套作业就稳稳拿下了。
getent passwd alice | cut -d: -f1,4,6 ls -ld /data/project getfacl /data/project | grep -E 'user:alice|user:bob|default'这三条能覆盖用户、目录权限和ACL三大核心点。剩下的软链接和tar归档,用readlink和tar -tzvf一验即可。把这些养成肌肉记忆,后面做更复杂的RHCSA作业时,你会感谢当初认真抠细节的自己。