auditd默认安装但规则为空,不配置规则即无审计效果;必须用root执行auditctl -w添加规则并写入/etc/audit/rules.d/后运行augenrules --load才能持久化生效。

auditd 不是“开启即生效”的日志服务,它默认安装但规则为空——**不配置规则,就等于没开审计**。直接运行 systemctl start auditd 只是启动了守护进程,真正监控敏感文件访问,必须手动加 -w 规则并确保持久化。
auditctl -w 规则为什么加了却没日志?
最常见失效原因不是命令写错,而是四个硬性前提没满足:
-
auditd服务必须enabled且running(systemctl status auditd中enabled: enabled+active: active (running)) - 执行
auditctl -w必须用root权限,普通用户即使加了也静默丢弃 -
auditctl -s | grep enabled输出的enabled字段必须是1(不是2或0;2表示只记录内核事件,不处理用户空间规则) - 路径必须是真实 inode 路径,不能是软链接别名——比如监控
/etc/shadow,得先ls -i /etc/shadow确认,不能写成/etc/passwd或/usr/share/defaults/shadow
/etc/shadow 被读取,该用 -p rw 还是 -p rwa?
对 /etc/shadow 这类高敏文件,-p rw 是最小可用组合,-p rwa 更完整但有代价:
-
-p rw:捕获所有读、写操作(如cat /etc/shadow、useradd修改),覆盖绝大多数攻击场景 -
-p rwa:额外捕获属性变更(chmod、chown、touch -a),但会多出大量低价值日志(比如某些服务启动时自动 touch 时间戳) - 永远带上
-k参数,例如-k shadow_read——没有-k,后续用ausearch查日志只能靠grep /etc/shadow,极易漏掉 syscall 上下文或被日志轮转冲掉
推荐命令:sudo auditctl -w /etc/shadow -p rw -k shadow_read
规则怎么才能重启后还生效?
用 auditctl 加的规则是临时的,reboot 或 systemctl restart auditd 后全部丢失。持久化必须走 augenrules 流程:
- 在
/etc/audit/rules.d/下新建文件,如10-sensitive.rules,内容为:-w /etc/shadow -p rw -k shadow_read-w /etc/passwd -p wa -k passwd_change - 运行
sudo augenrules --load(不是systemctl restart auditd)——它会合并所有.rules文件到/etc/audit/audit.rules,再通知auditd重载 - 验证是否加载成功:
sudo auditctl -l | grep shadow_read,有输出才说明规则已进内核 - 注意:如果系统启用了
ProtectSystem=strict(某些云厂商镜像默认开启),/etc/audit/rules.d/可能被 systemd 拒绝读取,此时需先sudo systemctl edit auditd放宽限制
怎么实时确认 /etc/shadow 被谁读了?
tail -f /var/log/audit/audit.log 看原始日志效率极低,真正实用的是组合过滤:
- 查最近 5 分钟所有匹配
shadow_read的访问:sudo ausearch -k shadow_read --start recent --minutes 5 -m SYSCALL -i - 快速定位触发进程:
sudo ausearch -k shadow_read --start now-10m | grep "comm=" | head -3(comm=是程序名,如comm="cat") - 若要追溯是谁调起的,必须看
ppid=字段,再用ausearch -p <ppid> -i</ppid>查父进程——很多攻击者用sh -c 'cat /etc/shadow'绕过简单过滤,单看comm会误判为sh
最后提醒一句:auditd 日志本身存在被覆盖风险,/var/log/audit/audit.log 默认大小只有 8MB,生产环境务必改 max_log_file 和 num_logs,并考虑用 rsyslog 转发副本。否则等你发现异常,关键日志早就滚走了。


















