ARTICLE DETAIL

资讯详情

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

RHCSA第一次作业全指南:从虚拟机配置到SELinux与防火墙

RHCSA第一次作业全指南:从虚拟机配置到SELinux与防火墙 1. 第一次作业到底考什么别把练习当考试但考试全从练习里出很多人第一次拿到 RHCSA 作业时第一反应是“这不就是建几个用户、改几个权限、配个网络吗有什么好练的”我当初也是这么想的直到真正动手才发现RHCSA 考的不是你会不会敲某条命令而是你能否在一台干净的、可能什么软件源都没有、网络还是断开的机器上用最少的依赖把系统配置到可用状态。第一次作业的核心价值恰恰是逼你走完一遍“从零装系统到可复现配置”的完整闭环。作业清单通常长这样创建用户和组、设置密码与 sudo 权限、配置静态 IP 和主机名、挂载或准备磁盘分区、调整文件权限与 ACL、打包归档、用 find 做条件查找、确认 SELinux 和 firewalld 的状态。这些任务单独拆开看都不难但它们合在一起能暴露出大量初学者问题有人建完用户忘记加组有人配好 IP 忘记重启网卡有人做完权限修改一 reboot 全丢还有人根本分不清“服务没有启动”和“防火墙没放行”之间的区别。我的建议是拿到作业后先不要急着敲命令而是对照 RHCSA 考试目标把每个任务归类。比如用户创建对应“管理用户和组”网络配置对应“配置网络与主机名”ACL 和权限对应“控制文件访问”。这样练一遍之后你其实就已经把考试大纲里最容易出实操题的几个模块全部过了一遍。说白了第一次作业就是一次缩略版模拟考它的难度不大但它把你从“学过 Linux”拉到“能动手配置 Linux”这个状态。适合看这篇文章的人我觉得有三类一是正在上 RHCSA 课程、第一次交作业的学生二是准备考红帽认证、但还没完整练过一遍基础操作的自学者三是已经在用 Linux 但一直依赖桌面环境、很少在纯命令行下配置系统的开发或运维新人。这篇文章不替你做作业但会把作业背后的原理、容易踩的坑、做完之后怎么自查全部讲透。2. 环境准备虚拟机不装明白后面全是浮沙2.1 硬件规划与安装选项我见过太多人第一步就栽在系统安装上。RHCSA 官方考试用的是 Red Hat Enterprise Linux但平时练习你完全可以用 Rocky Linux 或 AlmaLinux 顶替两者和 RHEL 的命令行行为几乎一致。虚拟机的配置建议是CPU 给 2 核、内存给 4GB、磁盘给 40GB 到 60GB。4GB 内存不是随便给的因为安装完系统之后你很可能还要装一些软件包做测试比如 httpd、vsftpd、rsyslog 这些内存太小会导致 dnf 操作非常卡。软件选择这一步重点说一下很多人安装时选了“带图形界面的服务器”理由是“万一不会命令还能用鼠标点”。这是一个非常危险的思路RHCSA 考试操作题全部在命令行里完成你习惯了图形界面之后排错时就会本能地去找“设置按钮”而不是去看配置文件。我第一次作业就吃了这个亏配 IP 时总想着去图形界面点结果虚拟机切到字符界面后完全不知道从哪下手。所以请选择“最小化安装”这是最接近考试环境的方案。分区方案也不要偷懒用自动分区。作业里面大概率会出现“给某个目录挂载独立分区”“创建 LVM 逻辑卷”之类的题目如果你安装时用了自动分区后面这些练习操作就只能在空闲空间上重新折腾。比较稳妥的做法是/boot给 1GB/给 20GBswap给 2GB 到 4GB剩余空间留给/home或者后续 LVM 练习。这样你以后想加新挂载点还有充足的未分区空间可以用。2.2 静态 IP用 nmcli 而不是直接改文件安装完成后第一件事就是网络。RHCSA 环境里的网络配置非常关键因为后面你要用 SSH 登录虚拟机、要用宿主机浏览器访问虚拟机里的 Web 服务都需要一个稳定的 IP。RHEL 9 系列默认用 NetworkManager 管理网络你当然可以手动去改/etc/sysconfig/network-scripts/ifcfg-ens160之类的文件但那是老 Yum 时代的思路而且 NetworkManager 会在某些情况下覆盖你手写的配置。更规范的做法是用 nmcli。我用的命令基本长这样nmcli connection show nmcli con mod ens160 ipv4.addresses 192.168.122.50/24 nmcli con mod ens160 ipv4.gateway 192.168.122.1 nmcli con mod ens160 ipv4.dns 192.168.122.1 nmcli con mod ens160 ipv4.method manual nmcli con up ens160这里有个细节值得强调nmcli con mod只修改配置不会立刻生效必须nmcli con up重新激活连接。我一开始做完前五条命令后直接ping网关发现不通还以为是网卡驱动问题后来才发现是连接没有重新激活。另外如果你不确定网卡叫什么名字用ip link或nmcli device status看不要想当然以为一定叫 eth0很多虚拟机里叫 ens160 或者 ens33。主机名用hostnamectl set-hostname一条命令搞定建议取一个带域名风格的名称比如server.example.com这不仅符合考试习惯也会让你后续做证书相关练习时方便一些。2.3 软件源配置这是第一次作业里最容易被卡住的环节装完系统你会发现在没有注册 Red Hat 订阅的情况下dnf install什么都装不了因为默认仓库指向的是 Red Hat 的订阅源。解决办法有两个一是用 Rocky/Alma 的官方镜像二是用国内镜像源。给 Rocky Linux 9 配置源我一般直接写一个 repo 文件内容大概是[BaseOS] nameRocky Linux 9 BaseOS baseurlhttps://mirrors.aliyun.com/rockylinux/9/BaseOS/x86_64/os/ enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9[AppStream] nameRocky Linux 9 AppStream baseurlhttps://mirrors.aliyun.com/rockylinux/9/AppStream/x86_64/os/ enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9写完记得dnf clean all dnf makecache。这里最大的坑是漏掉 AppStream 仓库。BaseOS 里只有基础包很多像 httpd 这样的软件在 AppStream 里只配一个仓库的话装软件的时候会报“没有匹配的软件包”很多新手会误以为需要装 EPEL其实只是仓库没配全。另外我也不建议第一次作业就急着用 EPEL因为 RHCSA 考试环境中根本没有外网所有包都来自官方源。平时练习如果依赖了 EPEL考试时反而会不适应。等你把基础源用熟了再去折腾 EPEL 也不迟。提示配置完系统后立刻拍一个虚拟机快照命名为base-ready或者day1-clean。后面你无论把系统搞多乱都可以一键回到这个干净状态重新开始练习。我第一次作业没做快照结果配置 SELinux 时把系统搞到起不来只能重装系统白白浪费了两个小时。3. 用户、组与 sudo一道经典作业题里的全部细节3.1 创建用户与组的标准姿势作业里几乎必有一道“创建用户和组并设置特定属性”的题目比如创建组devops再创建用户zhangsan要求他的主组是devops附加组是wheel登录 shell 是/bin/bash。正确的操作顺序是先建组后建用户groupadd devops useradd -g devops -G wheel -s /bin/bash zhangsan passwd zhangsan这里要区分-g和-G-g指定主组一个用户只能有一个主组-G指定附加组可以写多个用逗号分隔。很多人在作业里把-g和-G搞混导致用户的主组不是题目要求的组检查时用id zhangsan一眼就看出来了。还要提醒一个特别隐蔽的坑如果你之前已经创建了用户后来发现组不对然后又执行了一次usermod -G devops zhangsan那么用户的附加组会被替换成devops原来在wheel组里的权限就没了。正确的追加方式是usermod -aG wheel zhangsan注意那个-a绝对不能少。我在改用户组时至少踩过两次这个坑一次是在作业里一次是在给新同事开通服务器权限时结果对方没有 sudo 权限问我为什么命令还是 Permission denied。3.2 sudo 的本质是“用哪个用户的身份执行”很多作业要求“让某个用户能够使用 sudo 执行任意命令”。RHEL 系默认已经给wheel组开了 sudo 权限所以只要用户属于wheel组就能直接 sudo。你可以在终端里验证su - zhangsan sudo whoami如果输出是root说明 sudo 生效。如果报错说用户不在 sudoers 文件中大概率是用户不在 wheel 组里。手动添加 sudo 权限的标准做法是编辑/etc/sudoers.d/下的文件而不是直接改/etc/sudoers比如visudo -f /etc/sudoers.d/90-cloud-init-users文件里写一行zhangsan ALL(ALL) NOPASSWD: ALL然后保存退出。注意visudo会检查文件语法建议不要用普通的vim去改 sudoers一旦语法写错sudo 会直接不可用到时候还得进单用户模式修非常折腾。刚接触 Linux 的人经常把 sudo 理解成“切换到 root”实际上它的语义是“以指定用户身份执行命令”默认指定的是 root。理解这一点之后你就能明白为什么sudo -u apache可以以 apache 用户运行命令了这在排查 Web 服务权限问题时非常有用。3.3 密码与登录 Shell 的细节passwd设置密码时默认不对输入进行回显这个很多人知道。但有几个容易忽略的点第一普通用户不能用passwd root修改 root 密码会提示权限不足第二账户锁定与解锁usermod -L和usermod -U在 RHEL 9 上不如passwd -l和passwd -u直观考试里如果要求“锁定某个账户”优先用passwd -l username第三/sbin/nologin这个 shell 是给伪用户用的比如系统服务账户如果作业要求“创建用户但不允许登录”就把他设成/sbin/nologin或者/usr/sbin/nologin。我还遇到过一个奇怪情况用useradd -m建用户后用户主目录下的.bash_profile没生效导致登录后 PATH 不完整。原因多数是用户家目录权限不对或者家目录的属主不是该用户。检查时直接ls -ld /home/zhangsan看到属主不是 zhangsan就说明建用户方式有问题。标准useradd会自动设置家目录和属主但如果你在创建用户前手动mkdir -p /home/zhangsan并chown给了别人后面再useradd时会因为目录已存在而使用现有权限问题就这么冒出来了。4. 文件权限、ACL 与查找作业中最能拉开差距的部分4.1 权限符号与数字的混合练习RHCSA 作业里最常见的权限题长这样把某个文件变成“属主可读写执行、属组可读执行、其他人无权限”并且要求递归生效到所有子目录。很多新手会直接写chmod 750然后发现目录是改了但里面的文件也变成 750这不符合题目要求。因为文件不需要“执行”权限目录需要“执行”权限才能进入所以正确答案往往是分开处理目录和文件find /data -type d -exec chmod 750 {} \; find /data -type f -exec chmod 640 {} \;如果只是处理单个目录chmod -R 750 /data省事但会造成所有文件都带上x位。虽然考试里不一定会因为多了一个执行权限而扣分但这种细节体现出你是不是真正理解目录权限和文件权限的差异。符号模式也很实用。chmod ux file、chmod go-w dir这种写法适合调整某个角色而不是整体覆盖权限。我在实际排查权限问题时几乎只使用符号模式因为相对修改比绝对赋值安全得多。你永远不会想对一个运行中的服务配置文件执行chmod 777但你可能经常需要“给属组加上读权限”。4.2 ACL解决“多个用户共同访问”问题作业一旦出现“让用户 alice 和 bob 对同一个目录有读写权限”这种要求用传统的 chmod 很难优雅实现因为传统的属主、属组、其他人三元组只能表达一个属组。这时只能用 ACLsetfacl -m u:alice:rwx /project setfacl -m u:bob:rwx /project getfacl /project有个很实用的细节setfacl -m g:devops:rwx可以对组设置权限。当你getfacl时如果发现输出里有一条mask::rwx要理解它表示“最大权限掩码”它能限制所有命名用户和命名组的实际权限。比如 mask 是r--那么即使 alice 的 ACL 项写rwx实际生效也只有读权限。这是作业里特别容易出诡异的点明明 setfacl 设置了rwx但 alice 访问文件还是被拒绝排查到最后发现 mask 把权限裁剪了。4.3 find 的常用组合与坑find 是 RHCSA 作业里的常客通常要求“查找所有属于某个用户的普通文件并删除”或者“查找最近 7 天内修改过的文件并复制到指定目录”。最常用的参数组合find /var/log -name *.log -type f -mtime -7 find / -user zhangsan -type f -exec ls -l {} \; find /tmp -size 10M -exec rm -rf {} \;我提醒两点。第一-exec后面接的命令必须以{} \;结尾那个分号是必须的。如果写成{} \或者漏掉分号命令不是报错就是行为怪异。第二-mtime -7指的是“7 天以内”-mtime 7指“超过 7 天”-mtime 7则精确指“第 7 天那一天”三者的区别一定要分清楚。很多人在作业里要找“7 天前”的文件结果写成了-mtime -7找到的全是最近修改的。4.4 硬链接与软链接一个必考、一个常考硬链接和符号链接在作业里经常同时出现。创建方式分别是ln /etc/hostname /tmp/hostname-hard ln -s /etc/hostname /tmp/hostname-soft硬链接的坑有两个第一不能跨文件系统如果你把硬链接的目标放到另一个分区系统会直接报错第二不能对目录创建硬链接超级用户也不行。这些限制听起来很理论但作业里故意让你在/home和/tmp之间做硬链接时就能立刻体会到。软链接相对灵活但它有一个安全隐患如果你把软链接放到一个目录后又用chown -R去改目录属主有时候会不小心改掉链接目标文件的属主这取决于你是否加了-h参数。chown -h只改软链接本身不加-h在某些旧版本会跟随链接修改目标。虽然 RHEL 9 默认chown不跟随软链接但你还是应该知道这个区别。4.5 tar 打包与恢复归档和压缩是第一次作业里最接近生产环境的操作。常用的命令tar -czvf /root/etc-backup.tar.gz /etc tar -xzvf /root/etc-backup.tar.gz -C /tmp/etc-restore我比较强调一个细节tar解包时默认会保留原路径如果你在根目录下直接解包它会把文件恢复到/etc下面而不是当前目录。为了避免覆盖系统里已有的/etc文件解包时一定养成-C 目标目录的习惯。这也是为什么作业里会让你把归档文件解压到/tmp而不是直接在 root 下操作。另外如果归档里包含特殊权限、ACL 或 SELinux 上下文普通tar默认不保留这些元数据你可以加--xattrs --selinux --acls参数具体取决于你的需求。RHCSA 考试虽然不要求把这些参数全部记下来但你能说出来“tar 默认不保留 ACL”这一点面试或实际工作中反而显得很专业。5. SELinux 与防火墙两个“看着没毛病却连不上”的元凶5.1 SELinux先学会看状态再决定要不要碰第一次作业里通常有一条“保证 SELinux 处于 Enforcing 模式”。我见过不少同学觉得这题简单直接就改/etc/selinux/config把SELINUXdisabled写进去了然后心想反正作业不考结果一重启系统再用getenforce一看还是 disabled然后因为安全策略不对某些服务行为变得很奇怪。RHEL 9 的 SELinux 默认 Enforcing这是正常的不需要去改。真正需要掌握的一是状态管理二是上下文修复。修改 SELinux 状态的标准命令getenforce setenforce 1 setenforce 0setenforce 0只是临时变到 Permissive重启后恢复 Enforcing适用于临时排查问题。千万不要用setenforce 0来“解决问题”这只是让你暂时绕开权限检查并不代表系统处于安全状态。SELinux 的坑主要体现在文件上下文上。比如你把一个网站目录放在/data/www然后启动了 httpd结果宿主机访问 80 端口就是 403 或者连接被拒绝。这个时候查看审计日志ausearch -m avc -ts recent你大概率会看到denied { getattr }之类的记录。解决办法不是关闭 SELinux而是给目录打上正确的上下文标签semanage fcontext -a -t httpd_sys_content_t /data/www(/.*)? restorecon -Rv /data/wwwsemanage fcontext定义规则restorecon按规则刷新上下文这两步缺一不可。如果你只跑chcon临时修改重启之后 SELinux 会重新标记回来。那个/data/www(/.*)?的正则后缀也很关键它保证目录内所有文件都能匹配到否则只有目录本身标签正确里面的文件还是default_t一样会被拒绝。5.2 firewalld端口放行不是改完配置文件就结束防火墙这块作业里常见操作是“确保某个服务可以被远程访问”。如果你用 dnf 安装了 httpdsystemctl enable --now httpd启动服务之后从宿主机访问虚拟机的 IP大概率是连不上的。原因很可能是 firewalld 默认没有放行 80 端口。正确操作systemctl status firewalld firewall-cmd --permanent --add-servicehttp firewall-cmd --reload firewall-cmd --list-all注意--permanent参数表示写入持久化配置--reload让正在运行的防火墙重新加载配置。如果你只加了--permanent而不 reload规则不会立即生效如果只临时--add-servicehttp不加--permanent重启后又丢。我建议你在练习时故意先写一个错误的规则顺序观察现象再改正这样印象最深。比如先firewall-cmd --add-servicehttp不持久化reload 之后再看--list-all发现 80 端口不在了才理解为什么说了“临时生效”却不持久。5.3 排查链路端口通了服务在跑为什么还是连不上“连不上”是第一次作业里最常见的问题也是最锻炼排查思路的场景。我的排查顺序固定为先网络、再服务、再防火墙、最后 SELinux。第一步在虚拟机上ping一下网关确认物理链路没问题。第二步systemctl status httpd看服务是否 active再ss -tlnp | grep :80看端口是否真的在监听。第三步用curl http://localhost本地访问确认服务本身正常。第四步看 firewalld 放行规则firewall-cmd --list-all里有没有 http 服务或 80 端口。第五步看 SELinuxgetenforce如果是 Enforcing就看ausearch -m avc -ts recent。每一步都有对应的“为什么”本机 curl 通而外部不通通常是防火墙或 SELinux 问题本机 curl 都不通那就先看服务进程和端口。这套链路熟练之后不光作业能过实习时遇到线上服务访问不了也能稳住心态按顺序一步步查。6. 交作业前的一小时自查清单与验收命令6.1 最大禁忌配置完不重启第一次作业最容易翻车的地方是“当前会话里一切正常重启之后全没生效”。很多配置是实时生效的比如sysctl -w vm.swappiness10只修改内核运行时参数写入/etc/sysctl.conf才能持久化。systemctl start httpd和systemctl enable httpd的区别也是同样道理前者只管当前后者负责开机自启。所以我的自查流程永远是先reboot一次然后逐项检查。你可以在重启前先整理一份检查清单ip addr show # 静态 IP 是否保留 hostnamectl # 主机名是否保留 getenforce # SELinux 是否 Enforcing systemctl status firewalld # 防火墙是否自启 id zhangsan # 用户、组、附加组是否正确 sudo -l -U zhangsan # sudo 规则是否生效 find /data -maxdepth 2 -type d -ls # 文件和目录权限是否正确 getfacl /project # ACL 是否保留重启后再跑一遍这些命令如果全部正常你的配置才是真正“落地”了。6.2 用日志反推自己做过什么新手最容易忽略的一个工具是journalctl。当你忘了自己刚才到底改了什么或者某个操作报错但没有记录时去查日志比瞎猜高效得多。比如启动服务失败直接journalctl -xe这个命令会显示最近的系统日志并且在报错上下文里给出可能原因。如果你要做比较“重”的操作比如安装一堆软件包还可以看 dnf 历史dnf history dnf history info 3这条命令能告诉你第 3 次事务安装和移除了哪些包能帮你快速定位是不是某个依赖包被误删导致服务起不来。6.3 模拟考试自测十分钟限时练习交作业前我强烈建议你给自己出一套 10 分钟的迷你模拟题覆盖以下操作创建用户和组、设置 sudo、修改文件权限、设置 ACL、查找特定文件、打一个 tar 包、启动一个服务并放行防火墙端口。做完之后立刻重启再逐项验证。这种“低压力模拟考”能有效发现你在真实考试时可能出现的低级失误。我做过一个统计在没有限时的情况下完成这些操作大概需要 20 分钟一旦限时 10 分钟错误率会明显上升。原因不是操作变难了而是人在紧张时会忘记验证明细检查步骤比如建完用户忘了id验证配完 IP 忘了nmcli con up。所以平时练习就养成“每敲一条关键命令立刻验证结果”的习惯考试时自然就不慌。7. 做完第一次作业后我想说的几件事第一次作业对我来说最大的收获不是把命令背熟了而是建立了三个思维习惯。第一一切配置都要问“重启之后还在不在”。这个习惯让我后来排查生产服务器时不会只盯着进程列表而是会先看它有没有注册成 systemd 服务。第二报错信息不是要背的是要“读”的。很多新手遇到 Permission denied 就不知道怎么办但如果你真的去看/var/log/messages和journalctl你会发现系统日志已经把原因写得明明白白。第三也是最重要的做完一步就验证一步不要把一堆操作堆到最后再一起测。否则一旦出错你根本不知道是哪一步引入的问题排查成本高到让人想放弃。如果你正在做 RHCSA 第一次作业我的建议是你现在就去把虚拟机快照打好然后把上面每一节的操作从头到尾至少练三遍。第一遍照着敲第二遍不看笔记独立敲第三遍限时完成并且重启验证。三遍之后你会发现那些看起来复杂的命令已经变成了手指的条件反射。等你真正走进 RHCSA 考场时你拼的不是智商而是肌肉记忆和排查思路。祝顺利。
返回列表