Ubuntu 中利用 inotify 提升系统安全性的实践
一 安全价值与能力边界
- inotify 是 Linux 内核自 2.6.13 起提供的文件系统事件机制,可细粒度监控如 IN_MODIFY、IN_CREATE、IN_DELETE、IN_ATTRIB、IN_MOVED_FROM/TO、IN_CLOSE_WRITE 等事件,用于实时发现关键目录与配置文件的异常变更。它高效、异步,适合做“文件完整性变动告警”和“可疑写入拦截”的触发器。
- 边界与定位:inotify 只能告诉你“哪个路径发生了什么事件”,不能直接识别是哪个进程或哪个用户触发的变更;若需“用户/进程溯源”,应与 auditd 联动使用。
- 适用场景:对 /etc、/usr/local/bin、/var/www、~/.ssh、/root 等敏感路径的变更进行实时告警或联动阻断,缩短入侵发现时间。
二 快速落地方案
- 安装工具:在 Ubuntu 上安装命令行工具集 inotify-tools(提供 inotifywait/inotifywatch)。
- 最小可用监控脚本(记录变更并告警):
- 监控关键目录,记录时间、路径、事件;对敏感扩展名(如 .so、.sh、.py)触发即时告警。
- 日志落盘并做权限收敛,避免被篡改。
- 示例(可直接改造上线):
- 安装:sudo apt-get update && sudo apt-get install -y inotify-tools
- 监控脚本要点:
- 事件集:-e modify,create,delete,attrib,move,close_write
- 日志示例:/var/log/inotify_audit.log(建议 600 权限,root 属主)
- 简单告警:检测到可疑后缀或 /etc/ 变更时 echo 到控制台并写入 syslog(logger)
- 运行方式:
- 前台调试:/path/monitor.sh
- 生产建议:nohup /path/monitor.sh & 或做成 systemd 服务(Restart=always,指定专用低权用户)。
三 与 auditd 联动实现用户与进程溯源
- 仅靠 inotify 无法判定“谁改了文件”。使用 auditd 记录访问者身份,再用 inotify 触发“取证+告警”联动。
- 配置 auditd 规则(示例:监控某目录,仅记录普通用户):
- /etc/audit/rules.d/audit.rules 中添加:
- -a always,exit -F auid>=1000 -F auid!=4294967295 -F path=/path/to/target -k user_file_access
- 使配置生效:sudo systemctl restart auditd
- 在 inotify 事件处理中调用 ausearch -k user_file_access -ts recent 查询最近与该路径相关的审计记录,提取 auid 并映射为用户名,写入安全日志,实现“事件+身份”的闭环。
四 性能与稳定性加固
- 合理设置 inotify 内核参数,避免“watch limit reached”与事件丢失:
- 查看:cat /proc/sys/fs/inotify/{max_user_watches,max_user_instances,max_queued_events}
- 按需调优(示例值,视业务与内存而定):
- echo 100000 > /proc/sys/fs/inotify/max_user_watches
- echo 128 > /proc/sys/fs/inotify/max_user_instances
- echo 1024 > /proc/sys/fs/inotify/max_queued_events
- 持久化:写入 /etc/sysctl.d/99-inotify.conf 并执行 sysctl -p。
- 事件去抖与速率限制:对高频事件(如日志滚动、编辑器临时文件写入)做合并/节流,避免告警风暴与资源耗尽。
- 监控范围收敛:仅监控必要目录与事件,避免递归过深;对大目录使用分层或白名单/黑名单策略。
- 运行身份与最小权限:监控服务使用专用低权用户运行;日志文件 600 权限、root 属主;必要时通过 sudo 授权最小集的审计查询能力。
- 高可用:以 systemd 管理守护进程(Restart=always、RestartSec=5),并将标准输出/错误接入 syslog,便于集中采集与审计。
五 典型安全场景与事件选择
- 配置文件防篡改:监控 /etc 与关键应用配置目录,关注 IN_MODIFY、IN_ATTRIB、IN_MOVED_FROM/TO、IN_CREATE、IN_DELETE;变更即告警并留存取证信息。
- Web 目录防挂马:监控 /var/www、/usr/share/nginx/html 等,重点 IN_CREATE、IN_CLOSE_WRITE(上传/写入可执行文件)与 IN_MOVED_TO(替换)。
- 认证密钥安全:监控 ~/.ssh/authorized_keys、/root/.ssh,对新增/替换立即告警。
- 可执行文件落地监控:监控 /usr/local/bin、/tmp、/dev/shm,对 IN_CLOSE_WRITE 的可疑二进制立即隔离并告警。
- 事件选择建议:优先组合 IN_MODIFY、IN_ATTRIB、IN_CREATE、IN_DELETE、IN_MOVED_FROM/TO、IN_CLOSE_WRITE,覆盖写入、属性变更、移动/重命名与关闭写入等关键动作。