监控/etc/sudoers必须用-w规则,因其直接监听路径级write/attribute变更,覆盖cp/echo/sed/dd等绕过visudo的修改方式,比execve系统调用更可靠;需写入/etc/audit/rules.d/并augenrules --load持久化,同时补监控备份文件及符号链接目标。

监控 /etc/sudoers 文件修改必须用 -w 规则,不能只靠 execve 系统调用
直接监控 /etc/sudoers 路径本身是最可靠的方式。因为攻击者可能绕过 visudo,用 cp、echo、sed -i 甚至内存写入工具(如 dd)修改该文件——这些操作都会触发内核对目标路径的 write 或 setattr 系统调用,但不会必然触发 execve(比如用 perl -i 修改就可能漏掉)。-w 规则监听的是路径级访问,不依赖进程名或命令行参数,覆盖更全。
实际配置只需一行:auditctl -w /etc/sudoers -p wa -k sudoers_change
-
-w表示路径监控(watch),不是系统调用规则 -
-p wa捕获写入(w)和属性变更(a),比如chown、chmod、touch -a都会触发 -
-k sudoers_change是关键词,后续用ausearch -k sudoers_change可精准过滤,避免被海量日志淹没
auditctl 添加的规则重启即失效,必须写入 /etc/audit/rules.d/ 并重载
临时加一条 auditctl -w /etc/sudoers -p wa -k sudoers_change 看起来生效了,但只要 systemctl restart auditd 或服务器重启,规则就没了。auditd 启动时只读取 /etc/audit/audit.rules,而这个文件由 augenrules 自动生成。
正确做法是:
- 把规则写进
/etc/audit/rules.d/10-sudoers.rules(文件名必须以.rules结尾) - 内容只写一行:
-w /etc/sudoers -p wa -k sudoers_change,不要加注释或空行 - 运行
sudo augenrules --load,它会合并所有.rules文件并重写/etc/audit/audit.rules - 验证:执行
sudo auditctl -l | grep sudoers_change,有输出才表示已加载
别忽略 sudoers 的备份与符号链接问题
/etc/sudoers 常被误配成符号链接(比如指向 /etc/sudoers.d/main),或者存在备份文件如 /etc/sudoers~、/etc/sudoers.tmp。auditd 的 -w 规则**只监控指定路径本身**,不递归、不跟随软链。
所以要补全防护面:
- 检查是否为软链:
ls -l /etc/sudoers;如果是,监控目标应改为真实路径(如/etc/sudoers.d/main) - 补充监控常见备份路径:
auditctl -w /etc/sudoers~ -p w -k sudoers_backup、auditctl -w /etc/sudoers.tmp -p w -k sudoers_tmp - 注意
/etc/sudoers.d/目录本身也常被用于分片配置,建议一并监控:auditctl -w /etc/sudoers.d/ -p wa -k sudoers_d
ausearch 查日志时,-i 和 --start recent 是刚需
原始审计日志里全是数字 ID(如 uid=1001、comm=cp),不加 -i 参数根本看不出是谁、干了什么。而默认 ausearch 会扫全部历史日志,慢且干扰多。
排查一次可疑修改,推荐组合命令:
-
sudo ausearch -k sudoers_change -i --start recent:只查最近 15 分钟,带可读信息 - 若想定位具体时间点:
sudo ausearch -k sudoers_change -i --start 04/27/2026 14:00:00 - 关键字段看
auid(登录用户ID,比uid更可信)、exe(执行文件路径)、cwd(工作目录)、path(操作的文件路径)
真正容易被忽略的是:/etc/sudoers 被修改后,如果没及时查日志,audit.log 可能已被轮转。务必确认 max_log_file 和 num_logs 在 /etc/audit/auditd.conf 中设得足够大,否则关键事件早被覆盖了。











