auditd需三步闭环才能实时监控:服务必须active(running),规则须写入/etc/audit/rules.d/并augenrules--load加载,再用ausearch-aureport组合查日志。

auditd 不是装上就自动工作的工具,它默认不启动、规则为空、日志文件也不会自动生成。要实现“实时监控”,关键在于三步闭环:服务真正在跑、规则正确加载、事件能被精准捕获。
先确认 auditd 已真正启用
很多问题其实卡在这一步——规则写得再准,auditd 没运行也白搭:
- 运行 systemctl status auditd,必须看到 active (running);若显示 inactive 或 failed,先执行 sudo systemctl start auditd && sudo systemctl enable auditd
- 执行 auditctl -s | grep enabled,输出应为 enabled 1(0 表示关闭,2 表示锁定)
- 检查内核模块是否加载:lsmod | grep audit 应有 audit 和 audit_watch 输出
用永久规则替代临时命令
auditctl 添加的规则重启即丢,生产环境必须用永久配置:
- 把规则写入 /etc/audit/rules.d/99-monitor.rules(文件名必须以 .rules 结尾)
- 内容示例(监控敏感文件 + root 命令):
-w /etc/passwd -p wa -k identity<br> -w /etc/shadow -p wa -k identity<br> -a always,exit -F arch=b64 -F euid=0 -S execve -k root_exec
- 保存后执行 sudo augenrules --load,它会合并所有 .rules 文件并加载进内核
- 验证是否生效:sudo auditctl -l | grep identity 能看到对应规则才表示成功
按场景选对规则类型和参数
不同监控目标要用不同规则逻辑,不能一概而用 -w:
- 监控文件变动:用 -w + -p,如 -p wa(写入+属性变更),慎加 r(读),否则日志爆炸
- 追踪用户命令:必须用 -a always,exit -S execve,且 必须指定 -F arch=b64(或 b32),否则看不到完整命令行参数
- 过滤特定用户:在系统调用规则中加 -F uid=1000(真实 UID)或 -F auid=1000(登录原始 UID,支持 sudo 场景)
- 监控删除操作:用 -S unlink -S unlinkat,而不是只盯一个系统调用
快速查日志,别在 audit.log 里手动翻
audit.log 是二进制格式,直接 cat 看不懂。用专用工具高效定位:
- ausearch -k identity -i:按规则标签查所有相关事件,并自动翻译成可读格式
- ausearch -m SYSCALL -ts today -i:查今天所有系统调用事件
- ausearch -ui 0 -m EXECVE -i:查 root 用户(UID 0)执行的所有命令
- 配合 ausearch ... | aureport -f -i 可生成简洁报表,比如统计某用户执行了哪些命令











