システムコールはを使用してトレースできますがstrace
、実際には速度のペナルティが避けられません。strace
コマンドが昇格された特権で実行される場合は、rootとして実行する必要があります。
sudo strace -f -o foo.trace su user -c 'mycommand'
より高速になる可能性が高い別の方法は、ファイルシステムアクセス関数をラップするライブラリをプリロードすることですLD_PRELOAD=/path/to/libmywrapper.so mycommand
。LD_PRELOAD
環境変数は、システム特権で起動されたプログラムに渡されることはありません。そのラッパーライブラリのコードを記述する必要があります(「楽しさと利益のためにライブラリインターポーザを構築する」の例です)。再利用可能なコードがWebで利用できるかどうかはわかりません。
特定のディレクトリ階層内のファイルを監視している場合、そのビューを介したすべてのアクセスがログに記録されるように、LoggedFSを使用してファイルシステムのビューを作成できます。
loggedfs -c my-loggedfs.xml /logged-view
mycommand /logged-view/somedir
LoggedFSを構成するには、プログラムに付属のサンプル構成から始めて、LoggedFS構成ファイルの構文を読んでください。
別の可能性は、Linuxの監査サブシステムです。auditd
デーモンが起動していることを確認してから、ログに記録する内容を設定しますauditctl
。ログに記録された各操作は/var/log/audit/audit.log
(通常の配布で)に記録されます。特定のファイルの視聴を開始するには:
auditctl -a exit,always -w /path/to/file
ディレクトリに監視を配置すると、その中のファイルとそのサブディレクトリも再帰的に監視されます。監査ログを含むディレクトリを監視しないように注意してください。ロギングを特定のプロセスに制限auditctl
できます。使用可能なフィルターについては、manページをご覧ください。監査システムを使用するには、rootになる必要があります。
strace
、Linuxに特に興味があると思います。正しい?