![ファイルを変更するプロセスを探す [複製]](https://linux33.com/image/3723/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E6%8E%A2%E3%81%99%20%5B%E8%A4%87%E8%A3%BD%5D.png)
本番サーバー上の特定のファイルはランダムに変更されていますが、これはログアクティビティとは無関係です。どのプログラムがこのようなことをするのかは不明であり、疑わしい部分も多かった。犯人をどのように見つけることができますか?
常に同じファイル、同じパスにありますが、他のサーバーとは異なる時間にあります。このボックスは以下によって管理されます。人形ただし、ファイルが変更されている間は、人形ログにアクティビティは表示されません。
どのプロセスがこのファイルを変更しているかを見つけるのに役立つカーネルフック、ツール、または技術は何ですか?
lsofはファイルが非常に迅速に開かれ、修正され、閉じられるため、このような状況には適していません。ポーリングに依存するソリューション(たとえば、lsofの頻繁な実行)は悪いです。
- オペレーティングシステム:Debianテスト済み
- カーネル:Linux、2.6.32〜3.9、32ビット、64ビット。
答え1
auditdを使用してファイルを監視するルールを追加できます。
auditctl -w /path/to/that/file -p wa
その後、記録する項目を観察してください/var/log/audit/audit.log
。
答え2
探しているプログラムがまだファイルを開いている場合は、次のコマンドを使用できます。
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
誰がファイルに触れたかを確認してください。
答え3
SystemTap は以下を使用してこれを実行できます。Inode監視スクリプト。
答え4
リアルタイムでキャプチャできる場合(ファイルにアクセス中など)、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