我想在 Linux 系统上捕获以下操作。是否可以有效地做到这一点?我的最终目标是提供审计和一组额外的以不同方式索引的文件系统元数据。如果答案是“否”,我很欣赏有用方向的指点。
1) open(), and its parameters (where flags is O_CREAT)
2) write(), along with its parameters, *buf, and the struct file for fd, including f_pos
3) the corresponding information in 2 for a memory-mapped write to a file. I realize I'm asking something very difficult here as it requires an incestuous knowledge between the layers. Setting a flag that memory-mapped IO to a given open file has occurred is good enough, similar to how O_DIRECT writes might be handled. (triggering a later re-scan).
4) rename(), unlink()
5) mkdir(), rmdir()
6) truncate(), ftruncate()
如果有竞争技术来捕获这些类型的操作,我最感兴趣的是那些持续时间最长(最稳定和社区支持最多)的技术,以及那些最不特定于文件系统的技术(reiser4 插件令人兴奋但不似乎在政治上可行)。
尽管我的清单 1-6 只是示例,但关于我忘记的内容的想法是有帮助的。但我并不想全面,只是传达我的设计目标。
例如,将此数据传递给用户空间将允许保持实时的 locate/updatedb 索引。它将允许数据库跟踪每个块和每个文件的 MD5。这些数据的可用性可以促进快照。
你想用
incrond
. 从手册页:以下是一些相关的帖子:
如果LVM或即将推出的NILFS2不是您想要的,我认为第一个是一个不错的快照解决方案。当然 NILFS2 没有经过广泛的测试,你必须自己决定是否冒险并将其放在生产服务器上。
第二个参考更像是安全审计,但大致指向相同的方向。
SystemTap怎么样?它就像 Solaris 上的 Dtrace。至少对于系统调用来说,这似乎是一个不错的解决方案。它似乎在 Fedora 上得到很好的支持。
看看auditd。它应该为您提供所需的东西。
SeLinux 与 auditd 相结合是一种使用内核中已有的方法获取数据的方法。
如果您只希望它用于一个应用程序,另一种选择可能是使用 LD_PRELOAD 技巧。