最近有朋友问我,RHCSA认证到底在考什么,是不是只背几条命令就能过。说实话,能这么问的人多半还没真正上手敲过RHEL系统。RHCSA的全称是Red Hat Certified System Administrator,它考的不是你记了多少参数,而是你能不能在一台刚装好的RHEL机器上,像一名合格的系统管理员那样,把系统基础配置做完、做对。这份考试195道题左右的题量,3个小时的限时,覆盖的内容从主机名、网络、软件包、存储、用户权限、SELinux,到systemd服务管理,全部是日常工作里最常用的操作。与其说是考试,不如说是一次贴近真实生产环境的动手能力检验。
这篇文章,我准备结合自己的备考和实践经验,把RHCSA里"基本配置操作"这一整块掰开揉碎。不聊虚的,直接讲我在真实环境里怎么操作、为什么这么做、哪些坑每次重装系统都会踩,希望对你备考或者日常维护服务器都有参考价值。
1. 从零初始化一台RHEL 9:安装阶段就要想清楚的配置
很多备考教程默认你已经有了一台安装好的虚拟机,然后直接开始敲命令。这个思路其实是回避了最关键的第一步——安装阶段的选择,直接决定了你后面要做多少补丁式操作。
1.1 安装时的软件包选择,决定你后面省多少事
安装RHEL 9或Rocky Linux 9这类Red Hat系系统时,在软件包选择界面会有一个"Software Selection"选项。默认往往是"Server with GUI",也就是带图形界面。但对于RHCSA备考和真实服务器运维,请务必选择最小化安装。
为什么?道理很简单:RHCSA考试环境里,自动化评分脚本关注的是服务状态、配置文件内容、用户权限这些东西,而不是你桌面图标好不好看。最小化安装少了大量图形组件,系统启动更快、占用内存更少,关键是能逼着你自己动手处理那些图形界面里一键完成的事——比如配网卡、改主机名、装软件。这些恰恰是考试重点。
我个人的习惯是在安装阶段做三件事:
1. 在 Installation Destination 里手动配置分区,而不是直接接受 Automatic 2. 在 Network & Host Name 里提前设置好静态IP和主机名 3. 软件选择里选 Minimal Install第一件事尤其重要。RHCSA考试题目中常常要求"创建逻辑卷,格式化并挂载",但如果你安装阶段用的是自动分区,磁盘分配逻辑完全不透明,后面做LVM题时可能连卷组空间都看不清。手动分区可以让 /boot、swap、/ 的位置清清楚楚,后续题目要求"将新加的磁盘做成LVM"时,你能一眼看出哪些是系统盘,哪些是考试专用空盘。
1.2 网络配置在安装阶段做掉,后面少踩一半坑
安装向导的 Network & Host Name 界面,默认网卡是DHCP方式。很多人图省事直接下一步,进系统后才发现IP地址飘忽不定,或者重启之后主机名被还原。这个坑我踩过不止一次。
正确的操作是:安装界面选中网卡,点 Configure,在 IPv4 Settings 里把 Method 改成 Manual,然后填入静态IP、子网掩码、网关、DNS。主机名也在这里直接改成一个符合考试规范的名称,比如server1.example.com这种带域名的格式。这样进入系统后,网络文件和主机名配置文件就已经就绪,后续题目只需要做局部微调即可。
RHEL 9 的默认网络管理工具是 NetworkManager,配置文件路径在/etc/NetworkManager/system-connections/下,是一个以网卡名命名的.nmconnection文件。安装阶段做的配置,最后会落在这个文件里。你完全可以用nmcli connection命令验证,也可以直接编辑这个文件,然后用nmcli connection reload重载。
2. 系统初始化的第一组命令:主机名、时区、语言环境与内核参数
装完系统,SSH登进去,这才算真正进入"基本配置操作"的战场。下面这些操作,几乎是每台新服务器都要走一遍的流程,也是RHCSA考试的高频区。
2.1 永久修改主机名,别再用hostname命令了
hostname命令可以直接查看当前主机名,也能临时修改。但临时修改只在当前会话里生效,一重启就全部还原。正确做法是用hostnamectl。
hostnamectl set-hostname server1.example.com hostnamectl set-hostname --static server1.example.com这里有一个容易忽略的细节:hostnamectl set-hostname会同时更新/etc/hostname文件和 systemd 的主机名记录,包括 transient(瞬时)、static(静态)、pretty(可读)三类。如果你只想改静态主机名,加上--static参数更稳妥。
另一个常见问题是,主机名改成带域名的完整FQDN后,有些人忘记在/etc/hosts里加映射,结果部分服务启动时解析不到自己的主机名。建议在/etc/hosts中加上类似下面这行:
127.0.0.1 server1.example.com server1ping server1时能解析到回环地址,很多依赖主机名解析的组件(比如某些数据库和消息队列)就会安静很多。
2.2 时区与时间同步,RHCSA里隐藏的送分题
时区配置用timedatectl,这个命令的底层调用的是 systemd 的 timedated 服务。RHCSA 考试通常要求你把系统时区设置为Asia/Shanghai或UTC,操作非常简单:
timedatectl set-timezone Asia/Shanghai timedatectl status关于时间同步,RHEL 9 默认启用了chronyd这个NTP客户端,而不是老旧的ntpd。考试经常会让考生确认NTP同步是否启用,或者指定NTP服务器。相关操作:
systemctl enable --now chronyd chronyc sources -v有时你会遇到timedatectl status里显示NTP synchronized: no,这时候多半是 chronyd 没启动,或配置文件/etc/chrony.conf里的 server 地址不可达。把 server 行改成server 0.rhel.pool.ntp.org iburst,重启 chronyd 就能解决。
2.3 语言环境和内核参数,这类配置别忽略
语言环境的修改相对冷门,但题目里出现过。全局语言文件是/etc/locale.conf,可以用localectl查看和修改:
localectl set-locale LANG=en_US.UTF-8内核参数的持久化配置,是所有RHCSA考生都绕不开的点,尤其是网络相关的参数。sysctl是查看内核参数的接口,/etc/sysctl.conf和/etc/sysctl.d/*.conf是持久化配置目录。
例如,要求开启IPv4转发:
sysctl -w net.ipv4.ip_forward=1 echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/98-forwarding.conf sysctl --systemsysctl -w是临时的,重启失效;写入/etc/sysctl.d/下的配置文件并执行sysctl --system重载,才能真正持久化。这是考试里一个标准的"为什么"考察点,也是生产环境下配置内核参数的正确姿势。
3. 网络配置的两种姿势:nmcli 与配置文件直接编辑
RHCSA考试的网络配置题,大致可以分为两类:基础连通性配置和高级网络配置。前者就是配置静态IP、网关、DNS,后者可能涉及网卡绑定(bond)、网络桥接(bridge)、VLAN等。
3.1 用 nmcli 完成静态IP配置的标准流程
nmcli是 NetworkManager 的命令行客户端,RHEL 9 中使用最频繁。以一个典型场景为例:当前网卡是ens160,动态获取IP,现在要改成静态192.168.1.100/24,网关192.168.1.1,DNS8.8.8.8。
nmcli connection modify ens160 ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 8.8.8.8 nmcli connection up ens160这个流程里有几个地方特别值得注意:
ipv4.method manual这一步不能少。如果只设置了 addresses 而忘记把 method 改成 manual,NetworkManager 可能仍然使用 DHCP,你会看到IP一直是原来的地址。- 修改后用
nmcli connection up ens160激活,up 操作会重读配置并使连接生效。 - 如果提示
Connection 'ens160' is not active,先nmcli connection看连接名,网卡名和连接名在部分环境下并不一致。考试中如果用nmcli connection modify修改的标识符写错,会提示unknown connection,这时用nmcli connection show查看列表即可。
3.2 通过配置文件修改网络,关键字段一个都不能少
如果你更喜欢直接编辑配置文件,路径是/etc/NetworkManager/system-connections/ens160.nmconnection(注意RHEL 9的网络安全策略,该文件默认权限是600,只有root能看到内容)。文件内容大致如下:
[connection] id=ens160 type=ethernet interface-name=ens160 [ipv4] method=manual address1=192.168.1.100/24,192.168.1.1 dns=8.8.8.8;编辑完文件后需要执行:
nmcli connection reload nmcli connection up ens160这里有一个新手频繁踩坑的点:直接编辑.nmconnection文件后,忘记reload,然后发现ip addr里还是旧IP,误以为自己改失败了。实际上 NetworkManager 不会像老式ifcfg一样主动重读文件,必须用nmcli connection reload命令通知它。
注意:在RHEL 8及以后版本中,
/etc/sysconfig/network-scripts/下的 ifcfg 文件已经不再推荐使用,NetworkManager 的 keyfile 格式是默认配置方式。考试环境可能是RHEL 9,千万别再用vi /etc/sysconfig/network-scripts/ifcfg-eth0的方式去改了,改了也不生效。
3.3 网卡命名与IP冲突的排查经验
实际考试或工作中,网络配置完成后ping不通是一个高频故障。我的排查链路通常是这样:
# 第一步:看网卡状态 nmcli device status ip addr show # 第二步:看路由 ip route show # 第三步:看DNS解析 cat /etc/resolv.conf getent hosts server2.example.com # 第四步:确认NetworkManager托管 nmcli networking大多数时候问题出在网关配置错误,或者 DNS 服务器写错导致域名解析失败。还有一个隐蔽问题:如果系统里存在多个网卡且连接名称和网络名称不一致,NetworkManager 可能会在激活时把路由策略弄乱,表现为"能ping通IP,但ping不通域名"。这时候优先检查/etc/resolv.conf是否被 NetworkManager 接管,如果存在search行,但不影响解析,也不用过度紧张。
4. 用户与权限管理:group、sudo、密码策略一个都不能少
RHCSA考试里,用户创建、组成员添加、权限修改占了相当大的分值。这些操作看着简单,但它是整个系统权限体系的基础,一旦做错,后面的很多题(比如基于ACL的授权、文件归属)都会连锁出错。
4.1 批量创建用户和组的正确姿势
假设要求:创建用户alice,属于组rht,附加组devops,UID设为 2050,登录Shell为/bin/bash,并且设置密码。
推荐的命令是:
groupadd rht groupadd devops useradd -u 2050 -G devops -g rht -s /bin/bash alice echo 'password123' | passwd --stdin alice这里说明几个细节:
-G devops是附加组,-g rht是主组。区分这两个概念是RHCSA的常考细节,考试题目如果写"secondary group",你别把它当主组处理。- 使用
passwd --stdin可以从标准输入读取密码,适合脚本化设置。但生产环境更推荐用chpasswd命令:echo 'alice:password123' | chpasswd。两者效果等价,但chpasswd在处理批量用户时更高效。 - 如果考试要求"用户不能有密码过期",需要执行
chage -M 99999 alice,或者直接passwd -x -1 alice。chage -M -1表示密码永不过期,在RHEL 9中仍然有效。
用户创建完成后,务必检查/etc/passwd、/etc/group、/etc/shadow三条记录是否相互匹配。我见过很多人在考试里创建完用户,但忘记指定主组,结果id alice显示的组和题目要求的不一致。
4.2 sudo授权与wheel组权限的关系
RHEL 9 默认的 sudo 配置中,wheel组的成员拥有全部权限。因此,给用户提权的一种方式是:
usermod -aG wheel alice但如果考试明确要求"允许 alice 无需密码执行所有命令",就需要在/etc/sudoers.d/下新建一个文件,比如/etc/sudoers.d/alice:
alice ALL=(ALL) NOPASSWD: ALL这里保存文件必须用visudo -c校验,或者用visudo编辑器直接编辑/etc/sudoers.d/下的文件。很多人习惯直接echo重定向,这没问题,但一定要确认权限是0400或0440,文件所有者为root,否则sudo会拒绝加载。
4.3 文件权限、属主属组和隐藏权限位
对于基础的文件权限,常用的组合是:
touch /home/alice/test.txt chown alice:rht /home/alice/test.txt chmod 750 /home/alice/test.txt注意chown支持同时修改所有者和属组,用冒号分隔,不要写成chown alice:alice如果不是题目要求的话。
除了普通的rwx权限,RHCSA里还常考特殊权限位:
- SUID(
chmod u+s file):以文件所有者身份执行。 - SGID(
chmod g+s dir):目录内新建文件的属组继承目录属组。 - Sticky Bit(
chmod +t /shared_dir):目录内文件只能被所有者或root删除,/tmp就是典型例子。
检查特殊权限位用ls -l,能看到rws、r-xr-s、rwxr-xr-t这样的标识。如果某文件要求去掉SUID,用chmod u-s file。这些操作看起来琐碎,但每一条都可能对应考试里的一道独立题目。
4.4 ACL授权:getfacl与setfacl的实战
RHCSA对ACL的要求是"能对文件/目录设置附加权限,并验证"。最典型的需求:让alice对/srv/data目录内所有文件有读写权限,但不改文件和目录的所有者。
setfacl -R -m u:alice:rwx /srv/data getfacl /srv/data-R递归,-m修改ACL,u:alice:rwx是用户ACL条目。设置完成后用getfacl验证,能看到类似:
user:alice:rwx如果要对默认ACL(新文件自动继承)做设置:
setfacl -m d:u:alice:rwx /srv/datad:前缀表示default ACL。没加d:时只对当前目录有效,新建文件不会继承ACL,这是很多人容易忽略的点。
5. 软件包与存储基础:从yum/dnf到LVM实操
RHCSA题库里,软件包管理和存储操作向来是重头戏。这两块内容单独拿出来可以各写一整篇,这里只讲作为基本配置环节必须掌握的核心动作。
5.1 dnf的常用增删查改
RHEL 9的包管理工具是dnf,兼容旧的yum命令习惯。核心操作:
dnf install -y httpd dnf remove -y httpd dnf search keyword dnf info httpd dnf list installed | grep httpddnf install的-y很重要,考试环境非交互式操作时不加-y会卡住等待确认。如果题目要求从指定repo安装,可以临时指定:
dnf install --enablerepo=appstream httpd注意,RHEL 9 默认启用的repo是rhel-9-for-x86_64-baseos-rpms和rhel-9-for-x86_64-appstream-rpms。考试如果要求配置本地repo源,修改/etc/yum.repos.d/*.repo文件时记得设置gpgcheck=0或导入对应GPG密钥,否则dnf install会报GPG校验失败。
另外一个高频考点是dnf group install:
dnf group install -y "Development Tools"查看已安装组用dnf group list。这个命令在你需要一次性安装编译工具链、且不想逐条敲几十个包名时非常高效。
5.2 磁盘分区、格式化、挂载这条主链路
RHCSA存储题的基本链路是:新磁盘 -> 分区 -> 格式化 -> 挂载 -> 配置开机自动挂载。
这里以一块/dev/sdb为例:
# 创建GPT分区表并新建分区 parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary xfs 1MiB 100% # 查看分区是否生成 lsblk /dev/sdb # 格式化 mkfs.xfs /dev/sdb1 # 挂载 mkdir -p /mnt/data mount /dev/sdb1 /mnt/data # 开机自动挂载 echo '/dev/sdb1 /mnt/data xfs defaults 0 0' >> /etc/fstab mount -a这个链路里最容易出问题的环节是parted命令的输出和分区大小定义。RHEL 9中也可以用fdisk完成同样工作,但fdisk对超过2T磁盘和GPT分区需要加g指令,parted更直观。
关于fstab有几个必须记住的要点:
- 每行6个字段:设备、挂载点、文件系统、挂载选项、dump备份标记、fsck检查顺序。
- 第6个字段
0 0表示不执行fsck检查,根分区通常是1 1,其他分区一般是0 2。 - 用UUID而不是设备名,可以避免因设备识别顺序变化导致的挂载失败。获取UUID用
blkid /dev/sdb1,然后fstab中写成UUID=xxxx /mnt/data xfs defaults 0 0。
mount -a命令是验证 fstab 配置是否正确的最佳方式,执行后如果没有任何报错,说明配置基本没问题。
5.3 LVM逻辑卷的创建与扩容,别再把物理卷和卷组搞混
RHCSA考试对LVM的要求很明确:创建物理卷(PV)、卷组(VG)、逻辑卷(LV),格式化挂载,然后扩容。
以一个典型题目为例:在/dev/sdc上创建物理卷,创建卷组myvg,创建逻辑卷mylv,大小300MB,格式化ext4,挂载到/mnt/lvdata。
pvcreate /dev/sdc vgcreate myvg /dev/sdc lvcreate -L 300M -n mylv myvg mkfs.ext4 /dev/myvg/mylv mkdir -p /mnt/lvdata mount /dev/myvg/mylv /mnt/lvdataLVM的关键是理解层级关系:
pvcreate把物理磁盘初始化为物理卷。vgcreate把物理卷聚合成卷组,卷组相当于一个统一的存储池。lvcreate从卷组中切出逻辑卷,逻辑卷是一个块设备,路径是/dev/卷组名/逻辑卷名。
扩容逻辑卷的完整链路:
# 扩展到500M lvextend -L 500M /dev/myvg/mylv # 如果卷组空间不够,先加物理卷 vgextend myvg /dev/sdd # 扩容文件系统 xfs_growfs /mnt/lvdata # 如果是xfs resize2fs /dev/myvg/mylv # 如果是ext4这里有一个特别多人踩的坑:lvextend之后文件系统大小并没有自动变化。XFS文件系统要用xfs_growfs 挂载点,ext4要用resize2fs。如果文件系统和扩容命令不匹配,会直接报错 "unsupported filesystem" 或者干脆文件系统改不了。考试中判断文件系统类型可以用blkid /dev/myvg/mylv查看。
5.4 自动挂载超时与挂载选项检查
考试也可能会让你验证某个挂载点是否以只读方式挂载,或者在系统中配置noauto等参数。标准做法是:
mount -o ro /dev/sdb1 /mnt/readonly grep /mnt/readonly /proc/mounts注意/proc/mounts显示的是当前实际生效的挂载选项,而不是 fstab 中的配置。当 fstab 中的选项与实际挂载选项不一致时,以/proc/mounts为准。这是排查"我明明在fstab里写了rw,为什么挂载出来是ro"这类问题的重要思路。
6. systemd服务管理:设置开机自启和熟练查看服务状态
RHCSA对服务管理的要求集中在 systemd 上。它替代了老旧的 SysV init 脚本,是RHEL 7之后所有服务控制的基础。
6.1 永久启用服务:enable --now 才是最省事的组合
安装完一个服务(如httpd),考试通常要求"启动服务并设置开机自启"。两个命令可以分开敲:
systemctl start httpd systemctl enable httpd更推荐直接组合:
systemctl enable --now httpdenable --now的含义是创建符号链接(开机启动项)并立即启动服务,也就是说它同时完成了 enable 和 start 两步。而systemctl start如果写成systemctl restart,会先停再启,导致服务短暂中断,生产环境不要随便restart。
服务无法启动时的排查链路:
systemctl status httpd journalctl -u httpd -n 50 ss -tlnp | grep :80journalctl配合-u参数可以过滤出某个服务的日志,-n 50只看最后50条。80%的服务启动失败都可以通过日志找到根因,比如端口被占用、配置文件语法错误、SELinux阻止等。
6.2 使用 systemctl 管理多个服务与 target
target 是 systemd 中的一组服务的集合,RHEL 9 默认的启动目标是multi-user.target(命令行)或graphical.target(带图形)。
systemctl get-default systemctl set-default multi-user.target考试如果想让你"默认启动到命令行",这就是标准操作。调试时设置临时启动目标可以用systemctl isolate rescue.target,进入救援模式,类似于单用户模式。
还有一个隐藏考点:如何在开机启动时执行自定义脚本。标准做法是写一个 systemd unit 文件放在/etc/systemd/system/下,而不是丢一堆命令进/etc/rc.local。RHEL 9 虽然保留了/etc/rc.d/rc.local,但其 enable 状态默认为关闭。如果你要使用 rc.local,必须先执行:
chmod +x /etc/rc.d/rc.local systemctl enable rc-local否则你会发现,即使rc.local里写了脚本,重启后也不执行。
6.3 定时任务与日志轮转,基础运维的必备操作
RHCSA对 crontab 的考察频率中等,但属于"基本配置操作"范畴。修改当前用户的定时任务:
crontab -e写入任务行格式:
分 时 日 月 周 命令 */5 * * * * /usr/bin/echo "hello" >> /var/log/mytest.log如果题目要求为某个用户创建定时任务,用crontab -u username -e。注意crontab命令的持久化存储在/var/spool/cron/username文件中,直接编辑这个文件也是可行的,但更推荐使用crontab -e,因为它会检查格式合法性。
日志轮转使用的是 logrotate,配置在/etc/logrotate.d/下。如果题目要求"每天轮转 /var/log/myapp.log,保留7天",创建/etc/logrotate.d/myapp:
/var/log/myapp.log { daily rotate 7 compress missingok notifempty }配置完成后可以执行logrotate -d /etc/logrotate.conf做调试模式检查。
7. SELinux的强制模式与基本上下文配置,这块不搞懂后期必炸
SELinux 在RHCSA里既是重点又是难点,尤其是当服务被SELinux拦截时,那种"配置明明全对但就是不通"的挫败感,几乎每个初学者都经历过。基本配置操作层面,你需要掌握三种模式、查看状态的方法,以及通过修复文件上下文或布尔值来让服务正常工作。
7.1 三种模式与状态持久化
SELinux 有三种模式:
Enforcing:强制模式,违反策略的操作会被拒绝并记录日志。Permissive:宽容模式,违反策略的操作只会记录日志,不阻止。Disabled:禁用模式,完全关闭SELinux。
查看和修改当前模式:
getenforce setenforce 0 # 临时切换为Permissive(0),1表示Enforcing持久化修改需要编辑/etc/selinux/config:
SELINUX=enforcing改完后要重启才能生效。setenforce命令只能临时改变当前模式的运行状态,它不能修改配置文件。考试里如果明确要求"系统重启后仍然保持Permissive",只敲setenforce 0是不行的,必须同时改配置文件。如果getenforce显示Disabled,则说明SELinux处于关闭状态,只能通过设置配置文件并重启来恢复。
7.2 文件上下文与httpd被拦截的典型故障
一个经典场景:网站代码放在/srv/myweb目录下,但httpd服务总是返回403或被拒绝连接。此时用ausearch -m avc -ts recent查询AVC日志,大概率会看到类似denied { read } for comm="httpd"的记录,这说明SELinux允许/拒绝规则拦截了httpd对目录的访问。
默认情况下,httpd只允许读取带httpd_sys_content_t上下文的目录。你的/srv/myweb上下文是var_t或default_t,所以被挡。修复办法不是关闭SELinux,而是修正上下文:
semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?" restorecon -Rv /srv/mywebrestorecon -Rv会递归重读目录上下文。验证上下文用的是ls -Z /srv/myweb,能看到类型标签是否变成了httpd_sys_content_t。
提示:
semanage命令属于policycoreutils-python-utils包。最小化安装默认没有这个包,如果执行semanage提示command not found,先dnf install -y policycoreutils-python-utils。
7.3 布尔值和端口上下文,SELinux中的进阶基本操作
有些场景里,文件上下文正确但服务仍然被拦,这时候要考虑SELinux布尔值。比如允许 httpd 通过网络访问其他服务的连接、允许httpd写用户主目录,都需要开布尔值。
getsebool -a | grep httpd setsebool -P httpd_can_network_connect on-P参数表示persistent,即持久化到配置文件。不加-P的话重启就恢复原状,这是最容易踩的坑。
另一个常见操作是开放非标准端口给特定服务。比如让 httpd 监听8080端口,SELinux默认只允许httpd绑定80和443等标准端口,此时需要修改端口上下文:
semanage port -a -t http_port_t -p tcp 8080做完之后再启动服务,就不会出现Permission denied的绑定错误了。这些配置是RHCSA考试中的"隐形关卡",你觉得配置逻辑毫无问题,其实问题全在SELinux的上下文和布尔值上。
8. 防火墙固定规则与服务放行,别让firewalld成为最后一个障碍
RHEL 9 默认防火墙是 firewalld,它是动态防火墙管理器,管理内核默认防火墙框架的规则。RHCSA对防火墙的要求不算深,但要能放行/阻断服务、端口或协议。
8.1 基本放行操作与运行时/永久配置的区别
放行 http 服务:
firewall-cmd --add-service=http firewall-cmd --runtime-to-permanent如果只执行--add-service=http,规则只在当前运行时生效,重启后丢失。--runtime-to-permanent把当前运行时规则固化到永久的配置文件中。等效的永久命令是:
firewall-cmd --permanent --add-service=http注意:--permanent只写入配置文件,不会立即改变当前生效的规则。所以要么你用了--permanent后执行firewall-cmd --reload,要么先用--add-service再--runtime-to-permanent,两种方式都行,但别混用导致规则缺失。
放行端口,比如允许TCP 8080:
firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload查看当前所有生效规则用:
firewall-cmd --list-all输出里包含了services:和ports:两行,这个信息在验证规则的场景里很关键。
8.2 富规则与ICMP屏蔽
如果要对来源IP做限制,需要更高级的规则。比如只允许192.168.1.0/24访问SSH:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' firewall-cmd --reload如果要屏蔽来自某个IP的所有连接:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" drop' firewall-cmd --reloadICMP(ping)屏蔽,考试偶尔出:
firewall-cmd --permanent --remove-icmp-block=echo-request firewall-cmd --reload这里的逻辑是,默认防火墙不阻止ICMP,如果需要阻止就在icmp-block-inversion中处理。我见过有人为了屏蔽ping,直接firewall-cmd --add-icmp-block=echo-request,结果发现怎么也删不掉,原因就是没有理解--remove-icmp-block的用法。
9. 排错思路总结:从头到尾走一遍RHCSA基本配置操作链
文章写到这里,该做个实操层面的总结。RHCSA的基本配置操作,从来不是孤立的命令背诵,而是环环相扣的系统状态管理。我在练习时最常做的一件事,就是模拟一个从零开始的环境,然后按下面的脉络全部走一遍:
# 1. 系统标识与时区 hostnamectl set-hostname station.example.com timedatectl set-timezone Asia/Shanghai # 2. 网络连通性 nmtui 或 nmcli 配置静态IP ping -c1 gateway # 3. 用户与权限 useradd + passwd + groupadd + usermod sudo配置 setfacl # 4. 存储与挂载 lsblk parted / fdisk mkfs mount + fstab + mount -a # 5. 软件与服务 dnf install systemctl enable --now ss -tlnp # 6. SELinux与防火墙 getenforce ls -Z semanage fcontext / restorecon setsebool firewall-cmd每做完一批操作,就切换到普通用户去验证一下:能不能按预期访问目录?服务是否重启后仍然在线?挂载点是否可写?这种"从配置到验证"的闭环,比单纯把命令跑一遍有价值得多。
10. 我的几个实操小技巧与最后提醒
最后聊点经验之谈。我发现初学者最常见的错误并不是命令记不住,而是不读提示信息。当你执行mount -a报错、systemctl start httpd返回失败提示、getenforce显示非预期结果时,第一反应应该是仔细看终端上最后几行输出,再查/var/log/messages或journalctl。很多所谓"玄学问题",日志里都写得明明白白。
另一个技巧是善用tab补全和man页面。RHCSA考试虽然是命令行环境,但redhat官方考试并没有禁止使用man。平时练习时,多查man 5 fstab、man 5 selinux_config、man nmcli这类手册,能记住很多命令行之外的关键细节,比如fstab的存储格式、SELinux相关配置项的写法。
再分享一个小习惯:每台新机器配置完,我都会做一次重启,然后检查几个关键状态——ip addr、systemctl list-units --failed、getenforce、df -h。重启是找回隐藏问题的最佳方式,因为很多配置只在开机阶段加载一次,运行时不报错不代表重启后没问题。备考阶段更应该多练"重启后依然正确"这个环节。
RHCSA的基本配置操作并不花哨,它的难度在于对系统默认行为和配置生效机制的熟悉程度。把上面这些内容练熟、练透,再去看那些更复杂的题目(网络绑定、系统调优、容器基础等),你会觉得底层逻辑全部通顺了。