要查清“谁在什么时候改了哪个文件的权限”,必须依赖auditd审计日志,因find仅能显示ctime变更结果,无法溯源操作者、命令及上下文;auditd通过监控chmod/chown等系统调用,精确记录UID、PID、exe路径、目标文件和时间戳,并支持规则持久化与aureport解析。

要查清“谁在什么时候改了哪个文件的权限”,单靠 find 命令做不到溯源——它只能看到变更结果(如 ctime 更新),无法记录操作者、命令、进程或上下文。真正能回答“是谁改的”,必须依赖系统级审计日志。
核心方法:启用并查询 auditd 审计日志
Linux 内置的 auditd 是唯一能精确捕获 chmod/chown 等权限操作原始行为的机制。它记录 UID、PID、命令路径、目标文件、时间戳,且不可绕过(即使 root 执行)。
- 添加监控规则(以 x86_64 系统为例):
sudo auditctl -a always,exit -F arch=b64 -S chmod,fchmod,fchmodat,chown,fchown,fchownat,setxattr -k perm_change - 立即生效,无需重启服务;规则持久化需写入
/etc/audit/rules.d/下的 .rules 文件 - 查询最近 24 小时所有权限变更记录:
sudo ausearch -k perm_change --start yesterday | aureport -f -i
输出含:执行用户、终端、可执行文件路径、目标文件绝对路径、时间
辅助手段:从 auth.log 或 secure 中找 sudo 权限操作
如果权限变更是通过 sudo chmod 执行的,这类命令会先记入认证日志,可作为交叉验证线索:
- Debian/Ubuntu 系统:
grep "sudo.*chmod\|sudo.*chown" /var/log/auth.log | tail -20 - RHEL/CentOS 系统:
grep "sudo.*chmod\|sudo.*chown" /var/log/secure | tail -20 - 注意:该方式仅覆盖走 sudo 的操作,不记录直接 root 执行或脚本调用
快速现场排查:结合 stat 和 last 定位可疑时段
当审计未启用又需紧急响应时,可用静态信息缩小范围:
- 对目标文件运行
stat /path/to/file,重点看 Change 时间(即 ctime),确认是否在预期窗口内 - 用
last -n 50查看同一时段有哪些用户登录过,尤其关注 root 或高权限账户 - 用
who -u或w查当前活跃会话,比对登录时间与 ctime 是否接近
为什么不能依赖 find -ctime -1 或 -cmin -1440 追溯“谁”
这些 find 参数只反映 inode 元数据变更的时间快照,本质是“发生了变更”,而非“谁触发的”。它们无法区分:
- 是管理员手动 chmod,还是 cron 脚本自动执行
- 是本地终端操作,还是 SSH 远程调用
- 是 root 直接运行,还是普通用户通过 sudo 提权执行
因此,find 适合初筛“哪些文件被改过”,但绝不能替代 auditd 回答“谁、何时、如何改的”。


















