启用auditd并监控特定文件权限变更需三步:先启动服务(systemctl start enable auditd),再用auditctl -w /path -p wa -k key添加临时规则,最后将规则写入/etc/audit/rules.d/*.rules并执行augenrules --load持久化。

如何启用 auditd 并监控特定文件的权限变更
CentOS 7 默认不审计 chmod 或 chown 操作,必须手动配置 auditd 才能捕获这类事件。直接改完权限再查日志,什么都不会留下。
先确认服务已安装并运行:
sudo systemctl is-active auditd
若返回 inactive,需启动并设为开机自启:
sudo systemctl start auditdsudo systemctl enable auditd
然后添加规则,监听对目标文件(如 /etc/passwd)的权限或所有权修改:
sudo auditctl -w /etc/passwd -p wa -k passwd_perm_change
其中:-p wa 表示监控 write(含 chmod、chown、chgrp 等导致元数据变更的操作)和 attribute change(即权限位本身);-k 是自定义键名,便于后续过滤。
为什么 auditctl -w 规则重启后失效
auditctl 添加的规则是运行时生效,系统重启或 auditd 重载后自动清空。生产环境必须写入持久化配置。
将规则写入 /etc/audit/rules.d/ 下的 .rules 文件(例如 99-perm-monitor.rules):
-w /var/www/html/config.php -p wa -k web_config_perm
注意:文件名必须以 .rules 结尾,且不能包含空格或特殊字符;规则行首不能有空格。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
加载新规则:
sudo augenrules --load
该命令会合并所有 .rules 文件并重载 auditd。执行后检查是否生效:
sudo auditctl -l | grep web_config_perm
怎么从 audit 日志里准确提取 chmod 操作记录
ausearch 比直接 cat /var/log/audit/audit.log 更可靠,它能按关键字、时间、系统调用精准筛选。
查所有对 /tmp/test.sh 的权限变更(含 chmod、chown):
sudo ausearch -f /tmp/test.sh -m chmod, chown, chgrp
查某次具体 chmod 644 调用(需知道大致时间):
sudo ausearch -m chmod -i --start today | grep "644"
关键字段说明:cwd= 是操作时的工作目录,name= 是被修改的文件路径,a0= 到 a2= 是系统调用参数(如 a1="644" 表示八进制权限值),uid= 和 exe= 能定位执行者和命令路径。
常见误配与性能隐患
审计不是“开个开关就完事”。几个容易踩的坑:
- 监控整个
/etc目录(-w /etc -p wa)会导致海量日志,auditd可能因队列满而丢事件,甚至拖慢系统响应 -
-p x(执行权限变更)对目录无效,因为目录的x权限本质是“可进入”,chmod改它不会触发audit事件 - 使用
chmod u+s设置 SUID 时,auditd记录的是setxattr系统调用,不是chmod—— 必须加-S setxattr规则才能捕获 - 日志默认存在
/var/log/audit/audit.log,但磁盘写满会导致auditd停止记录,建议配合logrotate或远程日志转发
真正要审计权限变更,核心就三点:明确目标路径、用 -p wa、规则落地到 .rules 文件并 augenrules --load。其余都是围绕这三点的校验和兜底。










