Linux中的文件审核:如何监视目录树中的删除内容?


9

我有一个在服务器上运行的论坛脚本,并且少量附件开始丢失。我想知道什么在什么时候删除它们。如何设置Linux auditd(auditctl)来监视目录树(附件存储在多级目录树中)以监视那里的文件删除?

可能我应该为此使用其他工具吗?

Answers:


8

这是我对上一个问题的答复:

通常,如果您想知道某个进程/用户/文件在做什么,而不必在24/7上对其运行lsof,则可以使用auditctl。

假设您的内核审计控制最近,应该是一个简单的操作。(如果您正在运行Red Hat,则在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,请用b32替换b64,可以用任何系统调用或“ all”一词替换open

有关更多信息,请阅读auditctl联机帮助页。

您可以使用此方法并要求其监视“取消链接”系统调用。

-w参数对于监视文件/目录很有用,但是如手册页所述,有一些警告。

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


我不能:(我有PHP运行在CGI模式下它总是一个新的进程还有,我想不看一个单一的过程,但对于改变观看文件系统的特定部分。
弗拉季Rastrusny

是的,请参阅我所做的编辑,其中有一些参数可以监视文件系统目录,但有一些警告或文件。
亚伦·塔特

大约有1000个文件夹和大约5万个文件。所以这也行不通... :(
弗拉迪斯拉夫·拉斯特鲁尼2010年

通常,只要您意识到了警告,就可以继续将手表放在包含您要观看的文件夹的顶级目录中。
亚伦塔特(Aaron Tate)2010年

我需要做同样的事情(观察文件夹中的删除内容,以便我可以找到执行此操作的PID /进程名称),但这似乎不起作用(至少在3.x内核上)。如果我运行“ auditctl -a条目,总是-F arch = b64 -S unlink -w / path / to / dir”以跟踪删除,那么我会收到“不能通过syscall给出watch选项”。任何人有任何想法吗?
IBBoard


0

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

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


我不能。我不知道在哪个进程上运行strace,因为一段时间后我发现已删除的文件。inotifywait也将不起作用,因为PHP作为CGI运行,并且有许多PHP进程具有不同的ID。
弗拉迪斯拉夫·拉斯特鲁尼(Fladislav Rastrusny),2010年

inotify用于监视文件系统,而不是正在运行的进程。对于strace,必须跟踪带有-f标志的主父进程,以跟随子进程。
Dan Andreatta 2010年

0

尽管fenix的审计建议似乎很理想,但您可能会发现文件系统IDS(例如AIDE)会有所帮助。不幸的是,对于您尝试隔离的对象来说,它的细粒度不太可能。

我经常会写脚本来解决您所描述的问题。如果您无法通过建议的解决方案完成所需的工作,请自己编写一些内容。它通常不是很复杂。


看来,这仅是用于查找文件更改。不用于实时监控。
弗拉迪斯拉夫·拉斯特鲁尼(Fladislav Rastrusny),2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.