如何检测Linux上文件所有权的变化?

我已经inheritance了一堆Linux(Ubuntu Precise)服务器,目前我们经常遇到一个文件夹的所有权变成“root”的问题。 我们运行傀儡,将所有权改变为应该使用的用户,但是其他的东西会稍后改变它。

我目前每隔30秒logging一次文件的权限,试图缩小时间,查看日志中是否有任何内容。这是一个大型的繁忙服务器,所以没有更多的信息,在日志中find任何东西都是不容易的。

当Linux文件/文件夹所有权发生变化并检测到负责的stream程时,Linux中是否有这种方法?

我认为你可以使用审计特定的文件/目录,或者你可以编写自定义规则根据您的要求

auditctl -w <path to the file you need to monitor> -p war -k test Where -w is for specifying file path -p is for permission access (read,write,execute and attribute change) -k key name,you can give name you can use to filter audit rule 

那么你可以使用它来search它

  ausearch -ts today -k test 

例如,我用这个,创build这个文件/ tmp / test,然后写一些随机数据

  auditctl -w /tmp/test -p warx -k test 

然后执行这个命令

  ausearch -ts today -k test --ts for start date -k is for key string 

所以这个的输出

  type=SYSCALL msg=audit(1407949301.821:63216): arch=c000003e syscall=191 success=no exit=-61 a0=eacca0 a1=3600005db7 a2=7fff15265180 a3=84 items=1 ppid=2384 pid=16921 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=10096 comm="vim" exe="/usr/bin/vim" key="test" 

所以,如果你检查输出的最后一行,它将显示命令执行是vim和uid = 0这是根

如果您希望在重新启动时使这些更改保持不变,请在/etc/audit/audit.rules中添加像这样的条目

  -w /tmp/test -p warx -k test 

并确保auditd服务已启动并正在运行

  service auditd status 

欲了解更多信息,你可以参考http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html

快速谷歌揭示在Linux内核inotify api。

Inotify(inode notify)是一个Linux内核子系统,用于扩展文件系统以注意对文件系统的更改,并将这些更改报告给应用程序

我找不到任何允许您使用inotify直接观看文件的应用程序。 但是有inotify-tools包允许你访问脚本中的api。

它本身并不告诉你谁改变了什么,但是你可以使用这个API来创build一个脚本来缩小它的范围。 例如,将它与lsof和ps结合起来

对不起,在标准的Linux系统中没有什么logging在这样的级别上。 你可能不得不写一个脚本,但是,即使这是一个命中或错过的命题。

嗯……你也许可以在文件上设置不可变的位来保护它,看看谁抱怨它不能改变:

  chattr +i filename1 ... filenamen