监视,扩展和索引Linux文件系统

我想在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() 

如果有相互竞争的技术来捕捉这类操作,那么我最感兴趣的将是持续时间最长(最稳定和社区支持)的那些,以及那些文件系统最less的(reiser4插件是令人兴奋的,但不似乎在政治上是可行的)。

虽然我的列表1-6只是简单的例子,但是我所忘记的想法是有帮助的。 但我并不是想全面,只是传达我的devise目标。

例如,将这个数据传递给用户空间将允许保留一个实时定位/更新的索引。 它将允许数据库跟踪每个块和每个文件的MD5。 这些数据的可用性可以方便快照。

你想使用incrond 。 从手册:

  The inotify cron daemon (incrond) is a daemon which monitors filesystem events and executes commands defined in system and user tables. It's use is generally similar to cron(8). 

这里有一些相关的post:

  • 在* nix web服务器上识别已更改的文件
  • 什么是收集文件系统使用统计信息的好工具?

如果LVM或即将到来的NILFS2不是您正在寻找的,我会考虑首先成为一个不错的快照解决scheme。 当然,NILFS2并没有经过广泛的testing,如果你承担风险并把它放在生产服务器上,你必须自己决定。

第二个参考更像是安全审计,但大致指向相同的方向。

SystemTap如何? 这就像Solaris上的Dtrace。 至less对于系统调用来说,这似乎是一个很好的解决scheme。 Fedora似乎很好的支持。

看看auditd。 它应该为你提供你所需要的。

SeLinux结合auditd是一种使用已经在内核中的方法获取数据的方法。

另一个select可能是使用LD_PRELOAD技巧,如果你只想要一个应用程序。