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


20

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

回答:


39

極端に異常なログポリシーが設定されていない限り、誰がどのファイルにアクセスしたかは記録されません(膨大な量の情報になります)。システムログで、いつ誰がログインしたかを確認できます。この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行を/path/to/ ACCESS file表示しますfile。このインターフェイスでは、ファイルにアクセスしたユーザーはわかりません。lsof /path/to/fileこの行が表示されたらすぐに呼び出すことができますが、競合状態があります(lsofが実行されるまでにアクセスが終了する可能性があります)。

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

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

    auditctl -w /path/to/file
    

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


Gilles。ありがとうございます。このdatファイルはスクリプトによって作成されています。私はちょうどそれが作成された後、そのファイルに何が起こるか知りたい...誰かが手動でアクセスしている場合、私は見てみたいので、他のスクリプトの非をさらにプロセスのためにそれを選んでいることDATファイル
ジャック

@Jack:セットアップについて詳しく知らなくても言うのは難しいですが、ファイルを削除したり名前を変更したりしない限り、他のスクリプトが他の人がアクセスしているかどうかに関係なく、それを拾います。あなたのコメントから、スクリプトを実行したときに何が起こるかを見るべきだと思います。
ジル 'SO-悪であるのをやめる'

2
ねえ、あなたはこれで素敵な円形ループを作成することができます:syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
penguin359

7

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

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

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

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

6

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

  1. inotifyAPIを直接呼び出すだけで目的の処理を行うCプログラムを作成できます。
  2. kfsmdを使用できます。http ://www.linux.com/archive/feature/124903を使用するデーモンinotify
  3. プラットフォーム間で動作するもの(inotifyLinux固有)が必要で、Javaを使用している場合、JNotifyはプラットフォーム(Linux、Mac、Windows)で動作し、ネイティブOSの基になるAPIを抽象化します。

3
Stack Exchangeへようこそ。回答は時系列で表示されないため、「以前の回答」は、どちらの回答を意味するかを伝えません。とにかく他の2つのうちどちらを参照しているのだろうか。1つは良いか悪いかのように見えるものがなく、もう1つはinotify APIについて言及している。
ジル 'SO-悪であるのをやめる'

ほとんどの場合、グレンはデフォルトの投票ソートを使用して上記の回答を参照しています。実際、最も一般的な答えは、質問の解決策を提示することに失敗しています。特定の時間枠でファイルにアクセスされる回数を確認する必要がある理由はいくつかあります。
Wtower

1
で説明unix.stackexchange.com/a/12251/20336 inotifyのAPIに関する情報提供していない与えられたファイルにアクセスします。さらに、inotifyは、先週ファイルにアクセスしたユーザーを特定するのに役立ちません。そのためには、監査機能が必要です。これには、というソフトウェアを使用する必要がありますauditd(ただし、先週auditd実行していない限り、先週ファイルにアクセスしたユーザーを特定することはできません)。
ミッコランタライネン

3

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

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