我们有一台 Ext4 的 Linux 服务器和另一台具有 ISCSI 的 Linux 服务器,Windows 客户端在其中有共享文件夹。我需要
- 允许用户修改文件但不能删除文件。用户有权修改内容,但不能删除文件本身。
- 以类似英语的日志格式审计所有文件的添加/删除/修改操作。
- 如果有人试图删除,则发送警报
答案1
如果 Windows 客户端正在安装 Samba/CIFS 共享,那么您应该检查 Samba 的 full_audit.so 模块。
答案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