Linux下的文件审计:如何查看删除目录树?

我有一个在服务器上运行的论坛脚本,不知何故less量的附件开始迷路了。 我想知道在什么时候删除它们。 如何设置Linux auditd(auditctl)来观察目录树(附件存储在多级目录树中)以观察文件删除?

可能是我应该使用一些其他的工具呢?

这是我写给前一个问题的答案:

一般来说,如果你想知道一个进程/用户/文件正在做什么,而不需要24/7全天候运行lsof,你可以使用auditctl。

假设你有一个最近的内核审计控制应该是一个简单的操作。 (这是在Debian-fu,如果你正在运行红帽翻译适当)

# apt-get install auditd 

确保它正在运行(/etc/init.d/auditd状态)。

 auditctl -a entry,always -F arch=b64 -S open -F pid=<process id> 

如果你正在运行32位的arch,用b32replaceb64,open可以被任何系统调用或'all'

有关更多信息,请阅读auditctl手册页。

你可以使用这个方法,并要求它监视“unlink”系统调用。

-w参数对于观看文件/目录是有用的,但是手册页解释了有些注意事项。

-wpath在path中插入文件系统对象的监视。 您不能将手表插入顶层目录。 这是内核禁止的。 通配符也不受支持,并会生成警告。 手表的工作方式是在内部跟踪inode。 这意味着如果你把目光放在一个目录上,你会看到什么似乎是文件事件,但它实际上只是元数据的更新。 这样做可能会错过一些事件。 如果您需要查看目录中的所有文件,build议在每个文件上放置一个独立的手表。 与系统调用审计规则不同,监视不会影响基于发送到内核的规则数量的性能。

也许incron可以使用?

一些想法。 您可以使用strace来查看您的应用程序正在做什么,但可能会生成日志日志并可能会降低系统速度。

另一个想法是使用inotifywait ,然后使用lsof/fuser来查看正在使用的文件。 您可以尝试以高优先级(如果可以的话)运行此脚本以获得尽可能准确的信息。 它可能不会捕获unlink调用,因为文件将在事件传递之前消失。

虽然fenix的auditdbuild议似乎是理想的,但您可能会发现像AIDE这样的文件系统IDS很有帮助。 不幸的是,对于你想要隔离的东西来说,它不可能是足够精细的。

我会经常编写脚本作为你所描述的问题的解决scheme。 如果用推荐的解决scheme无法达到你想要的效果,请自己写点东西。 这通常不是很复杂。