回答:
極端に異常なログポリシーが設定されていない限り、誰がどのファイルにアクセスしたかは記録されません(膨大な量の情報になります)。システムログで、いつ誰がログインしたかを確認できます。この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
ディレクトリに監視を配置すると、その中のファイルとそのサブディレクトリも再帰的に監視されます。
syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
上記のinotifywaitの例は、次のいずれかになります(詳細については、manページを参照してください)。
inotifywait /path/to/file
inotifywait -e open /pat/to/file
または、監視モードとタイムスタンプを使用:
inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'
前の答えは、あなたが求めることをするためのベストプラクティスではありません。LinuxにはこのためのAPIがあります。inotify
API http://linux.die.net/man/7/inotify
inotify
APIを直接呼び出すだけで目的の処理を行うCプログラムを作成できます。inotify
inotify
Linux固有)が必要で、Javaを使用している場合、JNotifyはプラットフォーム(Linux、Mac、Windows)で動作し、ネイティブOSの基になるAPIを抽象化します。auditd
(ただし、先週auditd
実行していない限り、先週ファイルにアクセスしたユーザーを特定することはできません)。