我有一个在服务器上运行的论坛脚本,并且少量附件开始丢失。我想知道什么在什么时候删除它们。如何设置Linux auditd(auditctl)来监视目录树(附件存储在多级目录树中)以监视那里的文件删除?
可能我应该为此使用其他工具吗?
我有一个在服务器上运行的论坛脚本,并且少量附件开始丢失。我想知道什么在什么时候删除它们。如何设置Linux auditd(auditctl)来监视目录树(附件存储在多级目录树中)以监视那里的文件删除?
可能我应该为此使用其他工具吗?
Answers:
这是我对上一个问题的答复:
通常,如果您想知道某个进程/用户/文件在做什么,而不必在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审核规则不同,监视不会根据发送给内核的规则数量影响性能。
几个想法。您可以strace
用来查看您的应用程序在做什么,但是它可能会生成日志日志并可能降低系统速度。
另一个想法是使用inotifywait
,然后lsof/fuser
在文件上查看正在使用什么。您可以尝试以高优先级运行此脚本(如果可以)以获取尽可能准确的信息。它可能不会捕获该unlink
调用,因为在事件传递之前该文件将消失。
-f
标志的主父进程,以跟随子进程。
尽管fenix的审计建议似乎很理想,但您可能会发现文件系统IDS(例如AIDE)会有所帮助。不幸的是,对于您尝试隔离的对象来说,它的细粒度不太可能。
我经常会写脚本来解决您所描述的问题。如果您无法通过建议的解决方案完成所需的工作,请自己编写一些内容。它通常不是很复杂。