auditctl 是 linux 审计系统实时控制工具,规则驻留内存、重启失效,适用于调试、应急和临时监控;支持 -w 路径监控和 -a 系统调用捕获,需用 augenrules 固化为永久规则。

auditctl 是 Linux 审计系统最直接的控制入口,它不修改配置文件,而是实时向内核审计框架下发指令,规则即刻生效、无需重启服务——但仅驻留内存,系统重启后自动清空。这决定了它的核心定位:调试验证、应急响应和临时布控。
快速添加路径级监控规则
用 -w 参数可对关键文件或目录设置“看门狗”式监控,适合捕获配置篡改、敏感文件访问等行为。
-
监控 /etc/shadow 的写入与属性变更:
sudo auditctl -w /etc/shadow -p wa -k shadow_mod(-p wa表示只记录写和属性修改) -
递归监控整个 /root 目录的读写执行:
sudo auditctl -a always,exit -F dir=/root -F perm=rwxa -k root_access(注意:-w 不支持递归子项,此处必须用 -a + -F dir) -
删除某条路径监控:
sudo auditctl -W /etc/shadow(大写 W 表示移除 watch)
精准捕获系统调用行为
当目标不是固定路径,而是某类动作(如执行程序、绑定端口、读取密钥),就得用 -a 搭配系统调用名(-S)和过滤条件(-F)。
-
记录所有普通用户(auid≥1000)的 execve 调用:
sudo auditctl -a always,exit -F arch=b64 -S execve -F auid>=1000 -k user_exec -
监控对网络端口的 bind 操作(含失败尝试):
sudo auditctl -a always,exit -F arch=b64 -S bind -k port_bind -
区分架构很重要:64位系统必须加
-F arch=b64,否则规则可能不匹配;若需兼容32位程序,额外加一条-F arch=b32规则
查看与清理运行时规则
规则加完不能靠猜,得实时确认是否真正加载成功,并掌握清理手段。
-
列出当前所有生效规则:
sudo auditctl -l—— 输出为空说明没加成功或 auditd 未运行 -
检查审计系统整体状态:
sudo auditctl -s—— 关键看enabled=1和pid=非零值,否则规则不会写入日志文件 -
一键清空所有规则:
sudo auditctl -D—— 测试环境重置常用,生产环境慎用 -
按 key 删除特定规则:
sudo auditctl -d always,exit -k shadow_mod(需完整匹配 -a 类型和 key)
临时规则转永久部署的关键步骤
测试有效的规则要落地为长期策略,必须固化到磁盘并由 auditd 自动加载,不能只依赖 auditctl。
- 将已验证的规则语句(如
-w /etc/passwd -p wa -k passwd_edit)写入/etc/audit/rules.d/10-prod.rules - 执行
sudo augenrules --load编译并加载全部 .rules 文件(RHEL/CentOS/Fedora 系统标准流程) - 再次运行
sudo auditctl -l确认规则已出现在输出中,才算真正生效 - 注意:修改 .rules 文件后不执行 augenrules,规则永远不会进入内核











