温馨提示×

如何利用inotify进行系统安全监控

小樊
38
2025-12-30 03:48:01
栏目: 编程语言

利用 inotify 进行系统安全监控

一 核心思路与适用场景

  • 实时守护关键路径:对**/etc//root//var/log/~/.ssh/authorized_keys等路径监听create、delete、modify、attrib、move**等事件,第一时间发现未授权变更。
  • 发现可疑行为:对**/tmp//dev/**等临时与设备目录的异常创建/删除进行告警,辅助暴露隐藏进程或后门。
  • 权限变更监测:重点盯SUID/SGID位异常设置,及时阻断提权路径。
  • 联动处置:与auditd做用户级溯源,与iptables/fail2ban做自动封禁,形成检测—响应闭环。
  • 重要限制:inotify 仅适用于本地文件系统,不支持NFS/远程挂载;高并发写入下事件可能丢失;需关注内核max_user_watches等资源上限。

二 快速落地步骤

  • 安装工具
    • Debian/Ubuntu:sudo apt-get install inotify-tools
    • CentOS/RHEL:sudo yum install inotify-tools
  • 最小可用监控脚本(记录到安全日志并简单告警)
    • 建议以最小权限运行(非 root),日志文件权限设为600
    • 示例:
      • 监控项:/etc/passwd、/root/.ssh/authorized_keys、/tmp
      • 事件:modify、create、delete、attrib、move
    • 参考命令与脚本:
      • inotifywait -mr --timefmt ‘%F %T’ --format ‘%T %w%f %e’ \ -e modify -e create -e delete -e attrib -e move \ /etc/passwd /root/.ssh/authorized_keys /tmp | while IFS= read -r ts path evt; do
        echo “[$ts] $evt $path” >> /var/log/inotify_security.log

        简单示例:发现 /tmp 下可执行文件即告警

        [[ “$path” == /tmp/* && “$evt” == CREATE && -x “$path” ]] && \ echo “ALERT: $path created and executable!” | mail -s “Inotify Alert” sec@example.com
        done
  • 运行与守护
    • 使用nohup或 systemd 服务托管脚本,确保重启后自动拉起;日志接入 rsyslog 或集中化平台便于审计与告警。

三 关键监控清单与处置建议

监控目标 关注事件 典型风险 建议处置
/etc/passwd、/etc/shadow、/etc/ssh/sshd_config modify、attrib 账户与认证被篡改、后门植入 立刻告警;从可信备份恢复;复核最近登录与 sudo 使用
~/.ssh/authorized_keys create、modify 新增公钥获取持久化 立即移除可疑密钥;禁用相关账号或强制改密
/usr/bin、/bin、/sbin 等核心二进制 modify、attrib 命令劫持、rootkit 告警并下线受影响主机;从离线介质恢复;检查 ld.so.preload
SUID/SGID 文件(如 /usr/local/bin) attrib 非法提权 发现即降权或移除 SUID;审计变更来源
/tmp、/dev/shm、/var/tmp create、delete、move 恶意可执行文件、隐藏文件 告警并隔离文件;限制 /tmp 执行权限(mount -o noexec,nosuid)
/var/log/ modify、create、move 日志清理/篡改掩盖入侵 触发取证与集中日志回灌;保护日志完整性(如完整性校验)

四 溯源与自动响应

  • 与 auditd 联动实现“谁改了什么”
    • 添加审计规则(示例):
      • sudo auditctl -w /etc/passwd -p wa -k passwd_change
      • 或写入 /etc/audit/rules.d/audit.rules:
        -a always,exit -F path=/etc/passwd -F perm=wa -k passwd_change
    • 重启 auditd:sudo systemctl restart auditd
    • 事件发生时,用 ausearch 按关键字检索:ausearch -k passwd_change -ts recent
    • 在 inotify 触发器中调用 ausearch/ausyscall 等提取auid/uid、pid、ppid、命令行,写入安全日志,实现用户级溯源
  • 与防火墙/IDS 联动
    • 当检测到 SSH 暴力破解相关日志写入(如 iptables 日志)时,inotify 捕获写入事件,自动提取攻击源 IP 并执行:
      • iptables -A INPUT -s <攻击IP> -j DROP
    • 同时核查 ~/.ssh/authorized_keys 是否被植入公钥,防止绕过口令登录。

五 稳定性与安全配置

  • 资源与性能
    • 检查与调优内核参数:
      • cat /proc/sys/fs/inotify/{max_user_watches,max_user_instances,max_queued_events}
      • 按需增大(如 sysctl -w fs.inotify.max_user_watches=524288),避免“Too many open files/队列溢出”。
    • 避免过宽监控范围(例如不要 inotifywait -m /),减少噪声与资源占用。
  • 运行与权限
    • 遵循最小权限原则:监控脚本尽量以非 root运行;必要时用 sudo 精细化授权。
    • 日志安全:/var/log/inotify_security.log 设为600,仅允许安全审计账户读取。
    • 加固运行环境:启用 SELinux/AppArmor,限制监控进程可调用的命令与路径;配合 firewalld/iptables 控制管理面访问。
  • 可靠性
    • 高并发写入场景引入事件队列/缓冲去抖(相同文件短时间多次变更合并处理),降低漏报与抖动。
    • 定期更新 inotify-tools 与内核,修复已知问题。

0