web-dev-qa-db-ja.com

シンボリックリンクを介してdirへの変更を監査するにはどうすればよいですか?

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出力からの1つの興味深い行は次のとおりです。

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

open(2)がデフォルトでシンボリックリンクをたどるからではないかもしれません。ログは、監視対象のパス(lsの_/home/root/serverfault_スイッチに与えられた引数)の親ディレクトリ(この場合は_-w_)でauditctlを実行した場合にのみ生成されます。

_/home/root/serverfault/p_は実際にはディレクトリではなく、シンボリックリンクであることに気付きました。しかし、シンボリックリンクは、存在しないように見えるように使用することを意図したものではありませんか?全体として、シンボリックリンクを介したディレクトリ変更の監査は行われないように思われます。これは本当に本当ですか?

1
pdp

うーん、

   -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.

シンボリックリンクファイルのiノードに変更が発生することはありません。これは、他の場所を指すファイルにすぎないためです。代わりに、シンボリックリンクが指すディレクトリにウォッチを追加するか、-F path関連のオプションを試してください。ただし、ここでも、シンボリックリンクのiノードに変更はありません。

1
thrig