auditd规则无法通过chattr +i直接锁定,因其由内核动态加载;需锁定配置文件(如/etc/audit/rules.d/immutable.rules)、启用-e 2锁定模式、加固auditd服务,并定期验证防护有效性。

不能直接给 auditd 规则加 chattr +i,因为 auditd 的规则本身不是普通文件——它由内核审计子系统动态加载并运行,规则存储位置(如 /etc/audit/rules.d/ 中的文件)可被锁定,但真正起作用的是内核中已加载的规则集。黑客拿到 root 权限后,能用 auditctl -D 清空所有规则,或用 auditctl -R 加载恶意规则,这与文件是否不可变无关。
锁定规则配置文件本身(静态防护)
虽然规则运行态无法“immutable”,但源头文件必须防篡改:
- 将规则写入
/etc/audit/rules.d/immutable.rules(而非临时用auditctl添加),确保开机自动加载 - 对该文件设不可变属性:
sudo chattr +i /etc/audit/rules.d/immutable.rules - 同时锁定主配置文件:
sudo chattr +i /etc/audit/auditd.conf,防止日志路径、保留策略被修改 - 检查 SELinux 上下文是否正确:
ls -Z /etc/audit/rules.d/immutable.rules,应为system_u:object_r:audit_rules_t:s0;若不匹配,用restorecon修复
禁止运行时规则被清空或覆盖(动态防护)
auditd 提供控制规则(control rules)来限制 root 对审计系统的操作权限:
- 在
/etc/audit/rules.d/lockdown.rules中添加以下三行:
-e 2
-a always,exclude -F msgtype=CONFIG_CHANGE
-a always,exclude -F msgtype=SYSCALL -F arch=b64 -S execve -F a0=0x2f7573722f62696e2f617564697463746c
-
-e 2是关键:启用“锁定模式”,禁止任何用户(包括 root)再调用auditctl增删规则、清空队列或修改审计状态 - 第二行屏蔽 CONFIG_CHANGE 类型日志,减少干扰;第三行可选,阻止通过
auditctl二进制本身执行规则变更(需根据实际路径 hex 编码调整) - 重载规则:
sudo augenrules --load,然后验证:sudo auditctl -s | grep "enabled"应显示enabled 2
加固 auditd 进程自身防劫持
即使规则锁住,攻击者仍可能 kill 或替换 auditd 进程:
- 设置进程不可被 ptrace 或调试:
echo 1 | sudo tee /proc/$(pidof auditd)/status | grep CapBnd不现实,改用更可靠方式 - 用 systemd 服务加固:编辑
/etc/systemd/system/auditd.service.d/override.conf,加入:
[Service]
ProtectSystem=strict
ProtectHome=read-only
LockPersonality=true
MemoryDenyWriteExecute=true
RestrictRealtime=true
- 重载并重启:
sudo systemctl daemon-reload && sudo systemctl restart auditd - 确认生效:
systemctl show auditd | grep ProtectSystem应返回strict
验证与日常维护要点
锁定不是一劳永逸,需定期确认有效性:
- 模拟攻击测试:用 root 执行
auditctl -D,应报错Operation not permitted - 检查规则是否完整加载:
sudo auditctl -l | wc -l,对比预期条数 - 查看审计日志是否仍在记录:
sudo ausearch -m CONFIG_CHANGE -ts recent | head -5,若无输出,说明-e 2生效 - 维护时临时解锁:先
sudo chattr -i /etc/audit/rules.d/*.rules,更新规则,再augenrules --load,最后立刻chattr +i回去











