Linux 常用操作 - RHEL
1. 系统基础配置
系统初始化是一切工作的起点。本章涵盖主机名设置、软件仓库配置、SSH 服务三个核心模块。
1.1 主机名配置
RHEL 9 使用 hostnamectl 管理三种主机名类型:静态名(static)、临时名(transient)、美观名(pretty)。RHCSA 考试及日常运维主要操作的是静态名。
# 设置静态主机名(重启后仍生效)
hostnamectl set-hostname servera.lab.example.com
# 验证三种主机名
hostnamectl
# 仅查看静态名
cat /etc/hostname
注意事项
主机名修改后立即生效,无需重启服务。
FQDN(完全限定域名)格式:hostname.domain.tld,例如 server1.example.com。
静态名写入 /etc/hostname;临时名由内核维护,重启后丢失。
1.2 软件仓库(YUM/DNF)
RHEL 9 的官方仓库分为两大部分,必须同时启用才能覆盖完整的软件包集合:
◆ BaseOS:提供核心操作系统组件,以 RPM 格式发布
◆ AppStream:提供用户态应用程序及其模块流,支持多版本共存
在订阅注册的生产环境中,使用 subscription-manager 管理仓库。在实验/离线环境中,可手动配置本地镜像源:
# 实验环境:配置本地 ISO 镜像源
# 路径请根据实际挂载点调整
cat > /etc/yum.repos.d/rhel9-local.repo << 'EOF'
[rhel9-baseos]
name=RHEL 9 BaseOS
baseurl=http://content/rhel9/x86_64/dvd/BaseOS
gpgcheck=0
enabled=1
[rhel9-appstream]
name=RHEL 9 AppStream
baseurl=http://content/rhel9/x86_64/dvd/AppStream
gpgcheck=0
enabled=1
EOF
# 清除缓存并重建
dnf clean all
dnf makecache
# 验证仓库可用
dnf repolist
生产环境建议
生产环境必须使用 subscription-manager 注册订阅,并启用 gpgcheck=1。
gpgcheck=0 仅适用于受信任的内网/实验环境,禁止用于面向公网的系统。
推荐使用 BaseURL 的 HTTPS 地址,防止中间人攻击。
1.3 SSH 服务配置
RHEL 9 使用 OpenSSH 8.x(9.x),sshd 服务的主配置文件为 /etc/ssh/sshd_config,推荐通过 /etc/ssh/sshd_config.d/ 目录下的 drop-in 文件覆盖配置,避免直接修改主文件。
实验环境快速配置(仅供测试,不建议用于生产):
# 创建 drop-in 配置文件(不修改主配置)
cat > /etc/ssh/sshd_config.d/99-lab.conf << 'EOF'
PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
EOF
# 语法检查(无报错则表示配置正确)
sshd -t
# 启用并立即启动 sshd
systemctl enable --now sshd
# 验证服务状态
systemctl status sshd
ss -tlnp | grep :22生产安全加固建议
PermitRootLogin no —— 禁止 root 直接登录,改用普通用户 + sudo。
PasswordAuthentication no —— 禁用密码认证,仅允许密钥登录。
AllowUsers 或 AllowGroups —— 限制允许 SSH 的账户白名单。
Port 2222(可选)—— 修改默认端口可减少自动扫描攻击,但需同步更新 firewalld 和 SELinux 端口标签
1.4 常用 systemctl 命令速查
操作 | 命令 |
启用并立即启动服务 | systemctl enable --now <service> |
停止并禁用服务 | systemctl disable --now <service> |
查看服务状态 | systemctl status <service> |
重启服务 | systemctl restart <service> |
重新加载配置(不中断) | systemctl reload <service> |
查看所有已失败服务 | systemctl --failed |
列出所有服务单元 | systemctl list-units --type=service |
2. 网络与安全配置
网络配置、防火墙、SELinux 是 RHEL 9 安全体系的三大支柱,也是 RHCSA 考试的高频考点。
2.1 nmcli 配置静态 IP 地址
RHEL 9 的网络管理由 NetworkManager 统一负责,nmcli 是其命令行界面。不建议直接编辑 ifcfg 文件(已被标记为 deprecated)。
# 查看当前所有连接(获取连接名称)
nmcli connection show
# 配置静态 IPv4(请将连接名换成实际名称)
nmcli connection modify "ens160" \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "114.114.114.114,8.8.8.8" \
ipv6.method ignore
# 重新激活连接使配置生效
nmcli connection down "ens160" && nmcli connection up "ens160"
# 验证
ip addr show ens160
ip route show
cat /etc/resolv.conf
nmcli 常见操作
nmcli device status —— 查看所有网络接口状态
nmcli connection add —— 创建新连接
nmcli connection delete —— 删除连接
nmcli general hostname —— 通过 NetworkManager 查看/设置主机名(与 hostnamectl 等效)
2.2 firewalld 防火墙管理
RHEL 9 使用 firewalld 作为动态防火墙管理器,底层由 nftables 驱动。核心概念:Zone(区域)、Service(服务)、Port(端口)。
基础操作:
# 查看默认区域及其规则
firewall-cmd --get-default-zone
firewall-cmd --list-all
# 永久放行 HTTP/HTTPS 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 永久放行自定义端口
firewall-cmd --permanent --add-port=8080/tcp
# 重载规则(使 --permanent 规则立即生效)
firewall-cmd --reload
# 验证规则
firewall-cmd --list-all
运行时 vs 永久规则的区别
操作方式 | 效果说明 |
不加 --permanent | 仅在当前运行时生效,重启 firewalld 或系统后丢失 |
加 --permanent | 写入配置文件,重启后仍生效;但当前会话不立即生效 |
--permanent + --reload | 写入配置且立即生效(推荐用法) |
--runtime-to-permanent | 将当前运行时规则持久化(等效于已加 --permanent) |
2.3 SELinux 安全策略
SELinux(Security-Enhanced Linux)是 RHEL 的强制访问控制系统。RHEL 9 默认使用 Enforcing 模式 + Targeted 策略。
基本状态查看与切换:
# 查看当前模式
getenforce
sestatus
# 临时切换到 Permissive 模式(不重启,仅当前会话)
setenforce 0
# 永久设置(需重启生效)—— 修改 /etc/selinux/config
# SELINUX=enforcing / permissive / disabled
端口标签管理(例如:让 Apache 监听 82 端口):
# 安装 SELinux 工具
dnf install -y policycoreutils-python-utils
# 查看 HTTP 相关端口标签
semanage port -l | grep http_port_t
# 添加端口标签(若端口不存在则用 -a;若已存在则用 -m)
semanage port -a -t http_port_t -p tcp 82
# 若提示端口已存在,使用 modify
semanage port -m -t http_port_t -p tcp 82
# 验证
semanage port -l | grep http_port_t
文件上下文标签管理(例如:自定义 Web 目录):
# 为目录设置持久化上下文标签
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
# 将标签规则应用到文件系统(还原上下文)
restorecon -Rv /data/web
# 验证
ls -Zd /data/web
布尔值(Boolean)管理:
# 列出所有与 httpd 相关的布尔值
getsebool -a | grep httpd
# 临时启用
setsebool httpd_enable_homedirs on
# 永久启用(加 -P)
setsebool -P httpd_enable_homedirs onSELinux 排错三步法
第一步:ausearch -m avc -ts recent —— 查看最近的 SELinux 拒绝日志
第二步:audit2why < /var/log/audit/audit.log —— 自动分析拒绝原因
第三步:audit2allow -a -M mypol —— 自动生成自定义策略(谨慎使用)
3. 存储管理
存储管理是 RHCSA 考试的核心模块,涉及 GPT 分区、LVM 逻辑卷管理、持久化挂载、交换空间、以及 Stratis/VDO(可选进阶)。
3.1 磁盘分区(GPT + parted)
RHEL 9 推荐使用 GPT 分区表(取代老式 MBR),使用 parted 或 gdisk 进行分区操作。
# 创建 GPT 分区表
parted -s /dev/vdb mklabel gpt
# 创建第一个分区(用于 LVM),大小 2GiB
parted -s /dev/vdb mkpart primary 1MiB 2049MiB
parted -s /dev/vdb set 1 lvm on
# 创建第二个分区(用于 swap),大小 1GiB
parted -s /dev/vdb mkpart primary linux-swap 2050MiB 3074MiB
# 通知内核刷新分区表
partprobe /dev/vdb
# 验证分区
lsblk /dev/vdb
parted /dev/vdb print
parted 参数说明
-s 表示非交互式(脚本模式),所有参数在一行内给出。
1MiB 起始保留 1MiB 用于分区对齐,提升 SSD/NVMe 性能。
set 1 lvm on 设置 LVM 标志,非强制但推荐(parted 会警告缺少标志)。
3.2 LVM 逻辑卷管理
LVM(Logical Volume Manager)是 RHEL 存储管理的基石,三层结构:PV(物理卷)→ VG(卷组)→ LV(逻辑卷)。
创建 LVM 全流程:
# 第一步:创建物理卷(PV)
pvcreate /dev/vdb1
# 第二步:创建卷组(VG),命名为 vgdata
vgcreate vgdata /dev/vdb1
# 第三步:创建逻辑卷(LV),命名为 lvweb,大小 1GiB
lvcreate -n lvweb -L 1G vgdata
# 第四步:格式化为 XFS(RHEL 9 默认文件系统)
mkfs.xfs /dev/vgdata/lvweb
# 第五步:创建挂载点并挂载
mkdir -p /mnt/web
mount /dev/vgdata/lvweb /mnt/web
# 验证
df -h /mnt/web
lvdisplay /dev/vgdata/lvweb
逻辑卷扩容(在线扩容,无需卸载):
# 方式一:-r 参数同时扩展 LV 和文件系统(推荐)
lvextend -r -L +1G /dev/vgdata/lvweb
# 方式二:手动分步扩容
lvextend -L +1G /dev/vgdata/lvweb
xfs_growfs /mnt/web # XFS 用 xfs_growfs(在线)
# resize2fs /dev/vgdata/lvweb # ext4 用 resize2fs
# 验证
df -h /mnt/web
XFS vs ext4 扩容差异(RHCSA 易错点)
XFS:只能扩大,不能缩小。扩容命令是 xfs_growfs <挂载点>(注意是挂载点,不是设备)。
ext4:可扩大也可缩小(缩小需先卸载)。扩容命令是 resize2fs <设备路径>。
lvextend -r 会自动检测文件系统类型并调用正确的扩容命令,推荐优先使用。
持久化挂载(写入 /etc/fstab):
# 获取 UUID(推荐用 UUID,设备名可能变化)
blkid /dev/vgdata/lvweb
# 写入 fstab(格式:设备 挂载点 文件系统 选项 dump fsck)
echo 'UUID=xxxxxxxx-xxxx-xxxx /mnt/web xfs defaults 0 0' >> /etc/fstab
# 验证 fstab(不重启验证挂载)
mount -a
df -h /mnt/web
3.3 交换空间(Swap)
# 方式一:使用分区(接上 3.1 中的 /dev/vdb2)
mkswap /dev/vdb2
swapon /dev/vdb2
# 方式二:使用文件创建 swap(当无多余分区时)
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 验证
swapon --show
free -h
# 持久化(写入 fstab)
echo '/dev/vdb2 none swap defaults 0 0' >> /etc/fstab
# 或对 swapfile:
echo '/swapfile none swap defaults 0 0' >> /etc/fstab
3.4 Stratis 存储管理
Stratis 是 RHEL 8/9 引入的本地存储管理解决方案,集成了存储池管理和文件系统功能,底层使用 XFS + devicemapper。RHCSA EX200 考试已将其纳入考纲。
# 安装 Stratis
dnf install -y stratisd stratis-cli
systemctl enable --now stratisd
# 创建存储池
stratis pool create mypool /dev/vdc
# 在池中创建文件系统
stratis filesystem create mypool myfs
# 查看文件系统
stratis filesystem list
# 挂载(Stratis 文件系统路径固定)
mkdir -p /mnt/stratis
mount /stratis/mypool/myfs /mnt/stratis
# 持久化挂载(必须加 x-systemd.requires=stratisd.service)
echo '/stratis/mypool/myfs /mnt/stratis xfs defaults,x-systemd.requires=stratisd.service 0 0' >> /etc/fstab
4. 用户与权限管理
用户、组、权限是 Linux 安全模型的基础。本章涵盖用户/组的增删改、文件权限、SGID 协作目录、sudo 配置、密码策略等考试高频内容。
4.1 用户与组管理
# 创建组
groupadd sysmgrs
groupadd -g 5000 dbadmin # 指定 GID
# 创建用户并加入附加组
useradd -G sysmgrs natasha
useradd -G sysmgrs harry
useradd -G sysmgrs sarah
useradd -u 3533 manalo # 指定 UID
# 批量设置密码(推荐用 chpasswd)
echo 'natasha:redhat' | chpasswd
echo 'harry:redhat' | chpasswd
echo 'sarah:redhat' | chpasswd
echo 'manalo:redhat' | chpasswd
# 验证
id natasha
getent group sysmgrs
4.2 文件权限与 SGID 协作目录
协作目录(Collaborative Directory)要求:同组成员可读写,且新建文件的属组自动继承目录属组,而非创建者的主组。实现方式是设置 SGID 位。
# 创建协作目录
mkdir -p /home/managers
# 设置属组为 sysmgrs
chgrp sysmgrs /home/managers
# 权限解析:
# 2 = SGID(新建文件继承目录属组)
# 7 = 属主:读+写+执行
# 7 = 属组:读+写+执行
# 0 = 其他:无任何权限
chmod 2770 /home/managers
# 验证(s 表示 SGID 已设置)
ls -ld /home/managers
# 输出:drwxrws--- 2 root sysmgrs ... /home/managers
特殊权限位汇总:
特殊权限 | 说明 |
SUID(4) | 仅用于可执行文件,运行时以文件属主身份执行(如 /usr/bin/passwd) |
SGID(2) | 用于目录时,新建文件继承目录属组;用于文件时,以属组身份执行 |
Sticky Bit(1) | 用于目录,只有文件属主或 root 能删除自己的文件(如 /tmp) |
4.3 sudo 权限配置
推荐使用 /etc/sudoers.d/ 目录存放自定义 sudo 规则,避免直接修改 /etc/sudoers(修改错误会导致 sudo 失效)。
# 为 sysmgrs 组授予完整 sudo 权限(无需密码)
cat > /etc/sudoers.d/sysmgrs << 'EOF'
%sysmgrs ALL=(ALL) NOPASSWD: ALL
EOF
# 语法检查(-c 仅检查不执行)
visudo -c -f /etc/sudoers.d/sysmgrs
# 验证(以 natasha 身份执行 root 命令)
sudo -u natasha sudo id
4.4 密码策略
RHEL 9 密码策略分两个层面:login.defs 控制新建账户的默认策略;chage 控制单个账户的具体有效期。RHCSA 常考的是 chage 的使用。
# 设置密码最长有效期(单位:天)
chage -M 90 natasha
# 设置密码最短有效期
chage -m 7 natasha
# 设置密码到期前警告天数
chage -W 14 natasha
# 强制用户下次登录时修改密码
chage -d 0 natasha
# 设置账户过期日期
chage -E 2026-12-31 natasha
# 查看账户密码策略
chage -l natasha
login.defs vs chage 的区别
login.defs(/etc/login.defs):影响此后新建账户的默认策略模板,对已存在账户无效。
chage:精准控制指定账户的密码有效期策略,对已存在账户立即生效,优先级高于 login.defs。
passwd -l username —— 锁定账户(在密码哈希前加 !)
passwd -u username —— 解锁账户
5. 服务与自动化
自动化是运维效率的核心。本章涵盖 cron 定时任务、systemd timer、时间同步、性能调优、以及 autofs 自动挂载。
5.1 计划任务(cron/at)
cron 用于周期性任务,at 用于一次性计划任务。
cron 表达式格式(五字段):
# 格式:分 时 日 月 周 命令
# 分:0-59 时:0-23 日:1-31 月:1-12 周:0-7(0和7都是周日)
# 示例:每天 14:23 执行
23 14 * * * /usr/bin/echo 'Hello World'
# 示例:每周一 8:00 执行
0 8 * * 1 /usr/local/bin/backup.sh
# 示例:每 5 分钟执行一次
*/5 * * * * /usr/local/bin/check.sh
# 为指定用户编辑 crontab(需 root 权限)
crontab -u harry -e
# 查看指定用户的 crontab
crontab -u harry -l
# 系统级 crontab(/etc/cron.d/ 目录,格式需加用户字段)
# 分 时 日 月 周 用户 命令