要把 OpenSCAP 的 profile 和策略文件路径选准确,第一步得先确认策略文件确实在位,比如 /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml。接着,再用 oscap info 把完整的 profile ID 查清楚,例如 xccdf_org.ssgproject.content_profile_cis。这里千万别偷懒写成 cis,因为一旦简写,系统往往会直接静默跳过所有规则,表面看像执行了,实际上什么都没检查。

怎么选对 OpenSCAP 的 profile 和策略文件路径
OpenSCAP 并不是那种“装好就能直接扫”的工具。它必须先清楚两件事:到底要用哪一套标准(profile),去检查哪一类系统。否则,oscap xccdf eval 要么会静默跳过所有规则,要么直接报 File not found。真正的关键不在命令本身,而在前面的确认动作是否到位:一是策略文件确实存在,二是 profile ID 必须完整无误。
先验证安装和内容路径:
- RHEL/CentOS:运行
sudo dnf install openscap-scanner scap-security-guide;Ubuntu/Debian:用sudo apt install openscap-utils scap-security-guide - 检查策略文件是否存在:
ls /usr/share/xml/scap/ssg/content/ | grep rhel8(RHEL 8)或grep ubuntu2204(Ubuntu 22.04)——若无输出,说明 SSG 内容未安装或解压失败 - 查可用 profile:
oscap info /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml | grep -A5 "Profiles",输出类似xccdf_org.ssgproject.content_profile_cis这种完整命名空间 ID,不能简写为cis
常见错误:把 --profile cis 当成合法参数,实际会导致零规则执行,扫描结果里全是 notchecked 状态,但命令不报错。
怎么用 --tailoring 文件精准控制扫描项
全量扫描 300+ 条规则既慢又干扰判断,尤其在生产环境——你不需要每条都扫,比如 PCI-DSS 里关于“POS 终端日志加密”的规则对后台数据库服务器毫无意义。OpenSCAP 支持通过 tailoring 文件禁用无关项,比手动删 XML 安全得多。
操作步骤:
- 生成默认 tailoring 模板:
oscap xccdf generate tailoring --profile xccdf_org.ssgproject.content_profile_cis /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml > cis-tailoring.xml - 编辑
cis-tailoring.xml,找到下的或块,例如禁用 SSH banner 相关规则: - 执行时引用该文件:
sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis --tailoring-file cis-tailoring.xml --report report.html /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
注意:--tailoring-file 必须配合 --profile 使用,单独用会失效;修改后务必用 oscap xccdf validate --tailoring cis-tailoring.xml 校验语法,否则扫描中途退出。
怎么区分 Lynis 的 [SUGGESTION] 和 [WARNING] 并定位合规项
Lynis 报告里真正对应等保、CIS 或 STIG 条款的是带编号的 [SUGGESTION] 条目,不是 [WARNING]。后者多是运维习惯问题(如“/tmp 权限非 1777”),前者才是合规硬性要求(如 [KRNL-6320] 对应 “启用内核地址空间布局随机化”)。
快速定位方法:
- 扫描后直接 grep:
sudo lynis audit system --quick 2>&1 | grep "[SUGGESTION]",输出形如[SUGGESTION] Check: Kernel hardening (KRNL-6320) - 查最新文档:访问
https://cisofy.com/lynis/controls/KRNL-6320/(替换末尾编号),页面明确列出对应标准(如 CIS 4.2.1.2)、修复命令、以及是否影响等保三级“安全计算环境”条款 - 别信自动修复建议:Lynis 提供的
sysctl -w kernel.randomize_va_space=2只是临时生效,合规要求需写入/etc/sysctl.conf并sysctl -p持久化
一个容易被忽略的点:Lynis 默认不检查 SELinux 策略完整性,需额外加 --include-tests security-selinux 才能覆盖等保三级“强制访问控制”要求。
怎么让扫描结果真正可落地,而不是堆一堆 fail
扫描出 50 个 fail 没用,关键是分清哪些能一键修、哪些要流程审批、哪些根本没法扫。OpenSCAP HTML 报告里每条失败项的 Remediation 区域图标就是决策依据:
bash图标:给出具体命令,但必须验证上下文——例如改/etc/ssh/sshd_config前先确认服务是否启用、是否有其他依赖配置ansible图标:适合批量环境,但注意 playbook 片段常省略handlers(如 reload sshd),漏掉会导致配置生效但服务未重启- 无图标项:比如 “保留 90 天审计日志”,这需要确认磁盘容量、rsyslog 配置、以及是否满足组织日志留存政策——技术上改
/etc/rsyslog.conf很简单,流程上得走变更审批
最常被跳过的动作:扫描前用 oscap xccdf eval --fetch-remote-resources 拉取最新 OVAL 定义。不加这个参数,RHEL 8 上对 openssl 版本的检查可能仍用 2024 年旧定义,漏掉 CVE-2024-XXXX 类新漏洞判定。