1. 课程导入与安全基线认知

在开始动手加固任何一台 RHEL 服务器之前,先要回答一个更基础的问题:我们凭什么判断一台服务器"安全"?如果只凭个人经验逐条检查,不同管理员对同一台机器可能给出完全相反的结论。安全基线(Security Baseline)正是为了解决这个问题而存在的——它把"一台服务器应该处于什么状态"从主观判断变成可度量、可复核、可审计的客观标准。

什么是 RHEL 安全基线

安全基线是一组针对特定操作系统版本、特定业务角色预先定义好的安全配置要求集合。对 RHEL 而言,它通常覆盖账户与口令策略、文件系统权限、服务与端口暴露面、内核参数、日志与审计、软件包完整性、SSH 与 PAM 配置等维度。每一条要求都应当具备三个要素:可检查(有明确的判定命令或文件路径)、可判定(有明确的通过/不通过阈值)、可修复(有对应的配置动作)。缺少任何一项,这条要求就只是"建议",无法进入基线。

以口令策略为例,一条合格的基线项应当写成类似"/etc/security/pwquality.conf 中 minlen 不小于 14、dcredit 不大于 -1、ucredit 不大于 -1"这样的形式,而不是笼统的"口令要足够复杂"。前者可以用 grep 直接验证,后者只能靠人争论。

三类主流合规标准及其差异

实际工作中最常被引用的三套标准是 CIS、STIG 和等保。它们并非互相替代,而是面向不同场景的互补关系。

标准来源与定位典型特点适用场景
CIS BenchmarkCenter for Internet Security 社区共识分 Level 1 / Level 2,条目清晰,附审计与修复脚本通用加固、互联网业务服务器
DISA STIG美国国防信息系统局要求最严,条目粒度细,常含强制审计项高安全等级、涉密或强合规环境
等保 2.0我国网络安全等级保护制度按级别(二级/三级/四级)提出控制项,强调测评与整改闭环国内政企、金融、医疗等受监管行业

三者的关系可以这样理解:CIS 提供了一套"业界公认的良好实践",STIG 是"最严格的军事级要求",等保则是"我国法规层面的合规底线"。同一台服务器可能同时需要满足等保三级和 CIS Level 1,此时应取两者的并集,冲突处以更严格者为准。例如等保三级要求"应启用登录失败处理功能",CIS 对应条目要求 pam_faillock 连续失败 5 次锁定,STIG 可能要求 3 次——若同时适用,就按 3 次执行。

基线、合规与权限治理的关系

很多初学者会把"打基线"等同于"改配置文件",这是最大的误区。安全基线真正约束的是权限:谁能登录、能登录到哪些账户、能读写哪些文件、能执行哪些命令、能提权到什么程度。因此基线加固与权限治理是同一件事的两个视角——基线是"目标状态",权限治理是"达成并维持该状态的手段"。

下图展示了从合规标准到实际权限收敛的完整链路,以及各环节的输入输出关系:

合规标准 → 基线条目 → 权限收敛 → 持续验证 CIS Benchmark Level 1 / Level 2 DISA STIG 最严格,条目最细 等保 2.0 二级 / 三级 / 四级 业务安全需求 内部策略补充 基线条目池(可检查 · 可判定 · 可修复) 账户与口令策略 | 文件系统权限 | 服务与端口暴露面 | 内核参数 | 日志与审计 | SSH/PAM 配置 冲突处理原则:取并集,以更严格者为准 身份与访问 账户清理 · sudo 最小化 PAM 锁定 · SSH 密钥认证 文件与资源 关键文件权限 · umask SUID/SGID 收敛 · 挂载选项 服务与审计 关闭非必要服务 · 防火墙 auditd 规则 · 日志留存 持续验证:OpenSCAP 扫描 → 差异报告 → 修复 → 复扫 → 基线漂移监控

图中最值得注意的是最下方的"持续验证"环节。基线不是一次性任务,服务器在运行过程中会因安装软件、添加用户、调整服务而偏离基线,这种偏离称为"基线漂移"。RHEL 自带的 OpenSCAP 配合 SCAP Security Guide(scap-security-guide 包)可以按 CIS 或 STIG 的 profile 自动扫描并生成 HTML 报告,这是后续章节反复使用的核心工具。

课程整体框架

本课程按"认知—加固—治理—验证"的主线展开,共 30 章,大致分为四个阶段:

  • 基础认知阶段(第 1~4 章):安全基线定义、合规标准、权限模型(DAC/MAC)、实验环境搭建。
  • 账户与权限加固阶段(第 5~12 章):用户与组治理、口令策略、PAM 栈、sudo 最小权限、SUID/SGID 收敛、文件权限与 ACL。
  • 服务与系统加固阶段(第 13~22 章):SSH 加固、防火墙与 SELinux、服务最小化、内核参数、日志与审计、软件包完整性。
  • 验证与运营阶段(第 23~30 章):OpenSCAP 扫描、基线漂移检测、自动化加固脚本、审计复盘与持续改进。

实验环境准备

为了让后续所有操作可复现,建议准备如下环境。以下参数为教学示例配置,可根据实际硬件调整:

项目建议配置说明
操作系统RHEL 9.x(或 Rocky/Alma 9.x 兼容替代)需启用订阅或配置本地仓库
虚拟机规格2 vCPU / 4 GB 内存 / 40 GB 磁盘可创建快照便于回滚
网络NAT + 仅主机双网卡仅主机网段用于隔离实验
关键软件包scap-security-guide、openscap-scanner、audit、policycoreutils后续章节依赖
快照策略安装完成后打"clean"快照每次加固前可回滚

环境就绪后,先执行一次基线扫描,得到加固前的"初始状态",作为后续对比的基准:

# 确认 SCAP 内容已安装
rpm -q scap-security-guide openscap-scanner

# 查看可用的 CIS profile
oscap info /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml | grep -A2 "cis"

# 执行一次基线扫描(示例:CIS Level 1 Server)
oscap xccdf eval \
  --profile xccdf_org.ssgproject.content_profile_cis_server_l1 \
  --results /root/baseline-before.xml \
  --report /root/baseline-before.html \
  /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml

扫描结束后打开 baseline-before.html,重点关注 fail 与 notapplicable 两类结果:前者是需要修复的项,后者说明该规则不适用于当前系统(例如未安装某服务时对应的配置项)。把 fail 数量记录下来,这就是本课程的"起点分数"。后续每完成一章加固,重新扫描一次,观察 fail 数量的下降趋势——这比任何文字描述都更能说明基线治理的实际效果。

建议在实验环境中保留两份扫描报告:baseline-before.html 与 baseline-after.html。对比两者的差异,是理解"基线加固到底改变了什么"最直观的方式。
生产环境执行基线加固前,务必先在测试环境验证,尤其是 SSH、PAM、SELinux 相关条目。配置错误可能导致无法远程登录或服务无法启动,因此保留带外管理通道(如控制台或 IPMI)是必要的安全措施。