web-dev-qa-db-ja.com

特定のファイルを作成したプログラムまたはスクリプトを見つけることはできますか?

「client_state.xml」、「lockfile」、「time_stats_log」という3つのファイルが突然ホームディレクトリに表示されました。最後の2つは空です。彼らがどうやってそこに着いたのだろう。それが起こったのは初めてではありませんが、最後は数週間前でした。私はファイルを削除しましたが、何も壊れたり不満を言ったりしていません。 stat $filenameから報告された当時、自分が何をしていたのかを考えることができませんでした。彼らがどこから来たのかを知る方法はありますか?

または、ファイルの作成についてホームディレクトリ(サブディレクトリではなく)を監視する方法はありますか?

36
Wolf

どのプログラムがファイルを作成したかを判断する方法があるとは思いません

別の質問の場合:ただし、inotifyを使用して、ファイルが再作成されるのをできますinotifywaitinotifyサブシステムのコマンドラインインターフェイスです。ホームディレクトリでcreateイベントを探すように指示できます。

$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526

$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file

おそらく-m(モニター)、最初のイベントを検出した後に終了しないように指示します

18
Michael Mrozek

LoggedFS を介してファイルシステムにアクセスすることにより、ファイルシステムで発生するすべてを監視できます。これは stacked filesystem であり、すべてのアクセスをディレクトリツリーに記録します。

loggedfs -l /var/tmp/$USER-home-fs.log ~

ホームディレクトリ全体をログに記録すると、システムの速度が低下する可能性があります。少なくとも 設定ファイル を厳格なフィルターで記述したいと思うでしょう。

Rootアクセス権がある場合、Linuxでは、 監査サブシステム を使用して、ファイルシステムアクセスを含む多数のログを記録できます。 auditdデーモンが開始されていることを確認してから、ログに記録する内容を auditctl で構成します。ログに記録された各操作は、/var/log/audit/audit.logに記録されます(通常のディストリビューション)。特定のファイルの監視を開始するには:

auditctl -w /path/to/file

または長い形式で

auditctl -a exit,always -F path=/path/to/file

-wまたは-F dir=を使用して)ディレクトリに監視を配置すると、その中のファイルとそのサブディレクトリも再帰的に監視されます。

auditdを確認することをお勧めします。このパッケージを使用すると、セキュリティ監査を実行し、ファイルシステムで誰が何を変更したかに関する多くの情報を取得できます。

4
lutzky

これは古い質問であることはわかっていますが、誰かが便利だと思った場合に備えて、別のアプローチを提案します。私はもともとこれにだまされた質問への回答としてこれを投稿しました。

1つのオプションは、sysdigを使用することです。オープンソースのシステム監視アプリケーションです。これを使用すると、ファイルのアクティビティを名前で監視できます。 /tmp/example.txtという名前のファイルを作成しているプロセスを確認したいとします。

# sysdig fd.name=/tmp/example.txt
567335 16:18:39.654437223 0 touch (5470) < openat fd=3(<f>/tmp/example.txt) dirfd=-100(AT_FDCWD) name=/tmp/example.txt flags=70(O_NONBLOCK|O_CREAT|O_WRONLY) mode=0666
567336 16:18:39.654438248 0 touch (5470) > dup fd=3(<f>/tmp/example.txt)
567337 16:18:39.654438592 0 touch (5470) < dup res=0(<f>/tmp/example.txt)
567338 16:18:39.654439629 0 touch (5470) > close fd=3(<f>/tmp/example.txt)
567339 16:18:39.654439764 0 touch (5470) < close res=0
567342 16:18:39.654441958 0 touch (5470) > close fd=0(<f>/tmp/example.txt)
567343 16:18:39.654442111 0 touch (5470) < close res=0

その出力から、pid 5470のtouchという名前のプロセスがファイルを開いたことを確認できます。

さらに情報が必要な場合は、システムコールトレースが収集される「キャプチャモード」で実行できます。

# sysdig -w /tmp/dumpfile.scap

次に、ファイルが作成されるのを待ってから、sysdigを停止して実行します。

# csysdig -r /tmp/dumpfile.scap

それはあなたが起こったすべてを探検することを可能にするでしょう。 <F2>を押してFilesを選択し、<F4>を押してファイル名を検索し、<F6>を押して「Dig」します(これにより、上記のコマンド)。その後、同じアプローチを使用して、実際にファイルを作成したプロセスに関する情報を見つけることができます。

sysdig-inspectと呼ばれるcsysdigのGUIバージョンがあります。

4
Andy Dalton

inotifyを取得していないため、ループでファイルをチェックするスクリプトを記述できます。

#!/bin/sh

while [ true ]; do                     # Run for as long as nessesary
  if [ -f /path/to/file ]; then        # If fileexists
    echo "Found file"                  # Notify and stop monitoring
    exit 0
  fi
  sleep 5                             # Else wait 5 secs
done
2
dogbane