用 auditd 记录关键文件的变更
发布时间:2026-07-23 09:14       
更新时间:2026-07-24 06:33
passwd 文件被改了,却没人承认是谁动的——多管理员共管的服务器上,这类扯皮并不少见。Linux 自带的 auditd(Linux 审计守护进程)能把谁、什么时候、用什么命令改了哪个文件记成日志,装好即用,业务代码一行不用动。
一、安装与启动
```
# CentOS
yum install -y audit && systemctl enable --now auditd
# Ubuntu
apt install -y auditd && systemctl enable --now auditd
```
规则文件放在 /etc/audit/rules.d/ 目录下,改完必须执行 augenrules --load 重新加载,只改文件不生效是新手最常踩的空转。
二、给关键文件加监视规则
新建 /etc/audit/rules.d/keyfiles.rules,写入:
```
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd
```
字段含义:-w 指定监视路径;-p 过滤操作类型,w 是写、a 是属性变更,换成 x 则监视执行动作;-k 是自定义关键字,专门用于事后检索。规则对目录同样有效,比如 -w /etc/nginx/ -p wa -k nginxconf 可以盯住整个配置目录。两个细节:规则里的路径必须是绝对路径,走符号链接的路径不生效,这是规则静默失效的常见原因;规则加载后用 auditctl -l 核对,输出应与规则文件完全一致。
三、检索记录
有人动过之后,这样查:
```
ausearch -k identity -i
```
-i 让输出可读化。一条典型记录会包含操作者的 uid、进程可执行文件路径和命令名,能直接定位到操作者与来源终端。要按文件维度看汇总,用 aureport --file,哪些文件被谁改过一目了然。
四、注意事项
auditd 只记录、不拦截,想阻止改动要用文件属性(chattr +i)或权限控制配合。日志量随规则数量上涨,/etc/audit/auditd.conf 里可以调整 max_log_file 与 max_log_file_action(如 rotate)控制磁盘占用。容器环境要谨慎:内核审计是宿主机全局的,规则写多了会把日志撑爆,也拖慢系统调用。
还有一层边界要心里有数:审计日志本身存在本机,攻击者拿到 root 同样能删。对安全要求高的机器,把 /var/log/audit/ 通过 rsyslog 定时转发到独立的日志服务器,异地留一份才叫完整。规则不是越多越好,每条规则都挂在系统调用路径上,监视 /tmp 这类高频写入目录会把机器拖慢,只盯真正要紧的文件。