如何找出谁在删除 Linux 服务器上的文件?

如何找出谁在删除 Linux 服务器上的文件?

我们有一台 Ext4 的 Linux 服务器和另一台具有 ISCSI 的 Linux 服务器,Windows 客户端在其中有共享文件夹。我需要

  1. 允许用户修改文件但不能删除文件。用户有权修改内容,但不能删除文件本身。
    1. 以类似英语的日志格式审计所有文件的添加/删除/修改操作。
    2. 如果有人试图删除,则发送警报

答案1

如果 Windows 客户端正在安装 Samba/CIFS 共享,那么您应该检查 Samba 的 full_audit.so 模块。

Samba:记录用户活动

Samba - 带有 full_audit 的文件审计日志

Google 搜索 - samba full_audit

答案2

我建议你去看看audit——http://people.redhat.com/sgrubb/audit/

它可以监视内核发生的任何事情——您可以定义自己的规则来匹配您想要审核的系统调用活动的类型。

答案3

查看 inotify 工具,或者如果您是程序员,您可以自己动手制作合适的工具。这并不难;最困难的部分是跟踪所有子目录,并处理目录添加/删除/重命名。

我的一些服务器上运行着基于 inotify 的程序。例如,在存储我扫描的私人文件(账单、收据等)的服务器上,我有一个程序用于监视目录树中的新文件。创建新文档时,它会立即进行 PGP 加密(当然,除非新文档是经过 pgp 加密的)。另一个类似的程序会将特定树中的任何更改发送到另一台遥远的服务器。

我可以将其中一个修改为简单地写入审计文件,然后根据需要进行审查。我认为其中最困难的部分是确保审计文件不会变得太大。

我会审查其中的一个,看看它是否适合公开。如果可以,我会找个地方分享它。

答案4

使用Linux::Inotify2 Perl模块。编写一个Perl脚本并将其作为正在运行的守护进程。

您可以监视某个目录中的以下事件:

IN_ACCESS            object was accessed
 IN_MODIFY            object was modified
 IN_ATTRIB            object metadata changed
 IN_CLOSE_WRITE       writable fd to file / to object was closed
 IN_CLOSE_NOWRITE     readonly fd to file / to object closed
 IN_OPEN              object was opened
 IN_MOVED_FROM        file was moved from this object (directory)
 IN_MOVED_TO          file was moved to this object (directory)
 IN_CREATE            file was created in this object (directory)
 IN_DELETE            file was deleted from this object (directory)
 IN_DELETE_SELF       object itself was deleted
 IN_MOVE_SELF         object itself was moved
 IN_ALL_EVENTS        all of the above events

 IN_ONESHOT           only send event once
 IN_ONLYDIR           only watch the path if it is a directory
 IN_DONT_FOLLOW       don't follow a sym link
 IN_MASK_ADD          not supported with the current version of this module

 IN_CLOSE             same as IN_CLOSE_WRITE | IN_CLOSE_NOWRITE
 IN_MOVE              same as IN_MOVED_FROM | IN_MOVED_TO

相关内容