ファイルを変更しているプロセスを調べる


35

私は自分のマシン上のどのプロセスが設定ファイルを変更しているのかを見つける信頼できる方法を見つけようとしています(/etc/hosts具体的には)。

lsof /etc/hosts現在どのファイルを開いているプロセスを見つけるために使用できることを知っていますが、プロセスは明らかにファイルを開いて書き込み、再び閉じているため、これは役に立ちません。

lsofのリピートオプション(-r)も調べましたが、1秒に1回程度の速さでしか処理されないため、書き込み中の書き込みをキャプチャすることはおそらくないでしょう。

私はファイルシステムの変更を監視するためのいくつかのツールを知っていますが、この場合、どのプロセスが原因であるかを知りたいです。

回答:


52

監査を使用してこれを見つけることができます。まだ利用できない場合は、ディストリビューションの監査をインストールして有効にします。

/ 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.

ホストファイルが変更されるまで待ってから、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"


この場合、touchコマンドを使用してファイルtimstampを変更しました。pidは7294で、ppidは7259(私のシェル)です。


2
「ディストリビューションの監査を有効にする」は、おそらく少し拡張する必要があります。迷惑なことに、上記のコマンドはエラーも結果も与えませんでした。「/ sbin / auditctl -e 1」も役に立たなかった。ロギングを行うために監査デーモンを実行すると、「/ etc / init.d / auditd start」に役立ちました(ただし、ルールが削除されたため、再度入力する必要がありました)。
-tobixen

私のために働かなかった、ausearch常に戻ります<no matches>
m0skit0

1
そのプロセスが例えば外部コマンドを呼び出して作業を行う場合、変更を開始した実際のプロセスを取得するために複数の監査を設定する必要がある場合があります。つまり、ユーザーのcrontabエントリが常にリセットされている理由を見つけようとしていました。crontabコマンドが原因でしたが、終了したppidを確認するまでに、/ usr / bin / crontabも監査し、crontabへのアクセスのタイムスタンプをcrontabの監査された実行に一致させてから確認する必要がありましたそれはppid ...です。オーケストレーションデーモンが特定のユーザーcron構成を強制していることが明らかになりました。
ウィル

3

inotify-toolsも使用できます。

  inotifywait -mq -e open -e modify /etc/hosts

14
Auditdは、必要な情報を提供できます。inotifyがこれを可能にするという仮定を立てるのは簡単ですが、変更を加えたプロセスIDを提供しないので、それはできません。
オブジェクト化

2

多くの検索の後、解決策を見つけました。次のコマンドを使用してください。 sudo fs_usage | grep [path_to_file]


2
これはMacOS専用です
...-majick

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.