inotify 本身不记录访问用户,仅捕获文件系统事件,需结合 auditd 的 auid 实现完整溯源;常用 inotifywait 监控敏感路径,配合事件过滤、时间戳输出及权限控制构建实用审计方案。

Linux 文件访问审计中,inotify 不直接记录“谁访问了文件”,但它能高效捕获文件系统级事件(如修改、创建、权限变更),配合其他机制可构成实用的敏感路径监控方案。关键在于明确它的能力边界——它监听内核通知,不自带用户身份信息,需与 auditd 或环境上下文结合才能实现完整溯源。
聚焦敏感路径的 inotify 监控配置
inotifywait 是最常用工具,轻量、原生、低开销。监控 /etc、/root、/var/log 等目录时,优先关注可能预示攻击的操作:属性变更(attrib)、写入关闭(close_write)、文件创建(create)、删除(delete)等。
使用
-r递归监控整个目录树,但注意max_user_watches限制(默认常为 8192),必要时调大:echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
并持久化:在/etc/sysctl.conf中添加fs.inotify.max_user_watches = 524288指定精准事件,避免日志泛滥:
inotifywait -m -r -e attrib,close_write,create,delete,move_self,moved_to /etc输出带时间戳和完整路径,便于关联分析:
--timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w%f %e'
补全用户身份:必须依赖 auditd 关联 auid
inotify 本身无法输出操作用户(whoami 在脚本里只反映监控进程自身用户)。真正要回答“谁改的”,需用 auditd 打标并提取 auid(审计用户ID,即登录用户的原始 UID,不受 su/sudo 切换影响)。
为
/etc添加 auditd 规则(写入/etc/audit/rules.d/etc.rules):-w /etc -p wa -k etc_audit重启生效:
sudo augenrules --load && sudo systemctl restart auditd查看真实操作者:
sudo ausearch -k etc_audit | aureport -f -i | grep "auid!="
linux-sysadmin下载Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
这样,inotify 提供毫秒级事件触发,auditd 提供用户+命令+路径的完整上下文,二者互补而非替代。
构建可落地的实时响应脚本
单纯打印日志意义有限。建议将 inotifywait 作为事件触发器,调用轻量逻辑做初步判断再交由 auditd 深度核查。
例如,监控到 /etc/shadow 被 close_write,立即执行:
sudo ausearch -m SYSCALL -f /etc/shadow -i --start recent | grep -E "(auid|comm=|exe=)"
快速确认是否为合法运维行为(如 pwconv 或 usermod),否则触发告警。
脚本中避免 while read | do ... done 管道陷阱(子 shell 变量丢失、阻塞丢事件),改用循环调用:
while true; do event=$(inotifywait -t 30 -q -e close_write /etc/shadow 2>/dev/null) [ -n "$event" ] && logger -t "etc-watch" "shadow modified: $(date)" done
权限与安全约束不能忽略
- inotifywait 进程需有读取目标目录的权限。监控
/root必须以 root 运行;监控/home/alice/.ssh则需 alice 权限或 root。 - 脚本本身不应以 root 长期运行无必要功能,可用
sudo -u alice限定上下文。 - 输出日志路径(如
/var/log/inotify-etc.log)应设为640,属主 root,属组 adm 或 syslog,防止普通用户篡改或读取。
日志协同与误报控制
inotify 日志是“发生了什么”,auditd 日志是“谁干的、怎么干的”。两者时间戳可能差几十毫秒,但足够对齐。建议:
- 统一时间源(启用 systemd-timesyncd 或 ntp)
- inotify 日志用
--timefmt输出 ISO 格式,auditd 保持log_format = ENRICHED - 对高频事件(如编辑器临时文件
*.swp)用--exclude '.*\.swp$'过滤,减少噪音
不复杂但容易忽略










