CentOSなどでどのファイルがよく利用されているのかについて調べる場合、(auditdの設定をしないと)基本はログに記録されず、調べることが難しい。 で、auditd以外でなんかいい方法がないかなと調べていたところ『loggedfs』というツールを見かけたので試してみることにした。 検証はCentOS 7を用いるものとする。

1. 『loggedfs』のインストール

まず、以下のコマンドで必要となるパッケージ等を導入、loggedfsのインストールを行う。

yum install -y fuse fuse-devel make gcc gcc-c++ pcre-devel libxml2-devel rlog rlog-devel
wget https://github.com/rflament/loggedfs/archive/0.5.tar.gz -O loggedfs-0.5.tar.gz
tar xzvf loggedfs-*.tar.gz
cd loggedfs-*
make
make install

これでインストールができたはずだ。 loggedfsではconfigファイルを読み込ませることで該当の処理のみをログに吐かせることができるようだが、デフォルトのままでもそれなりにログを出してくれるようなので割愛。

2. 実際に使ってみる

実際にコマンドを実行してみよう。 最初はどんな感じにログが出るのかをみるため、「-f」オプションを付与してデーモンとして動作しないようにする。

loggedfs -f -p /監視ディレクトリPath
[root@BS-PUB-CENT7-01 ~]# loggedfs -f -p /opt
08:10:31 (src/loggedfs.cpp:678) LoggedFS not running as a daemon
08:10:31 (src/loggedfs.cpp:684) LoggedFS running as a public filesystem
08:10:31 (src/loggedfs.cpp:818) LoggedFS starting at /opt.
08:10:31 (src/loggedfs.cpp:843) chdir to /opt
08:10:41 (src/loggedfs.cpp:138) getattr /opt/ {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:48 (src/loggedfs.cpp:138) getattr /opt/ {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:48 (src/loggedfs.cpp:138) readdir /opt/ {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) getattr /opt/ {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) readdir /opt/ {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) getattr /opt/ {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) getattr /opt/root {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) getattr /opt/test1 {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) getattr /opt/test2 {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:49 (src/loggedfs.cpp:138) getattr /opt/test3 {SUCCESS} [ pid = 32100 -bash uid = 0 ]
08:10:58 (src/loggedfs.cpp:138) getattr /opt/ {SUCCESS} [ pid = 32120 touch uid = 0 ]
08:10:58 (src/loggedfs.cpp:140) getattr /opt/test4 {FAILURE} [ pid = 32120 touch uid = 0 ]
08:10:58 (src/loggedfs.cpp:138) mknod /opt/test4 100644 S_IFREG (normal file creation) {SUCCESS} [ pid = 32120 touch uid = 0 ]
08:10:58 (src/loggedfs.cpp:138) getattr /opt/test4 {SUCCESS} [ pid = 32120 touch uid = 0 ]
08:10:58 (src/loggedfs.cpp:138) open writeonly /opt/test4 {SUCCESS} [ pid = 32120 touch uid = 0 ]
08:10:58 (src/loggedfs.cpp:138) utimens /opt/test4 {SUCCESS} [ pid = 32120 touch uid = 0 ]
08:10:58 (src/loggedfs.cpp:138) getattr /opt/test4 {SUCCESS} [ pid = 32120 touch uid = 0 ]

/optを監視対象として、test4をtouchした結果。 tab保管などを使ったりしたので、getattrが行われていたらしい。 auditdと同様、デフォルトの状態だと色々と要らないログも出てしまうので、openとかread、write、 unlinkなどに絞ってモニタリングしてやれば結構良さそうだ。 auditdを適切に設定してやれば同じことできるけど、こっちは設定ファイルをxmlで書いておけるので、選択肢になりえそうだ。