如何通过符号链接审计对目录的更改?

如何通过符号链接审计对目录的更改?

使用审计系统通过符号链接监视目录几乎不会触发任何日志。情况如下:

# pwd
/home/root/serverfault

# ls -l 
total 4
drwxr-xr-x 2 root root 4096 Sep  1 15:12 dir
lrwxrwxrwx 1 root root    3 Sep  1 15:12 p -> dir

# auditctl -w /home/root/serverfault/p -p rwxa -k PX

我天真地以为,只要我在/home/root/serverfault/p目录中读取/写入文件,日志就会出现/var/log/audit/audit.log。但事实并非如此。

此外,如果我执行以下操作,则没有审计日志:

# echo hello > /home/root/serverfault/p/hello.txt

我做了一些实验斯特拉斯在几个目录上运行ls,并使用手册页中的信息评估输出auditctl(8)strace输出中有一行有趣的内容让我认为应该生成审计日志:

open("/home/root/serverfault/p/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3

可能是因为默认情况下遵循符号链接。仅在监视的路径(传递给switch的参数)的父目录(在我们的例子中)上open(2)运行时才会生成日志。ls/home/root/serverfault-wauditctl

我意识到那/home/root/serverfault/p实际上不是一个目录,而是一个符号链接。但符号链接不是应该被这样使用,以至于它们看起来不存在吗?总的来说,似乎不应该通过符号链接来审计目录更改。真的是这样吗?

答案1

唔,

   -w path
          Insert  a  watch  for the file system object at path. You cannot
          insert a watch to the top level directory. This is prohibited by
          the kernel. Wildcards are not supported either and will generate
          a warning. The way that watches work is by  tracking  the  inode
          internally.

没有变化符号链接文件的 inode 不会发生任何变化,因为这只是指向其他地方的文件。相反,将监视添加到符号链接指向的目录,或者尝试-F path相关选项,尽管符号链接的 inode 不会再次发生变化。

相关内容