auditd精准监控特定配置文件写操作需结合-w路径监控与-a系统调用规则:-w适用于静态路径(如-w /etc/passwd -p wa -k passwd_write),自动覆盖openat/write/truncate等;-a则用于深度过滤写意图(如-a always,exit -f arch=b64 -s openat,open -f path=/etc/ -f perm=w -k etc_conf_write),并须前置never规则排除临时文件干扰,最后通过augenrules --load加载、ausearch -k验证。

Auditd 可以精准监控特定配置文件的写操作(如 openat、write、truncate 等系统调用),但需避免规则过宽导致日志爆炸,关键在于:限定系统调用类型 + 指定文件路径 + 过滤写入意图(如 flags & O_WRONLY 或 O_RDWR)+ 合理使用 -F key= 标记便于过滤。
一、使用 -w 监控文件写入(简单直接,适合静态路径)
对固定路径的敏感配置文件(如 /etc/passwd、/etc/ssh/sshd_config),推荐用 -w 规则,它自动覆盖常见写相关系统调用:
-
-w /etc/passwd -p wa -k passwd_write:监控所有写(w)和属性修改(a)操作,-k指定关键字,方便后续用ausearch -k passwd_write快速检索 -
-w /etc/ssh/sshd_config -p wa -k sshd_config_mod:同理,聚焦 SSH 主配置文件变更 - 注意:
-p wa已隐含捕获openat(带O_WRONLY/O_RDWR)、write、truncate、renameat等,无需额外写多条-a always,...规则
二、用 -a always,rule 精确匹配写意图(适合动态路径或需深度过滤)
当需要区分“只读打开”和“写入打开”,或监控符号链接目标文件时,-a 规则更可控。例如监控所有对 /etc/ 下 .conf 文件的写打开操作:
-
-a always,exit -F arch=b64 -S openat,open -F path=/etc/ -F perm=w -k etc_conf_write:仅记录openat/open且权限含写(perm=w)的调用,-F path=/etc/是前缀匹配(auditd 支持路径前缀) - 若要严格匹配
/etc/*.conf,需配合-F dir=/etc/+-F perm=w,再用ausearch --input-logs -m openat -i | grep '\.conf$'后处理 - 重要:添加
-F arch=b64(x86_64)或b32(i386),避免因架构不匹配漏日志
三、排除干扰,减少噪音
审计日志易被编辑器临时文件、备份脚本等淹没,必须主动过滤:
- 排除 vim/emacs 临时文件:
-a never,exclude -F msgtype=CONFIG_CHANGE不适用,应加规则屏蔽路径:-a never,exit -F path=/etc/.passwd.swp -F perm=w - 排除常见备份行为:
-a never,exit -F path=/etc/passwd- -F perm=w、-a never,exit -F path=/etc/passwd.bak -F perm=w - 所有
never规则必须放在对应always规则之前,auditd 按顺序匹配,先命中即终止
四、加载与验证规则
规则写入 /etc/audit/rules.d/10-critical-files.rules,然后重载:
-
sudo augenrules --load(推荐,自动合并所有.rules文件) - 验证是否生效:
sudo auditctl -l | grep -E '(passwd|sshd_config|etc_conf)' - 手动触发测试:
echo "test" | sudo tee /etc/passwd 2>/dev/null,再执行sudo ausearch -k passwd_write -i | grep -E "(open|write|comm=")查看完整上下文
规则有效性的核心是“最小权限匹配”:只捕你要的调用,只盯你要的路径,只标你要的关键字。过度宽泛的 -w /etc/ -p wa 会迅速撑爆日志,而精准的 -a always,exit -F path=... -F perm=w 能直击要害。











