19.3.5 配置合规检查与漂移检测

在配置管理体系中,合规检查与漂移检测用于确保运行环境持续符合配置基线与安全规范,及时发现未授权或非计划变更。本节给出可落地的规则设计、检测方法、处置闭环与平台集成实践,并提供安装、示例、排错与练习。

1. 原理概览与闭环流程

文章图片

2. 合规规则体系设计(含示例)
- 规则结构:检查项、适用范围、目标值、容忍阈值、风险等级、修复建议。
- 规则分层:全局规则、环境规则(生产/测试)、业务规则(中间件/应用)。

示例:OS 与 Nginx 合规规则(YAML)

# /opt/compliance/rules/os-nginx.yml
rules:
  - id: OS_SSH_001
    name: "SSH禁用root直登"
    target: "sshd_config"
    file: "/etc/ssh/sshd_config"
    match: "^PermitRootLogin\\s+no"
    level: "high"
    fix: "sed -i 's/^#\\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config && systemctl restart sshd"

  - id: OS_PAM_001
    name: "密码复杂度"
    target: "pam_pwquality"
    file: "/etc/security/pwquality.conf"
    expect:
      minlen: 12
      dcredit: -1
      ucredit: -1
      lcredit: -1
      ocredit: -1
    level: "medium"

  - id: NGX_001
    name: "Nginx隐藏版本号"
    target: "nginx.conf"
    file: "/etc/nginx/nginx.conf"
    match: "^\\s*server_tokens\\s+off;"
    level: "medium"
    fix: "grep -q 'server_tokens off;' /etc/nginx/nginx.conf || sed -i '/http {/a\\    server_tokens off;' /etc/nginx/nginx.conf && nginx -t && systemctl reload nginx"

3. 检测方式与实施策略(命令与脚本)
- 周期性扫描:定时比对基线与配置
- 事件驱动:变更后即时检测
- 文件哈希与模板校验
- 运行态参数核对

示例:本地检测脚本(简化版)

# /opt/compliance/bin/check.sh
#!/usr/bin/env bash
set -euo pipefail

RULES="/opt/compliance/rules/os-nginx.yml"
REPORT="/opt/compliance/report/$(date +%F).txt"
mkdir -p /opt/compliance/report

check_match() {
  local file="$1"
  local pattern="$2"
  if grep -Eq "$pattern" "$file"; then
    echo "[PASS] $file match $pattern" >> "$REPORT"
  else
    echo "[FAIL] $file not match $pattern" >> "$REPORT"
  fi
}

# SSH
check_match "/etc/ssh/sshd_config" "^PermitRootLogin\\s+no"
# Nginx
check_match "/etc/nginx/nginx.conf" "^\\s*server_tokens\\s+off;"

echo "Report: $REPORT"

执行与预期:

chmod +x /opt/compliance/bin/check.sh
/opt/compliance/bin/check.sh
cat /opt/compliance/report/$(date +%F).txt
# 预期输出包含 PASS/FAIL 行

4. 漂移检测示例(哈希与差异比对)

# 基线快照
mkdir -p /opt/compliance/baseline
sha256sum /etc/ssh/sshd_config /etc/nginx/nginx.conf > /opt/compliance/baseline/hash.txt

# 漂移检测
sha256sum -c /opt/compliance/baseline/hash.txt > /opt/compliance/report/hash_check.txt || true
cat /opt/compliance/report/hash_check.txt
# 预期:OK 表示未漂移,FAILED 表示漂移

5. 结果处理与闭环治理(自动修复示例)

# 自动修复示例:修复SSH禁止root登录
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sshd -t && systemctl restart sshd

6. 多环境合规与例外管理
- 生产环境:严格规则、零容忍漂移
- 测试环境:允许临时豁免并设定到期复核
- 例外文件示例:

# /opt/compliance/exception/whitelist.yml
exceptions:
  - id: OS_SSH_001
    host: "test-01"
    expire: "2025-06-30"
    reason: "兼容性测试"

7. 与运维平台的集成建议(可执行路径)
- CMDB关联:按资产标签加载规则
- 自动化联动:变更结束触发检测
- 报表与可视化:输出 JSON 供平台采集

示例:输出 JSON 报告

# /opt/compliance/bin/report_json.sh
#!/usr/bin/env bash
cat <<'EOF'
{
  "host": "node-01",
  "date": "2025-01-01",
  "result": [
    {"id":"OS_SSH_001","status":"PASS"},
    {"id":"NGX_001","status":"FAIL"}
  ]
}
EOF

8. 安装与部署(轻量级方案)
- 目录规划

mkdir -p /opt/compliance/{bin,rules,report,baseline,exception}
  • 建议以系统定时任务运行
# /etc/cron.d/compliance
*/30 * * * * root /opt/compliance/bin/check.sh

9. 排错清单(常见问题与处理)
- 配置检测误报:检查正则是否过宽或配置文件中存在多处匹配
- 检测脚本权限不足:确保脚本可执行且具备读取配置权限
- Nginx检测失败:先执行 nginx -t 确认配置可用
- SSH重启失败:用 sshd -t 进行语法检查

示例排错命令:

sshd -t
nginx -t
grep -n "PermitRootLogin" /etc/ssh/sshd_config

10. 练习
1. 为 Redis 添加一条合规规则(如 requirepass 是否配置),并用脚本检测。
2. 对 /etc/sysctl.conf 进行哈希基线快照并模拟漂移。
3. 将检测结果输出为 JSON 并模拟平台采集。