应监控/etc/passwd、/etc/shadow、/etc/sudoers等关键文件的attrib、move_self、delete_self事件,因权限变更即元数据修改;可用inotifywait命令实时记录日志,或封装为守护脚本实现邮件/系统日志告警。

可以通过 inotifywait 搭配简单脚本,持续监听关键文件(如 /etc/passwd、/etc/shadow、/etc/sudoers)的权限(chmod)、所有者(chown)或属性(chattr)变更,并在发生时立即告警或记录日志。
监控哪些事件和文件最实用
权限变动本质是文件元数据(metadata)被修改,对应 inotify 的以下事件:
-
ATTRIB:触发于
chmod、chown、chgrp、chattr等操作 - MOVE_SELF 和 DELETE_SELF:需额外关注——重命名或删除关键文件也属高危行为
建议优先监控:
-
/etc/passwd、/etc/group(用户/组结构) -
/etc/shadow(密码哈希,权限应为000或600) -
/etc/sudoers及/etc/sudoers.d/目录(提权配置) -
/root/.bash_history(若需审计管理员操作痕迹)
一行命令快速启动基础监控
直接运行以下命令,即可实时打印权限相关变更:
inotifywait -m -e attrib,move_self,delete_self -r /etc/ | while read path action file; do echo "$(date '+%F %T') - $path$file → $action" >> /var/log/perm-monitor.log; done
说明:
-
-m:持续监听,不退出 -
-e attrib,move_self,delete_self:只捕获元数据和自身变动事件 -
-r /etc/:递归监控整个/etc(生产环境建议缩小范围,只指定具体文件) - 输出自动追加到日志,含精确时间戳,便于溯源
升级为守护脚本并自动告警
将监控封装为后台服务,支持邮件/系统日志/Telegram 推送:
#!/bin/bash
LOG="/var/log/perm-alert.log"
ALERT_CMD='logger -t "perm-monitor" "CRITICAL: $(date): $EVENT detected on $FILE"'
inotifywait -m -e attrib,move_self,delete_self /etc/passwd /etc/shadow /etc/sudoers 2>/dev/null | while read FILE EVENT; do
echo "$(date '+%F %T') ALERT: $EVENT on $FILE" >> "$LOG"
eval "$ALERT_CMD"
# 可在此添加:mail -s "Perm Alert" admin@example.com done
保存为 /usr/local/bin/perm-watch.sh,设可执行权限,并用 systemd 托管为开机自启服务,确保长期稳定运行。
注意事项与避坑提示
inotify 本身不校验“是否合理”,只反映系统调用结果。需注意:
- 不要监控整个
/或大目录——inotify 资源有限,可能报No space left on device(调整/proc/sys/fs/inotify/max_user_watches可缓解) -
ATTRIB不区分是 root 还是普通用户改的,如需溯源,应结合auditd(例如aureport -m -i查 chmod 记录) - 脚本中避免使用
echo直接输出到终端——后台运行时会丢失;一律写入日志或调用logger - 测试时可用
sudo chmod 644 /etc/passwd触发一次事件,验证流程是否通










