inotify – 如何找出哪个用户修改了文件?

我正在寻找指导如何找出哪个用户已经修改了一个特定的文件。 虽然inotify是很好的通知当一个特定的文件被触摸,我怎么知道哪个用户已经修改该文件? 我可以考虑使用lsof,但是恐怕它可能不是我想要的“实时”,也可能是对资源征税太多。 实时,我的意思是,如果用户只是简单地执行一个文件的touch命令,当我在文件上运行lsof时,它可能不会被lsof拾取。

Solutions Collecting From Web of "inotify – 如何找出哪个用户修改了文件?"

你可以使用审计deamon :

 sudo apt-get install auditd 

选择一个文件来监视

 touch /tmp/myfile 

为写入和属性更改添加审计( -p wa ):

 sudo auditctl -w /tmp/myfile -p wa -k my-file-changed 

该文件被某个用户触摸:

 touch /tmp/myfile 

检查审计日志:

 sudo ausearch -k my-file-changed | tail -1 

您可以在输出中看到运行命令的用户的UID

type = SYSCALL msg = audit(1313055675.066:57):arch = c000003e syscall = 2 success = yes exit = 3 a0 = 7ffffb6744dd a1 = 941 a2 = 1b6 a3 = 7ffffb673bb0 items = 1 ppid = 3428 pid = 4793 auid = 4294967295 uid = 1000 gid = 1000 euid = 1000 suid = 1000 fsuid = 1000 egid = 1000 sgid = 1000 fsgid = 1000 tty = pts1 ses = 4294967295 comm =“touch”exe =“/ bin / touch”key =“my-file-changed”

有关使用的详细信息,请参阅手册页或本示例指南 。

如果在前面的命令中添加-i选项,则会以更易读的格式获取输出。 你将得到的uid转换为服务器上的真实用户名。

ausearch -k my-file-changed -i | 尾巴-1