☰
RHCSA实战:用户权限、ACL与SELinux等Linux运维核心技能
2026/10/21 18:10:32 网站建设 项目流程

1. 作业背后的考核逻辑:RHCSA到底考什么

第二次作业,这个位置其实挺微妙的。第一次作业通常是在折腾系统安装、网络配置、yum源替换这些“能不能用”的问题,到了第二次,画风就变了,开始进入“用得好不好”的层次。我带过不少学员,到这个阶段最容易出现的状态是:命令敲得出来,但不知道为什么这么敲,换个场景就不会了。RHCSA的题目表面上是在考命令,实际上每一道题都在考你对Linux运行机制的理解程度。

RHCSA(红帽认证系统管理员)的考试范围里,占比最大的几个模块分别是:用户和组管理、文件权限与SELinux、存储管理(含LVM逻辑卷)、系统服务与进程管理、以及自动化任务。第二次作业的题目往往是从这几个模块里抽两到三个组合起来,目的就是让你开始用“管理员视角”而不是“用户视角”去看一台Linux服务器。

我见过不少初学者写作业时喜欢把答案背下来,比如“创建用户用useradd,加组用usermod”,但如果题目换成“先创建组,再把用户加进去,要求用户的主组是某个指定组”,好多人就卡住了。原因很简单,没有理解useradd和usermod在处理组关系上的分工逻辑。后面我会把这个坑单独拿出来讲。

第二次作业还有一个隐含要求:提交的报告里必须能看出来你是真的在一台Linux机器上一步步操作过,而不是把命令抄了一遍。考试时的打分系统是自动化的,平时作业的检查往往也看操作痕迹,比如history记录、配置文件的时间戳、甚至ACL权限的setfacl输出。所以这篇文章不会只给你命令,我会把每个步骤的设计意图和验证方法一起给你,让你做完之后能自己确认“确实做对了”。

2. 核心考点逐一拆解

2.1 用户与组管理:别只会useradd

用户和组管理是RHCSA的必考内容,也是第二次作业里最常见的模块。一个标准的作业题通常会要求:创建若干个用户、指定UID(用户ID)、设置密码、创建用户组、把用户加入组、设置用户的主组和附加组,最后还要验证登录是否正常。

这里有个非常重要的区别必须搞清楚:主组(primary group)和附加组(supplementary group)是完全不同的东西。主组决定一个新创建的文件默认属于哪个组,附加组只是让用户获得访问该组文件的额外权限。你创建一个用户的时候,系统会自动创建一个同名的主组,这叫user private group,是为了安全隔离而设计的。很多作业题会故意让你把用户的主组改成别的组,这时候就需要用到usermod -g,而不是usermod -G,一个字母之差,含义完全不同。

创建用户的几个常用参数我列一下:

  • useradd -u 1501 -G wheel -m -s /bin/bash zhangsan:指定UID为1501,附加组是wheel,创建家目录,指定登录shell
  • usermod -g itdept zhangsan:把zhangsan的主组改成itdept
  • groupadd -g 2000 itdept:创建一个GID为2000的组
  • passwd zhangsan:设置密码,注意RHCSA考试环境里你可能需要配合echo "密码" | passwd --stdin zhangsan这条命令来批量设置

如果你要批量创建用户,可以写一个简单的for循环。但我要提醒你一条实战经验:批量创建之后一定要逐条验证,比如用id zhangsan看用户的UID、GID、组信息是否完全符合题目要求。考试里偷懒少验证一步,很可能丢整个题的分。

关于删除用户,userdel -r会连家目录一起删掉,但如果你事先已经把用户的邮件、cron任务清理了,直接userdel也够用。有时候用户删不掉,提示“user is currently used by process”,不要硬删,先pkill -u 用户名杀掉该用户的所有进程再删。

2.2 文件权限与ACL:隐藏的坑都在细节里

文件权限这块,RHCSA考的不是简单的chmod 755,而是深入理解权限对可执行文件、目录、符号链接的不同意义。举个例子,chmod 777 file看起来是“所有人可读可写可执行”,但它真正的含义是:所有者、所属组、其他用户三者在读、写、执行三个位上的组合。rwx三位分别对应4、2、1,所以777是4+2+1、4+2+1、4+2+1。

很多作业题会设计一个陷阱:目录要求设成750,文件要求设成640。为什么是这两个数?因为目录的x权限代表能否进入目录,如果目录是750,所有者可以进入并查看,组内用户可以进入并查看,其他用户连目录都进不去。文件640意味着所有者可读写,组内用户只可读,其他用户完全没权限。这个设计思路在真实生产环境里非常常见,比如Web服务器的配置文件就通常采用这种策略。

目录权限还有一个很容易被忽略的点:如果目录对组可写,但没有设置setgid位,组内用户新建的文件所属组还是自己的主组,而不是目录的组。要让新建文件自动继承目录的组,必须加setgid权限位,也就是chmod g+s 目录名。作业题经常变着花样考这个知识点,比如“新建文件组内可读写”“文件自动属于某组”,本质上就是在考setgid。

ACL(访问控制列表)是这部分的一个加分项,也是RHCSA必考。标准权限只能设置一个所有者、一个组、一个其他用户,ACL允许你给额外的人单独设置权限,相当于电梯门禁之外再发一张访客卡。用法是setfacl -m u:wangwu:rw- /data/shared,给wangwu单独设置对某目录的读写权限。查看用getfacl,删除用setfacl -b。ACL生效后,ls -l输出会多一个加号标记,比如-rw-rw-r--+,看到加号说明文件带有ACL条目。

SELinux这块需要留个心眼。RHCSA考试很爱考“服务启动但访问被拒”,这时候十有八九是SELinux在拦截。常见的排查套路是:先临时关闭SELinux(setenforce 0)看问题是否消失,如果消失就确认是SELinux的锅,然后用ausearch -m avc -ts recent查看审计日志,再用chcon或semanage fcontext调整上下文。笔试作业很少直接考SELinux,但如果你配置的服务(比如FTP、HTTP)无法访问,记得检查这个环节,不然会白折腾很久。

2.3 文本处理三剑客:grep、sed、awk的定位不同

第二次作业往往会涉及一个数据处理任务,比如“把/etc/passwd里的第3、4个字段提取出来,按UID排序,写到一个新文件”。这种题目听起来简单,但实际上是在同时考grep的过滤、awk的字段提取、sort的排序和重定向。

grep是过滤行,它的核心用法是写正则表达式。grep '^root' /etc/passwd代表查找以root开头的行;grep -E 'bash$' /etc/passwd代表以bash结尾。注意-E是扩展正则,很多人在基本正则里想用|做“或”结果直接出不来,加-E就对了。

awk是按列取内容,默认以空格(包括制表符)作为列分隔符。awk -F: '{print $1,$6}' /etc/passwd是冒号分隔,打印用户名和家目录。awk真正的杀手锏在于它支持条件判断和内置变量,比如awk -F: '$3>=1000 {print $1,$3}'可以提取所有UID大于等于1000的用户。这个条件语法要熟悉。

sed是流编辑器,最常用的操作是替换。sed 's/old/new/g' file把old全部替换成new。注意sed默认只改输出不改原文件,必须加-i才会真正写入文件。带-i这个参数做实验的时候一定要小心,建议先不带-i跑一遍,确认输出无误再加-i,否则改错了文件很难恢复。这是很多初学者的血泪教训。

这三者的组合思维才是拿分关键。比如要把所有用户的默认shell从/bin/bash改成/bin/sh,可以这样写:

sed -i 's#/bin/bash#/bin/sh#g' /etc/passwd

注意我用#代替了斜杠作为分隔符,这样就不用在正则里转义斜杠了,这个小技巧能帮你减少不少烦人的错误。

2.4 归档压缩与计划任务:秒级验证才能万无一失

归档压缩题通常要求把某个目录打包并压缩。tar -czvf backup.tar.gz /data/web是打包并gzip压缩,-xzvf是解压,-tf是查看内容。这里要记住一个细节:tar默认会保留绝对路径信息,但建议你打包时用相对路径进入目录再打包,避免解压时覆盖掉系统真实目录。作业里常出现“把/etc备份到/backup下”,如果你用tar -czvf /backup/etc.tar.gz -C /etc .这种方式,就比较安全。

计划任务分两种:at一次性任务和cron周期性任务。RHCSA考得比较多的是cron。编辑当前用户的crontab用crontab -e,查看用crontab -l,格式是“分 时 日 月 周 + 命令”。比如“每天凌晨2点30分执行备份脚本”就是30 2 * * * /root/backup.sh。五个星号字段从左到右依次是分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-6),注意分钟和小时的取值范围很容易写反。

写完crontab之后要验证是否真的执行了,很多作业题检查的就是这一步。方法有三种:一是等时间到了看结果;二是在命令里加上时间戳重定向到日志文件,比如30 2 * * * /root/backup.sh >> /var/log/backup.log 2>&1;三是用tail -f /var/log/cron观察系统是否真的触发了任务。第三种最直观,也最适合考试验证。

3. 一套完整的模拟作业与操作过程

3.1 模拟作业题目

为了让前面的知识点落地,我设计一套接近真实考试的模拟作业题,大家可以直接拿自己在虚拟机里练:

  1. 创建用户alice和bob,UID分别指定为1501和1502,要求这两个用户都属于itgroup组。
  2. 创建组itgroup,GID为2100。
  3. 创建目录/project/share,要求:目录属主为root,属组为itgroup,权限750;目录内新建的文件自动属于itgroup组。
  4. 在/project/share下创建文件note.txt,内容自拟,要求alice可读写,bob只可读,其他用户无权限。
  5. 设置ACL:赋予用户tom(先创建tom用户)对/project/share目录有读和执行权限。
  6. 用grep找出/etc/passwd中所有登录shell为/bin/bash的用户,将用户名写入/tmp/bashusers。
  7. 用awk提取/etc/passwd前5行中每行的第1和第3个字段,保存为/tmp/passwd5.txt。
  8. 将/etc/ssh/sshd_config备份到/backup目录下,命名为sshd_config.bak_日期。
  9. 给alice和bob配置cron任务:每天23点30分将/project/share目录打包,备份到/backup目录。

3.2 逐步操作记录与解释

第1、2步:创建组和用户

groupadd -g 2100 itgroup useradd -u 1501 -G itgroup -m -s /bin/bash alice useradd -u 1502 -G itgroup -m -s /bin/bash bob

用-G指定附加组,用户默认的主组还是自己的同名组,后面再用usermod把主组改掉。这里有个顺序问题:先用useradd创建用户,再用usermod调整主组,比一次性用-g指定主组更保险,因为-g要求目标组必须已经存在,而组往往先建。

第3步:目录权限与setgid

mkdir -p /project/share chown root:itgroup /project/share chmod 750 /project/share chmod g+s /project/share

chown root:itgroup同时改了属主和属组,chmod 750设置权限,chmod g+s设置setgid位。设置完成后,用ls -ld /project/share看一下,输出应该是drwxr-s---,注意出现了小写的s,说明setgid位生效了。这时候再在目录里touch一个新文件,用ls -l看它的属组,就会自动是itgroup,这个结果可以被作业报告截图佐证。

第4步:创建文件并设置权限

vim /project/share/note.txt chgrp itgroup /project/share/note.txt chmod 640 /project/share/note.txt

640的含义是:alice作为所有者可读写,bob作为itgroup成员只可读,其他用户无权限。因为alice和bob都属于itgroup,所以这里的组权限对bob有效。不过要注意,chmod 640对alice和bob的差异来自角色:alice是文件所有者,走owner位;bob是组成员,走group位。这两个位的权限值可以不一样。

第5步:ACL设置

useradd tom setfacl -m u:tom:r-x /project/share

tom对目录只有读和执行权限,没有写权限,意味着他可以进入目录并查看文件列表,但不能新建文件。设置完用getfacl /project/share查看,输出里会有一条user:tom:r-x,这一行就是ACL条目。如果要用tom实际验证,可以su - tom后尝试touch /project/share/testfile,系统会报Permission denied,这正好证明ACL生效了。

第6步:grep提取登录shell为bash的用户

grep 'bash$' /etc/passwd | cut -d: -f1 > /tmp/bashusers

有人会问为什么不用grep直接提取用户名,因为grep是对整行做匹配,如果你想只保留用户名,就得配合cut或awk做二次处理。这里bash$中的$是行尾锚定符,定位到/bin/bash的最后几个字符。

第7步:awk提取字段

head -5 /etc/passwd | awk -F: '{print $1,$3}' > /tmp/passwd5.txt

-F:指定冒号作为分隔符,$1是第一个字段(用户名),$3是第三个字段(UID)。注意awk默认的分隔符是任意空白字符,遇到以冒号分隔的文件必须显式指定。

第8步:带日期的备份

mkdir -p /backup tar -czvf /backup/sshd_config.bak_$(date +%Y%m%d) -C /etc/ssh sshd_config

这里用$(date +%Y%m%d)动态生成日期字符串,比如20250603,这样每次备份的文件名都是唯一的,不会被覆盖。-C /etc/ssh先切换到目标目录再打包,避免打包文件里带上一长串绝对路径。解压时就会直接生成sshd_config文件,不会把文件还原到/etc/ssh之外的路径。

第9步:配置cron

crontab -e

编辑器打开后,输入一行:

30 23 * * * tar -czvf /backup/share_backup_$(date +\%Y\%m\%d).tar.gz -C /project share

注意cron里的%需要转义成\%,否则会被cron当作换行符处理。写完后保存退出,再用crontab -l确认条目存在。等到23点30分,去/backup下看是否有新文件生成。

3.3 操作验证清单

做完所有题目之后,按照下面的清单逐条验证一遍:

验证项命令预期结果
alice的UID和组id aliceuid=1501,主组为itgroup
bob的附加组groups bobbob itgroup
目录权限ls -ld /project/sharedrwxr-s---,含s位
note.txt权限ls -l /project/share/note.txt-rw-r-----,属组itgroup
ACL条目getfacl /project/share含user:tom:r-x
bash用户列表wc -l /tmp/bashusers与grep结果一致
passwd提取文件cat /tmp/passwd5.txt5行,每行两个字段
备份文件ls /backup文件名含日期
cron任务crontab -l显示一行30 23任务

这套清单特别适合在作业报告里直接贴上,既是你的操作证据,也是自己查漏补缺的抓手。RHCSA考试里经常出现“题目要求多但验证难”的情况,养成操作完再统一验证的习惯,能少丢不少分。

4. 实战中常见的坑与排查方法

4.1 用户组相关的坑

坑1:新创建的文件属组不对。刚设置完setgid目录,新建的文件却显示属组是创建者的主组。大概率是setgid没有设置成功,或者你创建文件的位置不对,进了子目录但子目录没有继承setgid位。验证方法很简单:ls -ld /project/share看看权限位里有没有s,没有的话重新chmod g+s。

坑2:用userdel删用户删不干净。用户删除后,家目录和用户创建的临时文件还在。RHCSA考题里要求“删除用户及其所有文件”,标准做法是userdel -r 用户名,这个-r会连家目录和邮件池一起清除。如果还有进程占用该用户,会提示删除失败,先pkill -u 用户名再删,然后再用id 用户名确认用户不存在。

坑3:usermod -aG和usermod -G的区别。usermod -G itgroup alice会把alice的附加组列表重置为只有itgroup,如果alice原本还在wheel组里,就直接被踢出去了。要追加组必须加-a参数,写成usermod -aG itgroup alice。这个坑在考试里几乎每年都有人踩,每次题目说“保留原有附加组,追加到新组”,就是在考这个知识点。

4.2 权限相关的坑

坑4:ACL设置后ls -l显示的权限不直观。设置ACL后的文件如果继续改chmod,可能影响ACL中的mask值,导致原本单独授权的用户实际拿到的权限变小。比如给tom设了r-x权限,但目录的group位是---,ACL的mask会取group位和授权权限的交集,最终tom可能连读都读不了。要解决就得显式把mask调大:setfacl -m m:rx /project/share。这个知识点很绕,建议自己多实验几遍再上考场。

坑5:目录750的“执行”权限容易被忽略。有些初学者给目录设750后,发现组内用户ls /project/share反而报Permission denied,就是漏了x权限。目录的r权限只能看名字列表,想看属性(文件大小、时间戳)必须有x权限。组内要能进入目录查看文件列表,最少需要r-x组合,也就是按位是750、750、550等。写作业的时候一定要把目录和文件的权限需求分开列清楚。

坑6:chown -R遇到符号链接。如果你用chown -R alice:itgroup /project去递归修改,而/project下有一个指向外部目录的符号链接,chown -R会默认修改符号链接本身而不会跟踪它所指向的目录。这在备份、迁移场景里经常引发意外,处理复杂目录时建议用find配合-L参数做深层次递归,或者干脆先整理掉可疑的符号链接。

4.3 文本处理相关的坑

坑7:sed替换的分隔符冲突。替换路径时如果用sed -i 's//usr/local/bin//opt/tool/g',肉眼根本数不清反斜杠。换成#做分隔符就清爽多了:sed -i 's#/usr/local/bin#/opt/tool#g'。同理,awk提取包含特殊字符的字段时,可以用-F'[:/]'一次指定多个分隔符,比串联多次cut更高效。

坑8:grep正则表达式里忘记加-E。grep '(bash|sh)$' /etc/passwd如果不加-E会被当成基本正则,括号和竖线都变成普通字符,什么都匹配不到。带-E走扩展正则是新手的舒适区,但考试题有时候故意不用-E,让你只用基础正则匹配简单的字符串,这时候记住:基础正则里|是不起作用的。

4.4 Cron相关的坑

坑9:cron任务不执行。排查顺序:第一看cron服务是否在运行(systemctl status crond在RHEL系发行版上的服务名是crond);第二看crontab文件的权限——如果/etc/cron.allow存在,里面的用户才能创建cron;第三看脚本是否有执行权限,cron执行脚本不会自动给脚本加执行权限,必须chmod +x /root/backup.sh;第四看脚本环境变量,cron执行环境没有完整PATH,脚本里用绝对路径引用外部命令;最后用tail -f /var/log/cron实时观察任务是否被触发。

坑10:crontab -e保存后报错。有一些编辑器会要求写完整路径的命令,比如不写/bin/tar只用tar可能导致执行失败。最简单的解法是编辑时把所有外部命令都写绝对路径,或者脚本开头先声明export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin。

5. 做题过程中的三点心得

这一节聊聊我在实际练习里攒下的习惯,应该对RHCSA备考也有用。

第一个心得:每做完一个小题就立刻验证。很多人习惯一口气把所有命令敲完再统一验证,真出了问题根本定位不到哪一步错的。我的做法是每完成一个创建类的操作,马上执行对应的查询命令,比如创建用户后立刻id 用户名,创建目录后立刻ls -ld,写ACL后立刻getfacl。验证成本极低,但能帮你准确锁定问题面。RHCSA的考试系统也是按步骤评分的,前面的步骤错了会影响后面所有依赖它的步骤,早发现早改。

第二个心得:把作业环境当成一个小型服务器来维护。我自己练习时不会只盯着完成作业题目,还会顺手把主机名、时区、时间同步、日志轮转都配置好,把这些基础服务当成作业环境的一部分来规范管理。这些细碎的技能在考试时会形成肌肉记忆,考试时很多操作根本不需要思考,因为日常就是这么干的。

第三个心得:错题集比答案更重要。每次做错一个点,我会把当时的错误命令和正确命令并排记下来,用一行话写清楚为什么错。比如“usermod -G会覆盖原附加组,必须加-a”,这种一句话总结考前扫一遍效率非常高。RHCSA的知识点不算深,但覆盖面广,错题集恰恰适合这种以“是否掌握”为评判标准的考试模式。

到这里,RHCSA第二次作业涉及的核心内容就梳理完了。如果你正在做类似的作业题,不妨把第六节那套模拟题完整做一遍,每一步都截图留档,然后对照验证清单检查自己。做完这一遍,整个Linux基础运维的框架大概就能立起来了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询