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

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

# 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 

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

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

可能是因为open(2)默认符号链接。 只有在正在监视的path的父目录(在我们的例子中为/home/root/serverfault )上运行ls (给出-wauditctl参数)时才会生成日志。

我意识到/home/root/serverfault/p不是一个真正的目录,而是一个符号链接。 但是,是不是意味着使用的符号链接,以便他们似乎不存在? 总的来说,通过符号链接审计目录更改似乎不应该完成。 这是真的吗?

嗯,

  -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中没有发生任何更改。