要准确记录修改文件权限的进程,必须用 auditd 的 -p a 监控属性变更,覆盖 chmod、chown、touch 等元数据操作;路径需真实稳定,避免软链和虚拟文件系统;规则须写入 /etc/audit/rules.d/ 并用 augenrules 加载。

要准确记录“哪个进程修改了特定文件的权限”,关键不是监控读或写,而是捕获 属性变更(attribute change) 这一动作本身。Linux 中修改文件权限(如 chmod)、所有者(chown)、时间戳(touch -a/-m)等操作,触发的是 chmod、chown、utimensat、openat(带 O_TRUNC 或 O_CREAT 标志)等系统调用,auditd 必须明确监听这些行为,并附带完整上下文。
必须用 -p a 监控属性变更
仅加 -p w(写入)无法捕获 chmod/chown/touch 等操作——它们不改文件内容,只动元数据。
正确做法是使用 -p a(attribute),它覆盖:
-
chmod、chown、chgrp -
touch -a、touch -m、touch -t -
setxattr、removexattr(扩展属性) - 部分
openat+fchmodat场景
例如监控 /etc/ssh/sshd_config 的权限或属主变动:sudo auditctl -w /etc/ssh/sshd_config -p a -k sshd_attr_mod
路径必须真实且稳定
auditd 的 -w 基于 inode 绑定路径,不跟随软链接。如果目标文件是软链(如 /etc/shadow-),规则会失效。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先确认真实路径:
ls -i /etc/ssh/sshd_config - 若存在软链,应监控实际目标文件(
readlink -f /etc/ssh/sshd_config) - 避免监控
/proc、/sys、/dev等虚拟文件系统——它们无真实 inode,-w不生效
查日志时重点看 comm、exe 和 auid
执行 sudo ausearch -k sshd_attr_mod -i 后,一条典型日志包含:
-
comm="chmod":触发命令名(用户输入的命令) -
exe="/usr/bin/chmod":实际执行的二进制路径(防伪装) -
auid=1001:原始登录用户 ID(即使用了su或sudo,也能追溯到最初登录者) -
uid=0:当前有效用户 ID(说明是以 root 身份执行) -
cwd="/root":操作发生时所在目录
若 comm="(unknown)",说明进程已退出,需结合 exe 和 ppid(父进程 ID)向上溯源。
永久生效不能靠 auditctl 临时加
auditctl -w 添加的规则在 reboot 或 systemctl restart auditd 后全部丢失。
- 新建永久规则文件:
sudo tee /etc/audit/rules.d/sshd-attr.rules - 写入规则(每行一条,无缩进):
-w /etc/ssh/sshd_config -p a -k sshd_attr_mod - 加载:
sudo augenrules --load - 验证:
sudo auditctl -l | grep sshd_attr_mod应有输出
注意:不要直接编辑 /etc/audit/audit.rules,它由 augenrules 自动生成,手动改会被覆盖。

















