実稼働サーバー上の特定のファイルが、ログアクティビティと相関していないように見えるランダムな時間に変更されています。どのプログラムがそれをしているのか理解できませんし、容疑者もたくさんいます。どうすれば犯人を見つけることができますか?
これは常に同じファイルで、同じパスにありますが、異なるサーバー上および異なる時間にあります。ボックスは puppet によって管理されますが、ファイルが変更された時点でパペットログにはアクティビティが表示されません。
このファイルを変更しているプロセスを見つけるのに役立つカーネルフック、ツール、またはテクニックはどれですか。
lsofは、ファイルのオープン、変更、クローズが非常に速いため、これには適していません。ポーリングに依存するソリューション(lsofを頻繁に実行するなど)は適切ではありません。
Auditdを使用して、監視するファイルのルールを追加できます。
auditctl -w /path/to/that/file -p wa
次に、/var/log/audit/audit.log
に書き込まれるエントリを監視します。
SystemTapは inodewatchスクリプト を使用してこれを行うことができます。
アクションでそれをキャッチできる場合、つまりファイルが現在アクセスされている場合は、lsofを実行してプロセスを見つけることができます。
$ while :; do echo foo >> bar.txt; done &
$ Sudo lsof bar.txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 25723 terdon 1u REG 8,6 5015796 16647496 bar.txt
探しているプログラムがまだファイルを開いている場合は、以下を使用できます。
Sudo lsof /path/to/file/being/modified
これを小さなループで呼び出して、次のスクリプトgetfileusers.sh
:
#!/bin/sh
FILE=$1
while true; do
lsof "${FILE}"
done > /tmp/fileusers.log
そしてそれを呼び出す:
Sudo ./getfileusers.sh /path/to/file/being/modified
そして最終的に/tmp/fileusers.log
誰がファイルに触れたかを確認するには...