auditctl -w 监控目录需注意路径真实性、非递归性及权限参数完整性,-p rwxa 覆盖读写执行与属性变更,规则须写入 /etc/audit/rules.d/ 并用 augenrules 加载,日志解析依赖 ausearch -i 映射 uid 为用户名。

直接用 auditctl -w 监控目录,但必须注意路径真实性和递归限制
auditd 的 -w 规则只监控指定路径本身的 inode 变更,不自动递归子目录或文件。比如 sudo auditctl -w /var/www/html -p rwxa -k web_access 能捕获对该目录的 chmod、rename 等操作,但不会记录 /var/www/html/js/app.js 的修改——除非你显式加规则或改用系统调用级审计。
- 路径必须是真实目录(
ls -ld /var/www/html确认存在且非软链接) - 若需覆盖整个树,要么逐层加规则(不现实),要么改用
-a always,exit -F dir=...形式(但仅限部分内核版本支持递归) - 高频写入目录(如日志目录、/tmp)慎用
-p rwxa,容易撑爆/var/log/audit/audit.log
-p 参数选错会导致关键行为漏记录
-p 后跟的权限字母决定捕获哪些动作:r 是 read(如 cat、grep),w 是 write(如 echo >、cp),x 是 execute(如 ./script.sh),a 是 attribute change(如 chmod、chown)。常见错误是只写 -p wa 却忽略 r 和 x,结果用户静默读取敏感配置或执行恶意脚本却无日志。
- 监控 Web 根目录建议统一用
-p rwxa,覆盖读、写、执行、属性四类动作 -
-p w不等于“只记录写文件”,它也捕获对目录的 mkdir、rmdir、unlink 等元数据变更 - 不要混用
-p和-F perm=:前者用于-w,后者用于-a规则,语法不兼容
临时规则和永久规则不能混用,生产环境只认 .rules 文件
用 auditctl -w 加的规则重启即丢,只是验证阶段用。真正上线必须写进 /etc/audit/rules.d/ 下的 .rules 文件,并通过 augenrules --load 加载。否则 systemctl restart auditd 会清空所有临时规则,且不会自动读取磁盘规则。
- 文件名必须以数字开头(如
10-web.rules),否则augenrules会跳过 - 规则行不能有空格缩进,注释行必须以
#开头 - 加载后务必执行
sudo auditctl -l | grep your_key确认规则已生效,别只信 “命令没报错”
日志里只有 UID,查不到用户名?得靠 ausearch -i 或后期关联
auditd 原生日志只存数字 UID/GID,不记用户名。直接 cat /var/log/audit/audit.log 看到的是 uid=1001,不是 uid=john。想快速定位人,必须用 ausearch 加 -i 参数做实时解析,或用 aureport -f -i 生成可读报告。
-
sudo ausearch -k web_access -i会把 UID 映射为用户名、命令路径、文件名等 - 如果
-i输出乱码或失败,说明系统缺少对应用户的登录历史(如用户刚创建还没登录过),auid 字段可能为空或为 4294967295 - 要按组筛选,得先用
ausearch提取 UID 列表,再用id -Gn $uid查所属组——auditd 规则层不支持-F gid=过滤目录访问
auditctl 命令输对了没,重点是后续能从 audit.log 里干净利落地捞出“谁在什么时候改了哪行代码”。











