0x00 引言
在内核态很容易监控文件的创建、删除、修改等事件,但是Linux也提供了一些工具,方便使用者在用户态仍能够监控文件事件。从发展历程来看,主要经历了dnotify、inotify以及fanotify阶段。
Linux的文件事件监听的原理并不复杂,简单说就是当一个应用层的进程操作一个目录或文件时,会触发系统调用,此时内核就可以把该进程对文件的操作上报给应用层的监听进程。
0x01 dnotify
- dnotify
- 支持内核: 内核2.4.0以上版本
- 缺陷:
- 只能监控文件夹,并且对每个目标文件夹都需要添加监控点
- 文件夹umount时有影响
- 使用信号的方式通知文件系统事件
0x02 inotify
- inotify
- 支持内核: 内核2.6.13以上版本
- 优点:
- 既可以监视文件,也可以监视目录
- 不打开目标对象描述符,所以目标umount时不影响,且生成umount事件通知
- 使用系统调用的方式通知文件系统事件,效率高于dnotify
- 缺点:
- 监控文件夹时不能同时监控子文件夹或子文件,需要添加监控点
- 监控点有上限,如果监控目录过深,会影响监控能力
- 只能记录或通知文件事件,不能阻止该操作
- 不能记录更详细的信息,比如对文件执行操作的进程PID
0x03 fanotify
- fanotify
- 支持内核: 内核2.6.37以上版本
- 优点:
- 能同时监控子文件夹或子文件
- 无限监控点
- 允许介入并改变文件事件的行为
- 获取更详细的信息