要真正防止 auditd 日志被篡改或覆盖,必须从文件系统、内核行为、进程运行、日志存储四层面同步加固:用 chattr +i 锁定日志文件实现不可变防护,chmod 600/chown root:root 严格权限控制,启用 -e 2 内核级锁定模式,通过 systemd 隔离 auditd 进程。

要真正防止 auditd 日志被篡改或覆盖,不能只靠“设权限”或“开服务”,而需从文件系统、内核行为、进程运行、日志存储四个层面同步收紧——让攻击者即使拿到 root 权限,也改不动、删不了、绕不过、藏不住。
锁定审计日志文件本身
这是最硬的防线。chattr +i 是文件系统级不可变标志,连 root 也无法在不先解除的情况下修改、重命名或删除文件:
- 停止 auditd:sudo systemctl stop auditd(避免写入冲突)
- 设置不可变:sudo chattr +i /var/log/audit/audit.log
- 验证生效:lsattr /var/log/audit/audit.log 应显示 i 标志
- 轮转后的新日志(如 audit.log.1)同样需手动加锁;建议在 logrotate 的 postrotate 脚本中自动执行 chattr +i
收紧权限与属主控制
权限是第一道软性屏障,必须最小化暴露面:
- 属主属组设为 root:root:sudo chown root:root /var/log/audit/audit.log
- 文件权限严格为 600:sudo chmod 600 /var/log/audit/audit.log
- 整个 /var/log/audit/ 目录权限设为 700:防止新建文件绕过监控
- 禁用非 root 用户执行 ausearch/aureport:sudo chmod 750 /sbin/ausearch /sbin/aureport,并仅授权运维账号通过 sudo 白名单调用
启用内核级规则锁定(-e 2)
auditctl -e 2 是关键开关,它将 auditd 置于“只读锁定”状态,禁止任何用户(包括 root)通过 auditctl 动态清空或修改已加载规则:
- 在 /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(对应 /usr/bin/auditctl 路径) - 执行 sudo augenrules --load 加载规则
- 确认生效:sudo auditctl -s | grep enabled → 输出应为 enabled 2
加固 auditd 进程自身防劫持
规则锁住了,但攻击者仍可能 kill -9 或 LD_PRELOAD 注入。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

















