Always kee|

505donkey

园龄:6年3个月粉丝:6关注:0

2024-06-16 10:17阅读: 171评论: 0推荐: 0

fanotify介绍

简介

Fanotify(Filesystem wide access notification)是Linux内核提供的一种文件系统事件通知机制,用于监控文件系统的变化。它是inotify的增强版本,提供了更强大的功能和更高的扩展性。

主要功能

  1. 文件系统事件通知
    Fanotify可以监听文件系统中的各种事件,例如文件的读、写、打开、关闭等操作。当这些事件发生时,Fanotify会通知监听程序。

  2. 文件系统监控和管控
    Fanotify支持对整个文件系统的监控,可以实现全文件系统的监测和控制。它支持三种模式:directed模式、per-mount模式和global模式。

    • Directed模式:类似于inotify,直接工作在被监控对象的inode上,一次只能监控一个对象。
    • Per-mount模式:工作在挂载点上,例如监控挂载在/home目录下的所有文件系统变化。
    • Global模式:监控整个文件系统,任何变化都会通知监听程序,适用于杀毒软件等应用。
  3. 访问控制
    Fanotify 增加了访问控制功能,这是inotify所不具备的。它可以在文件打开或关闭之前进行权限判断,例如FAN_OPEN_PERM和FAN_CLOSE_PERM事件。程序员可以注册一个函数来判断是否允许打开或关闭文件,并将结果写入内核。

  4. 监听者级别划分
    Fanotify允许多个监听者监听同一个文件对象,并可以设置监听者的级别。Fanotify将监听者分为三个级别:FAN_CLASS_PRE_CONTENT、FAN_CLASS_CONTENT和FAN_CLASS_NOTIF。

    • FAN_CLASS_PRE_CONTENT:用于需要在文件内容被访问之前获取文件操作权的应用程序。
    • FAN_CLASS_CONTENT:适用于需要检查文件内容的应用程序,如杀毒软件。
    • FAN_CLASS_NOTIF:用于纯粹的通知软件,不需要访问文件内容。
  5. PID过滤
    Fanotify可以过滤掉由监听程序自身触发的事件,避免进入死循环。这是通过在事件中包含监听程序的PID来实现的。

  6. 缓存机制
    Fanotify具有缓存机制,可以避免对未修改的文件进行重复扫描。例如,如果对某个文件对象设置了ignore mask标志位,Fanotify只会对该对象进行一次扫描,之后如果文件没有修改,Fanotify会忽略访问控制事件,始终允许访问。

主要监听事件

  1. 文件读写事件:

    • 文件被读取(fsnotify_access)
    • 文件被写入(fsnotify_modify)
  2. 文件打开关闭事件:

    • 文件被打开(fsnotify_open,FAN_OPEN_PERM)
    • 文件被关闭(fsnotify_close,FAN_CLOSE_WRITE)
  3. 文件属性修改事件:

    • 文件的扩展属性被修改(fsnotify_xattr)
    • 文件被修改或原数据被修改(fsnotify_change)
  4. 文件创建和删除事件:

    • 创建新文件(fsnotify_create,FAN_CREATE)
    • 创建新目录(fsnotify_mkdir)
    • 文件从目录中删除(fsnotify_nameremove)
    • 文件自删除(fsnotify_inoderemove,FAN_DELETE)
  5. 文件系统卸载事件:

    • 文件系统被卸载(inotify_unmount_inodes)
  6. 文件属性修改事件:

    • 文件属性被修改(FAN_ATTRIB)

本文作者:505donkey

本文链接:https://www.cnblogs.com/505donkey/p/18250217

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   505donkey  阅读(171)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起