web-dev-qa-db-ja.com

Linuxファイルアクセスの監視

UNIXで過去1週間に特定のファイルにアクセスした人を見つける方法はありますか?これは、ユーザーまたはスクリプトによって他の場所にFTPで転送される場合があります。特定のファイルにアクセスしたユーザー名のリストを取得できますか?特定のファイルにアクセスしているユーザーを知るにはどうすればよいですか?

22
Jack

非常に変わったログポリシーを設定していない限り、どのファイルに誰がアクセスしてログに記録されていないか(これは大量の情報になります)。システムログで、誰がいつログインしたかを確認できます。 lastコマンドはログイン履歴を提供し、/var/log/auth.logなどの他のログは、ユーザーがどのように認証され、どこからログインしたか(どの端末、またはリモートの場合はどのホストか)を示します。

ファイルが最後に読み取られた日付は、その アクセス時刻、または略してatime と呼ばれます。すべてのUNIXファイルシステムはそれを保存できますが、多くのシステムはそれを記録しません。これは(通常は)パフォーマンスが低下するためです。 ls -ltu /path/to/fileまたはstat /path/to/fileは、ファイルのアクセス時間を示します。

ユーザーがファイルにアクセスし、自分のトラックを隠そうとしていない場合、シェルの履歴(~/.bash_historyなど)に手掛かりがある可能性があります。

現在何を開いているか、誰がファイルを開いているかを確認するには、lsof /path/to/fileを使用します。

将来ファイルに何が起こるかをログに記録するには、いくつかの方法があります。

  • inotifywait を使用します。 inotifywait -e access /path/toは、誰かがfileを読んだときに/path/to/ ACCESS fileという行を出力します。このインターフェイスでは、誰がファイルにアクセスしたかはわかりません。この行が表示されたらすぐにlsof /path/to/fileを呼び出すことができますが、競合状態があります(lsofが実行されるまでにアクセスが終了する可能性があります)。

  • LoggedFS は、ファイルシステムツリーのビューを提供するスタック可能なファイルシステムであり、そのビューを介してすべてのアクセスのより詳細なロギングを実行できます。構成するには、 LoggedFS構成ファイルの構文 を参照してください。

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

    auditctl -w /path/to/file
    

    監視をディレクトリに置くと、その中のファイルとそのサブディレクトリも再帰的に監視されます。

上記のinotifywaitの例は、次のいずれかである必要があります(詳細については、manページを参照してください)。

inotifywait /path/to/file
inotifywait -e open /pat/to/file

または、監視モードとタイムスタンプ:

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'
7
Milan Kerslager

以前の答えはではありませんあなたが求めることをするためのベストプラクティスです。 LinuxにはこのためのAPIがあります。 inotify AP​​I http://linux.die.net/man/7/inotify

  1. inotify AP​​Iを直接呼び出すだけで、やりたいことを実行するCプログラムを作成できます
  2. Kfsmdを使用できます http://www.linux.com/archive/feature/1249inotifyを使用するデーモン
  3. プラットフォーム間で機能するものが必要で(inotifyはLinux固有)、Javaを使用している場合、JNotifyはプラットフォーム間(Linux、Mac、Windows)で機能し、ネイティブOSの基礎となるAPIを抽象化します。
6
Glen

これは、一般的に実現可能ではありません。いずれかの方法でそれを可能にするのに十分な監査を備えたファイルシステムを見てきましたが、それは一般的なUnixのことではありません。

3
tchrist