私のマシンのどのプロセスが構成ファイル(/etc/hosts
で具体的に説明します)。
lsof /etc/hosts
現在どのプロセスがファイルを開いているかを確認しますが、プロセスが明らかにファイルを開いて書き込み、再び閉じているため、これは役に立ちません。
lsof
のリピートオプション(-r)も確認しましたが、1秒に1回しか実行されないようで、おそらく進行中の書き込みをキャプチャできません。
ファイルシステムへの変更を監視するためのいくつかのツールを知っていますが、この場合、どのプロセスが責任を負っているかを知りたいのです。
監査を使用してこれを見つけることができます。まだ利用できない場合は、ディストリビューションの監査をインストールして有効にします。
/ etc/hostsに監査監視を設定する
/sbin/auditctl -w /etc/hosts -p war -k hosts-file
-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.
Hostsファイルが変更されるまで待ってから、ausearchを使用してログに記録された内容を確認します
/sbin/ausearch -f /etc/hosts | more
大量の出力が得られます。
> time->Wed Oct 12 09:34:07 2011 type=PATH
> msg=audit(1318408447.180:870): item=0 name="/etc/hosts" inode=2211062
> dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00
> obj=system_u:object_r:etc_t:s0 type=CWD msg=audit(1318408447.180:870):
> cwd="/home/iain" type=SYSCALL msg=audit(1318408447.180:870):
> Arch=c000003e syscall=2 success=yes exit=0 a0=7fff73641c4f a1=941
> a2=1b6 a3=3e7075310c items=1 **ppid=7259** **pid=7294** au id=1001 uid=0 gid=0
> euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=123
> comm="touch" **exe="/bin/touch"** subj=user_u:system_r:unconfined_t:s0
> key="hosts-file"
この場合、タッチコマンドを使用してファイルのタイムスタンプを変更しました。pidは7294で、ppidは7259(私のシェル)でした。
多くの検索の結果、解決策が見つかりました。次のコマンドを使用してください:Sudo fs_usage | grep [path_to_file]
Inotify-toolsを使用することもできます。
inotifywait -mq -e open -e modify /etc/hosts
おそらくincronのようなものを使用する方が良いでしょう
http://inotify.aiken.cz/?section=incron&page=about&lang=en
スクリプトをトリガーして、ある種の診断を行うことができます