审计不可变模式的意义
审计系统有一个不可变开关:把配置置为不可变(-e 2)后,正在运行的规则无法再被在线修改,只有重启主机才能解除。设计目的是防止攻击者拿到 root 之后用一条命令关掉审计、抹掉后续记录。核查方式是查看 auditctl -s 输出中的 enabled 值:0 表示审计关闭、1 表示正常启用、2 表示规则已不可变。值被改成 0 本身就是重要发现,说明有人主动停用了审计。
基本信息
| 查看命令 | auditctl -s,关注 enabled 与 lost 字段 |
|---|---|
| 取值含义 | 0 关闭、1 启用、2 不可变 |
| 配置位置 | /etc/audit/rules.d/ 与 /etc/audit/audit.rules 中的 -e 2 |
| 解除方式 | 置为不可变后需重启主机才能再次修改规则 |
典型使用场景
- 确认审计系统是否处于开启状态,排除记录缺失的解释
- 检查主机是否配置了规则保护,评估抗篡改能力
- 排查事件期间审计被中断的时间段
- 核对内核命令行是否带有禁用审计的参数
- 为合规检查提供审计配置的现状证据
核查审计状态
核查审计状态
auditctl -s | grep -E 'enabled|lost|pid' # 当前状态与丢失计数
grep -Rn '^\s*-e 2' /etc/audit/rules.d/ /etc/audit/audit.rules 2>/dev/null # 是否配置不可变
grep -Rn 'failures\|lost' /var/log/audit/audit.log 2>/dev/null | tail -5 # 日志侧的异常提示
cat /proc/cmdline | tr ' ' '\n' | grep -i audit # 内核参数是否影响审计
systemctl is-active auditd # 服务是否在运行auditctl -s 输出读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| enabled | 审计开关状态:0 / 1 / 2 | 0 表示被关闭,属重要发现 |
| pid | 审计守护进程号 | 为空说明未在运行 |
| lost | 因队列满等原因丢失的事件数 | 非零表示记录并不完整 |
| backlog_limit | 事件队列容量 | 容量过小会放大丢失风险 |
启用不可变后新增规则必须重启主机,运维变更流程要提前协调;日常整改窗口可以把临时关闭与再次置为不可变安排在同一次维护中完成。
lost 计数非零说明审计子系统曾因队列积压丢弃事件,此时不能把「日志中没有记录」直接解释为「事件没有发生」。
在实际案件中不要为了加规则而重启主机,重启会同时清除大量易失性证据,评估影响后再与决策方确认。