黑帽联盟

 找回密码
 会员注册
查看: 2899|回复: 0
打印 上一主题 下一主题

[运维监控] inotify监控文件系统事件(增删改)

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    前天 13:01
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    网络中,安全性第一,系统文件发生改变,我们这里要做一些措施,具体介绍如下

    1. Inotify 机制概述1.1. Inotify 介绍
    在日常的运维过程中,经常需要备份某些文件,或者对系统的某些文件进行监控,比如重要的配置文件等。如果需要作到实时同步或者监控,就需要使用内核的inotify机制
    Inotify 是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能
    • Inotify 不需要对被监视的目标打开文件描述符,而且如果被监视目标在可移动介质上,那么在 umount 该介质上的文件系统后,被监视目标对应的 watch 将被自动删除,并且会产生一个 umount 事件。
    • Inotify 既可以监视文件,也可以监视目录。
    • Inotify 使用系统调用而非 SIGIO 来通知文件系统事件。
    • Inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作select 和 poll 来监视文件系统的变化。

    1.2. Inotify 可监视的文件系统事件
    • IN_ACCESS : 即文件被访问
    • IN_MODIFY : 文件被 write
    • IN_ATTRIB : 文件属性被修改,如 chmod、chown、touch 等
    • IN_CLOSE_WRITE : 可写文件被 close
    • IN_CLOSE_NOWRITE : 不可写文件被 close
    • IN_OPEN : 文件被open
    • IN_MOVED_FROM : 文件被移走,如 mv
    • IN_MOVED_TO : 文件被移来,如 mv、cp
    • IN_CREATE : 创建新文件
    • IN_DELETE : 文件被删除,如 rm
    • IN_DELETE_SELF : 自删除,即一个可执行文件在执行时删除自己
    • IN_MOVE_SELF : 自移动,即一个可执行文件在执行时移动自己
    • IN_UNMOUNT : 宿主文件系统被 umount
    • IN_CLOSE : 文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
    • IN_MOVE : 文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
    注:上面所说的文件也包括目录

    1.3. Inotify内核版本支持
    • 从kernel 2.6.13开始,Inotify正式并入内核,RHEL5已经支持.
    • 看看是否有 /proc/sys/fs/inotify/目录,以确定内核是否支持inotify  [root@RHEL5 Rsync]# ls -l /proc/sys/fs/inotify/  total 0  -rw-r--r-- 1 root root 0 Oct  9 09:36 max_queued_events  -rw-r--r-- 1 root root 0 Oct  9 09:36 max_user_instances  -rw-r--r-- 1 root root 0 Oct  9 09:36 max_user_watches

    1.4. inotify 的默认内核参数
    • /proc/sys/fs/inotify/max_queued_events 默认值: 16384 该文件中的值为调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值得事件被丢弃,但会触发IN_Q_OVERFLOW事件
    • /proc/sys/fs/inotify/max_user_instances 默认值: 128 指定了每一个real user ID可创建的inotify instatnces的数量上限
    • /proc/sys/fs/inotify/max_user_watches 默认值: 8192 指定了每个inotify instance相关联的watches的上限
    注意: max_queued_events 是 Inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大
    如果你在日志中看到Event Queue Overflow,说明max_queued_events太小需要调整参数后再次使用.

    2. Inotify 在系统中使用2.1. linux shell 下使用inotify
    • 下载安装 inotify-tools源码 rhel5/centos5 RPM包
      • inotifywait 仅执行阻塞,等待 inotify 事件。您可以监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等)
        在 shell 脚本中使用 inotifywait。
      • inotifywatch 收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
    • shell脚本示例  [root@localhost ]# cat /tmp/test.sh
    • #!/bin/bash  inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f %e' --event modify,delete,create,attrib  /home/admin | while read  date time file event
    • do
    •    case $event in
    •            MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
    •                   echo $event'-'$file;;
    •             MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
    •                   echo $event'-'$file;;
    •     esac
    • done

    • 执行脚本,结果输出(这里测试删除了一个目录 rm -fr cronolog-1.6.2.bak)
    • [root@localhost]# /tmp/test.sh
    • DELETE-/home/admin/cronolog-1.6.2.bak/COPYING
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/cronolog.info
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/cronolog.texi
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/Makefile.am
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/Makefile.in
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/texinfo.tex
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/cronosplit.1m
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/Makefile
    • DELETE-/home/admin/cronolog-1.6.2.bak/doc/cronolog.1m
    • DELETE,ISDIR-/home/admin/cronolog-1.6.2.bak/doc
    • DELETE-/home/admin/cronolog-1.6.2.bak/TODO
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/cronotest.c
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/cronolog.c
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/cronoutils.h
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/cronoutils.c
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/Makefile.am
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/Makefile.in
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/cronosplit.in
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/Makefile
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/cronosplit
    • DELETE-/home/admin/cronolog-1.6.2.bak/src/config.h
    • DELETE,ISDIR-/home/admin/cronolog-1.6.2.bak/src
    • DELETE-/home/admin/cronolog-1.6.2.bak/lib/getopt1.c
    • DELETE-/home/admin/cronolog-1.6.2.bak/lib/getopt.h
    • DELETE-/home/admin/cronolog-1.6.2.bak/lib/Makefile.am
    • DELETE-/home/admin/cronolog-1.6.2.bak/lib/Makefile.in
    • DELETE-/home/admin/cronolog-1.6.2.bak/lib/localtime_r.c
    • DELETE-/home/admin/cronolog-1.6.2.bak/lib/getopt.c
    • DELETE,ISDIR-/home/admin/cronolog-1.6.2.bak

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部