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


35

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

または、ファイルの作成のためにホームディレクトリを監視する方法はありますか?


誰かがそれに言及すると確信しているので、私はinotifyを持っていません。
ウルフ

回答:


18

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

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

$ (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(monitor)で実行したいでしょう。最初のイベントを見た後に終了しないように指示します


どうやって手に入れinotifyますか?インストールされておらず(カーネル2.6.34)、ありません/dev/inotify
ウルフ

1
@Wolfどんなディストリビューション?独自のカーネルを構築する場合、それはCONFIG_INOTIFY_USERFilesystems-> Inotify support for userspace)です。inotifywaitおそらく次のような名前のパッケージに含まれていますinotify-tools
Michael Mrozek

@Michael、それはopenSUSE 11.3です。カーネルを構築したことはありません。Linuxを使用してから約5か月しか経っていないが、これは少々気難しい概念です。しかし、チュートリアルなどを探します。
ウルフ

@Wolfまあ、dogbaneの答えは、お持ちのカーネルが付属していない方が簡単かもしれません
Michael Mrozek

2
@Michael実際、もう少し狩りと調査を行った後、コミュニティリポジトリを追加しました。このリポジトリには、inotify-toolsパッケージが含まれているため、現在inotifywait(およびinotifywatch)います。テストしてみたところ、うまくいくようです。
ウルフ

22

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

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

ただし、ホームディレクトリ全体をログに記録すると、システムの速度が低下する場合があります。少なくとも、厳密なフィルターを使用して構成ファイルを作成する必要があります

ルートアクセス権がある場合、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=)、その中のファイルとそのサブディレクトリも再帰的に監視されます。


BSDは、セキュリティイベント監査を通じてこれもサポートしています。freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
ショーンJ.ゴフ

4

あなたはを見てみたいことがありますauditd。このパッケージには、セキュリティ監査を行うことができますし、ファイルシステムで何が変わっ者に関する多くの情報を取得し、。


複数のユーザーにシェルアクセスを提供するサーバーがあり、個々のアクションに対してある程度の説明責任を提供する必要がある場合は、コマンド履歴ログを使用して特定のシェル(bashやtcshなど)を構築できます。< timkennedy.net/2010/12/07/… > でシェルへのログインに関するブログ記事を書きました。シェルロギングはありません、それは(スクリプトやプログラムなど)非対話型シェルで実行したコマンドをログに記録しないように、実際の監査システムの代替。このような粒度を得るには、優れた監査ソリューションが本当に必要です。
ティムケネディ

1
@TimKennedy-あなたのブログ投稿はもう公開されていません。
slm

1
ごめんなさい。サイトがハッキングされ、しばらくダウンしていました。新しいページはtimkennedy.net/2010/12/logging-shell-commands-to-syslog-on.htmlにあります
ティムケネディ

3

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

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

その出力から、touchpid 5470で指定されたプロセスがファイルを開いたことがわかります。

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

# sysdig -w /tmp/dumpfile.scap

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

# csysdig -r /tmp/dumpfile.scap

これにより、発生したすべてのことを調査できます。を押し<F2>て選択しFiles、を押し<F4>てファイル名を検索し、を押し<F6>て「掘る」ことができます(上記のコマンドと同様の出力が表示されます)。これにより、同じアプローチを使用して、実際にファイルを作成したプロセスに関する情報を見つけることができます。

GUI版のcsysdig呼び出されたがありsysdig-inspectます、それがあなたのお茶です。


または、プロセスがそのファイルに書き込み中かどうかを確認しようとするlsofを常に実行するビジーループ
rogerdpack

2

まだ持っていない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
これはどのプログラムがそれを作成したかを示していません
-OverCoder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.