auditd是唯一可靠方案,需用-p a监控属性变更,路径须绑定真实inode,通过auid识别原始操作者,并外接脚本实现即时告警。

要实时监控 Linux 目录下权限变更事件,核心是捕获 chmod、chown、chgrp 等修改文件属性(attribute)的操作。这类行为不改变文件内容,但直接影响访问控制,必须用内核级审计机制精准识别——auditd 是唯一可靠方案,inotify 无法提供操作者身份和命令上下文。
只监控属性变更,避免日志爆炸
权限变动属于文件元数据修改,对应内核系统调用 chmod、chown、fchownat 等,不是读写行为:
- 必须使用
-p a(attribute),不能混用-p w或-p r -
-p wa会把覆盖写入(如echo > file)也计入,导致大量干扰日志 -
-p r完全无关,且高频触发(如ls、getpwent),毫无审计价值
路径必须真实绑定 inode
auditd 的 -w 规则基于文件系统 inode 绑定,不是字符串匹配:
- 先运行
ls -i /etc确认目标是真实目录,非软链接(如/etc → /usr/etc) - 规则中路径必须与
ls -i输出完全一致:大小写、末尾斜杠、空格均影响生效 - 若监控
/root/.ssh/authorized_keys,需确保/root/.ssh存在且权限为700
锁定真实操作者,绕过 sudo 伪装
UID 可被切换,但原始登录用户 ID(auid)不可伪造:
-
auid=字段标识谁最初登录并触发了操作,哪怕后续执行sudo chmod -
comm=显示触发命令名(如comm="chmod"或comm="ansible") -
exe=显示实际执行程序路径(如exe="/usr/bin/chmod") - 如只需告警非 root 操作,规则中加
-F auid!=0提前过滤
实现即时告警的可行路径
auditd 本身不发通知,需外接解析层:
- 轻量级:写循环脚本,每 5 秒执行
ausearch -k etc_attr_change -m SYSCALL --start recent -i | grep "auid=",发现新条目即logger或mail - 生产级:配置
audispd插件,将匹配事件转发至 Python 脚本,自动提取auid、comm、exe并推送钉钉/企业微信 - 注意:不要在循环中做耗时操作(如网络请求),防止事件积压丢失
不复杂但容易忽略


















