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

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

我继承了一堆 Linux(Ubuntu Precise)服务器,目前遇到文件夹所有权经常更改为“root”的问题。我们运行 puppet,它将所有权更改为应有的用户,但稍后其他东西又将其改回。

我目前每 30 秒记录一次文件的权限,以尝试缩小时间范围来查看日志中是否有任何内容等。这是一个繁忙的大型服务器,因此如果没有更多信息,就很难在日志中找到任何内容。

Linux 中是否有办法捕捉文件/文件夹所有权的变化并检测负责的进程?

答案1

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

        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

然后你可以使用搜索

        ausearch -ts today -k test

例如我使用这个,创建这个文件 /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 是 root

如果要使这些更改在重启后仍然有效,请在 /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

答案2

通过快速的谷歌搜索,我们发现 Linux 内核中有 inotify api。

Inotify(inode 通知)是一个 Linux 内核子系统,用于扩展文件系统,以通知文件系统的变化,并将这些变化报告给应用程序

我找不到任何允许你直接使用 inotify 查看文件的应用程序。不过有一个inotify 工具包允许您访问脚本中的 API。

它本身不会告诉你谁更改了什么,但你可以使用此 api 构建脚本来缩小范围。例如,通过将其与 lsof 和 ps 结合使用

答案3

抱歉,标准 Linux 系统中没有任何东西可以进行这种级别的日志记录。您可能必须编写一个脚本,但是,即使这样也是一种碰运气的做法。

嗯......您可能能够在文件上设置不可变位来保护它,看看谁抱怨它无法更改:

 chattr +i filename1 ... filenamen

相关内容