我想在 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。这些数据的可用性可以促进快照。
答案1
您想使用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).
答案2
答案3
怎么样系统水龙头? 它类似于 Solaris 上的 Dtrace。至少对于系统调用来说,它似乎是一个不错的解决方案。它似乎在 Fedora 上得到了很好的支持。
答案4
SeLinux 与 auditd 相结合是一种使用内核中已有的方法获取数据的方法。
如果您只想将其用于一个应用程序,则另一个选择是使用 LD_PRELOAD 技巧。