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

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

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

也许我应该使用其他工具来实现这一点?

答案1

这是我针对之前的一个问题写的回答:

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

假设您有一个较新的内核审计控制,这应该是一个简单的操作。(这是在 Debian-fu 中,如果您运行的是 Red Hat,请根据需要进行翻译)

# apt-get install auditd

确保其正在运行(/etc/init.d/auditd status)。

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

如果你运行的是 32 位架构,请将 b64 替换为 b32,open 可以用任何系统调用或单词“all”替换

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

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

-w 参数对于监视文件/目录很有用,但是正如手册页所解释的那样,有一些注意事项。

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

答案2

或许因克龙可用于?

答案3

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

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

答案4

虽然 fenix 的 auditd 建议似乎很理想,但您可能会发现文件系统 IDS 如助手很有帮助。不幸的是,它不太可能足够细致,无法满足您尝试隔离的要求。

我经常会编写脚本来解决您所描述的问题。如果您无法使用推荐的解决方案实现目标,请自己编写一些脚本。这通常不太复杂。

相关内容