在CentOS系统上做安全合规扫描,OpenSCAP是目前最主流、最权威的开源工具之一,它能依据CIS基准、STIG规范、PCI-DSS等安全标准对系统进行自动化检测,并生成详细的合规报告。整个流程分为三步:安装OpenSCAP工具包、加载对应的安全策略内容、执行扫描并导出修复报告。下面我把每一步的具体操作、常见问题和修复方法全部讲清楚。

OpenSCAP全称是Open Security Content Automation Protocol,它是由美国国家标准与技术研究院(NIST)主导开发的安全合规自动化框架。在CentOS 7和CentOS 8/Stream上都能运行,但安装方式略有不同。它的核心价值在于:不需要你手动逐项检查几百条安全配置,一条命令就能跑完,并且输出XML或HTML格式的报告,直接告诉你哪些项不合规、应该怎么改。

一、CentOS上安装OpenSCAP及相关组件

在CentOS 7上,需要先启用EPEL源,然后安装scap-security-guide包,这个包里面包含了CIS基准等安全策略内容。

yum install -y epel-release
yum install -y openscap openscap-scanner scap-security-guide

在CentOS 8或CentOS Stream上,包名有所变化,直接用dnf安装即可:

dnf install -y openscap openscap-scanner scap-security-guide

安装完成后,验证一下版本和功能是否正常:

oscap --version
oscap info /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml

如果能正常输出版本信息和策略文件信息,说明环境就绪。这里有个容易踩的坑:scap-security-guide包体积很大,安装可能需要几分钟,网络不稳定时建议先配置好国内镜像源。

二、加载安全策略内容并理解扫描目标

OpenSCAP的扫描不是凭空进行的,它需要加载一个"安全内容"文件,这个文件定义了要检查哪些项目。CentOS自带的策略文件路径通常是:

/usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml   # CentOS 7
/usr/share/xml/scap/ssg/content/ssg-centos8-ds.xml   # CentOS 8

这个XML文件里面包含了数千条安全检查规则,涵盖账户策略、服务配置、网络设置、文件权限、审计日志等多个维度。你也可以从官方网站下载更细分的策略,比如专门针对CIS CentOS 7 Benchmark Level 1的内容:

oscap info /usr/share/xml/scap/ssg/content/ssg-centos7-cis-ds.xml

选择哪个策略取决于你的合规需求。如果是等保测评,通常用CIS基准;如果是军工或政府项目,可能需要STIG策略。策略文件选对了,扫描结果才有参考价值。

三、执行合规扫描的具体命令

最基础的扫描命令如下,以CentOS 7为例:

oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis \
  --report report.html \
  --results results.xml \
  /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml

参数解释:--profile指定使用哪个合规配置文件,cis代表CIS基准;--report指定HTML报告输出路径;--results指定XML结果文件路径。扫描过程根据系统配置项数量,通常需要5到20分钟。

如果你想扫描多个配置文件,可以用逗号分隔:

oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis,xccdf_org.ssgproject.content_profile_stig \
  --report report.html \
  --results results.xml \
  /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml

扫描完成后,用浏览器打开report.html就能看到直观的结果:绿色表示通过、红色表示失败、黄色表示警告。每一项不合规的条目都会标注具体的修复建议,这就是OpenSCAP最实用的地方。

四、扫描报告解读与常见不合规项分析

实际扫描中,CentOS系统最常出现的不合规项集中在以下几个方面:

第一类是账户与密码策略。比如root账户没有锁定、密码最小长度不够、登录失败后没有锁定策略。这些在报告中通常显示为xccdf_org.ssgproject.content_rule_accounts_password_minlen_login_defs等规则ID。

第二类是服务配置。比如sshd没有禁用root远程登录、没有设置空闲超时、rsync服务未禁用等。这些项在生产环境中风险极高,必须优先修复。

第三类是文件权限和审计配置。比如/etc/shadow权限不是600、/var/log/audit目录权限不对、auditd服务未启用等。这些往往是等保测评中的扣分项。

第四类是网络和防火墙配置。比如没有启用firewalld、没有限制不必要的端口开放等。

五、自动修复与手动修复相结合的策略

OpenSCAP本身提供了一个修复脚本工具,可以自动修复部分配置项:

oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis \
  --remediate \
  --results results.xml \
  /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml

加上--remediate参数后,OpenSCAP会尝试自动修改系统配置来满足合规要求。但这里必须强调:自动修复不是万能的,而且有风险。比如它会直接修改/etc/ssh/sshd_config、/etc/login.defs等关键文件,如果你的系统有自定义配置,可能会被覆盖导致服务异常。

我的建议是:先扫描生成报告,然后逐项对照报告中的修复建议手动处理。对于确定性高、风险低的项(比如设置密码最小长度),可以用自动修复;对于涉及服务配置和网络策略的项,务必手动确认后再改。

手动修复的典型操作示例:

# 设置密码最小长度为12位
sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN\t12/' /etc/login.defs

# 禁用root远程登录
sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

# 设置登录失败锁定
authselect enable-feature with-faillock
authselect apply-changes

六、生成标准化合规报告用于审计

等保测评、安全审计通常需要正式的报告文档。OpenSCAP生成的HTML报告虽然直观,但不够正式。你可以用xsltproc将XML结果转换为更专业的格式:

xsltproc /usr/share/openscap/xsl/xccdf-report.xsl results.xml -o audit_report.html

也可以使用OpenSCAP自带的报告生成工具生成ARF格式(资产报告格式),这个格式在一些企业级安全平台中可以直接导入:

oscap xccdf generate report --output report.html results.xml

如果需要定期扫描并自动生成报告,可以写一个简单的Shell脚本配合crontab定时任务:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis \
  --report /var/log/openscap/report_${DATE}.html \
  --results /var/log/openscap/results_${DATE}.xml \
  /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml
echo "Scan completed at $(date)" >> /var/log/openscap/scan.log

然后加入crontab每周执行一次:

0 3 * * 1 /opt/scripts/openscap_scan.sh

七、CentOS 8及Stream版本的特殊注意事项

CentOS 8已经停止维护,CentOS Stream成为替代方案。在Stream上使用OpenSCAP时需要注意几点:一是默认的安全策略文件路径可能不同,需要确认/usr/share/xml/scap/ssg/content/目录下的文件名;二是Stream使用dnf和authselect替代了传统的authconfig,部分修复命令需要调整;三是SELinux在Stream上默认启用,OpenSCAP的某些规则会检测SELinux状态,确保不要随意关闭它。

另外,如果你的CentOS系统使用了容器或虚拟化环境,OpenSCAP也支持对容器镜像进行扫描:

oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis \
  --report container_report.html \
  /usr/share/xml/scap/ssg/content/ssg-centos7-container-ds.xml

八、与其他安全工具的配合使用

OpenSCAP不是孤立的工具,它可以和其他安全体系配合。比如扫描结果可以导入到VulnDB或Tenable等漏洞管理平台;可以和Ansible结合,把修复动作自动化;也可以和SIEM系统对接,实现持续合规监控。在实际企业环境中,建议把OpenSCAP扫描纳入整体安全运营流程,而不是一次性的检查动作。

总结一下核心要点:OpenSCAP在CentOS上的合规扫描流程就是"装工具、选策略、跑扫描、看报告、做修复"五步走。工具本身免费开源、策略内容权威、报告格式标准,是Linux服务器安全合规最实用的方案之一。关键是要根据实际业务场景选择合适的安全策略,扫描后认真对待每一条不合规项,而不是扫完就扔一边。