![如何通过符号链接审计对目录的更改?](https://linux22.com/image/665881/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E5%AE%A1%E8%AE%A1%E5%AF%B9%E7%9B%AE%E5%BD%95%E7%9A%84%E6%9B%B4%E6%94%B9%EF%BC%9F.png)
使用审计系统通过符号链接监视目录几乎不会触发任何日志。情况如下:
# 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
-w
auditctl
我意识到那/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 不会再次发生变化。