auditd精准审计关键进程文件操作的核心是绑定进程身份(auid/exe/comm)与关键路径,结合-w路径监控和-a always,exit系统调用规则,并前置-never排除干扰,确保日志可追溯、无噪声。

auditd 审计关键进程的文件操作,核心不是“审计所有文件访问”,而是锁定进程身份 + 捕获其对关键路径的系统调用行为。直接按 PID 动态监控不可靠,应结合 auid(登录会话)、exe(可执行路径)或 comm(进程名)等稳定标识,再配合 -w 路径监控或 -a always,exit 系统调用规则,实现精准、可追溯的审计。
明确你要监控的关键进程与路径
先确认目标:是某个运维脚本(如 /opt/app/deploy.sh)修改配置?还是某服务进程(如 nginx)意外写入 /tmp?不同场景对应不同策略。避免泛泛监控 / 或 /var,只聚焦高风险组合,例如:
- 进程
/usr/bin/python3→ 写入/etc/ - 进程
curl→ 向/tmp/下创建可执行文件 - 用户 auid=1001(管理员)→ 修改
/etc/nginx/conf.d/
用 -w 规则监控关键路径,打上进程上下文标签
对静态敏感路径(如 /etc/ssh/sshd_config),直接使用 -w 最简洁,它自动覆盖 openat、write、truncate 等写相关调用:
-w /etc/ssh/sshd_config -p wa -k sshd_mod -w /tmp/ -p wa -k tmp_write
但仅这样无法区分是谁写的。需配合 ausearch 时按 auid 或 exe 过滤,例如:
ausearch -k sshd_mod -ui 0 --start recent | aureport -f -i
查 root(auid=0)最近对 sshd_config 的所有操作。
用 -a always,exit 规则绑定进程与路径行为
当需精确控制“谁在什么路径下做了什么”,必须用系统调用级规则。例如,审计所有由 /usr/local/bin/backup.sh 启动的进程对 /data/ 的写打开:
-a always,exit -F arch=b64 -S openat,open -F exe="/usr/local/bin/backup.sh" -F dir=/data/ -F perm=w -k backup_write
说明:
-
-F exe=锁定父进程二进制路径,比comm更防伪造 -
-F dir=/data/是前缀匹配,覆盖/data/db.sql、/data/logs/err.log -
-F perm=w确保只捕获写意图(O_WRONLY/O_RDWR),排除只读打开
排除干扰,确保日志干净可用
编辑器临时文件、备份脚本、包管理器操作会淹没真实事件。必须前置 never 规则:
-a never,exit -F path=/etc/.sshd_config.swp -F perm=w -a never,exit -F path=/etc/sshd_config.rpmsave -F perm=w -a never,exit -F exe=/usr/bin/dpkg -F dir=/etc/ -F perm=w
注意:never 规则必须写在对应 always 规则之前,auditd 按顺序匹配,先中即止。
验证与日常检查方法
规则加载后,别等异常——主动触发并查日志:
- 手动改一个被监控的文件,再运行
ausearch -k sshd_mod -i - 启动目标进程(如
sudo -u appuser /opt/app/run.sh),然后查ausearch -m execve -F exe="/opt/app/run.sh" --start recent - 检查是否漏日志:
sudo auditctl -s | grep "enabled"确认 syscall 审计开启;sudo aureport -x --start today | head -10快速看今日执行命令分布
不复杂但容易忽略











