inotifywaitを使用してファイルを削除するコマンド/スクリプトを検出する


0

アプリケーションサーバーの1つが内部のファイルを定期的に削除します。

/home/test/data

問題は、どのスクリプトまたはコマンドがファイルを削除するかわからないため、inotifywaitを使用しようとしていることです。日時を記録することはできますが、必要な情報を取得することはできません。このinotifyを構成/カスタマイズして、ファイルを削除している犯人を表示できますか?

ログサンプル:

/opt/asd CREATE 2017/04/03-17:49:05
/opt/asd DELETE 2017/04/03-17:49:11
/opt/wira/.bash_history MODIFY 2017/04/03-17:51:29
/opt/wira/.bash_history MODIFY 2017/04/03-17:51:29
/opt/wira/.bash_history MODIFY 2017/04/03-17:51:29
/home/test/data/test DELETE 2017/04/03-17:52:16
/home/test/data/c/test DELETE 2017/04/03-17:58:00
/home/test/data/c DELETE,ISDIR 2017/04/03-17:58:00

これが私たちの構成です

# specify log file
LOGFILE=/var/log/inotify.log
# specify target directory for monitoring
MONITOR=/home/test/data
# specify target events for monitoring ( comma separated )
# refer ro "man inotifywait" for kinds of events
EVENT=delete,modify,move

回答:


1

これを行うためのツールは監査されます

Linux監査システムへのユーザースペースコンポーネント。監査レコードをディスクに書き込む責任があります。ログの表示は、ausearchまたはaureportユーティリティを使用して行われます。監査ルールの構成は、auditctlユーティリティを使用して行います。起動時に、/ etc / audit / audit.rulesのルールがauditctlによって読み取られます。監査デーモン自体には、管理者がカスタマイズしたい設定オプションがいくつかあります。それらはauditd.confファイルにあります。

マニュアルから)。消去されるファイルを検出するには、auditdパッケージをインストールして起動した後、次のように、問題のファイルの含まれるフォルダーを監査します。

    
    $タッチzz
    $ sudo auditctl -w / home / me -p wa
    $ rm / home / me / zz
    $ sudo cat /var/log/audit/audit.log
    type = DAEMON_START msg = audit(1491310210.803:235):auditd start、ver = 2.4.5 format = raw kernel = 4.8.0-45-generic auid = 4294967295 pid = 29913 subj = unconfined res = success
    type = USER_AUTH msg = audit(1491310280.366:26):pid = 30060 uid = 1000 auid = 1000 ses = 2 msg = 'op = PAM:authentication acct = "e" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = USER_ACCT msg = audit(1491310280.366:27):pid = 30060 uid = 1000 auid = 1000 ses = 2 msg = 'op = PAM:accounting acct = "me" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = USER_CMD msg = audit(1491310280.366:28):pid = 30060 uid = 1000 auid = 1000 ses = 2 msg = 'cwd = "/ home / me" cmd = 617564697463746C202D77202F686F6D652F6D6172696F202D70207761 terminal = pts / 6 res = success'
    type = CRED_REFR msg = audit(1491310280.366:29):pid = 30060 uid = 0 auid = 1000 ses = 2 msg = 'op = PAM:setcred acct = "root" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = USER_START msg = audit(1491310280.366:30):pid = 30060 uid = 0 auid = 1000 ses = 2 msg = 'op = PAM:session_open acct = "root" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = CONFIG_CHANGE msg = audit(1491310280.390:31):auid = 1000 ses = 2 op = "add_rule" key =(null)list = 4 res = 1
    type = USER_END msg = audit(1491310280.390:32):pid = 30060 uid = 0 auid = 1000 ses = 2 msg = 'op = PAM:session_close acct = "root" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = CRED_DISP msg = audit(1491310280.390:33):pid = 30060 uid = 0 auid = 1000 ses = 2 msg = 'op = PAM:setcred acct = "root" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = SYSCALL msg = audit(1491310299.535:34):arch = c000003e syscall = 263 success = yes exit = 0 a0 = ffffff9c a1 = 21b0000 a2 = 0 a3 = 15e items = 2 ppid = 2441 pid = 30087 auid = 1000 uid = 1000 gid = 1000 euid = 1000 suid = 1000 fsuid = 1000 egid = 1000 sgid = 1000 fsgid = 1000 tty = pts6 ses = 2 comm = "rm" exe = "/ bin / rm" key =(null)
    type = CWD msg = audit(1491310299.535:34):cwd = "/ home / me"
    type = PATH msg = audit(1491310299.535:34):item = 0 name = "/ home / me" inode = 23199747 dev = fd:00 mode = 040755 ouid = 1000 ogid = 1000 rdev = 00:00 nametype = PARENT
    type = PATH msg = audit(1491310299.535:34):item = 1 name = "zz" inode = 23205547 dev = fd:00 mode = 0100664 ouid = 1000 ogid = 1000 rdev = 00:00 nametype = DELETE
    type = PROCTITLE msg = audit(1491310299.535:34):proctitle = 726D007A7A
    type = USER_CMD msg = audit(1491310321.131:35):pid = 30120 uid = 1000 auid = 1000 ses = 2 msg = 'cwd = "/ home / me" cmd = 636174202F7661722F6C6F672F61756469742F61756469742E6C6F67 terminal = pts / 6 res = success'
    type = CRED_REFR msg = audit(1491310321.131:36):pid = 30120 uid = 0 auid = 1000 ses = 2 msg = 'op = PAM:setcred acct = "root" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '
    type = USER_START msg = audit(1491310321.131:37):pid = 30120 uid = 0 auid = 1000 ses = 2 msg = 'op = PAM:session_open acct = "root" exe = "/ usr / bin / sudo" hostname =?addr =?terminal = / dev / pts / 6 res = success '

関連する削除イベントには太字を使用しました。PPID、PID、および削除を実行したユーザーを簡単に確認できます。


0

イベントトラップとしてinotifywaitを使用することは良い出発点です。ただし、あなたが述べたように、それはいつ/誰に何を言っているのかではなく、いつかだけです。犯人を絞り込むのに最適な方法は、いつかを知ることです。しかし、もっと情報が必要です。

迅速で(非常に)汚い解決策として、特定のユーザーまたはグループのみがファイルを変更/削除できるように、データディレクトリのファイル権限を一時的に変更します。これにより、アプリ(およびおそらくはユーザー)がファイルに触れて平手打ちしようとするときに、エラーメッセージのダンプが生成されます。(警告:rootとして実行されているものはすべてこれをバイパスするため、ここではrootではなくサービスアカウントからアプリ/ジョブを実行するようにアドバイスします)。

これらのエラーメッセージは、ファイルを削除しようとしているプロセスを識別します。すべての子プロセスには親プロセスが含まれており、init / 0に至るまで、ファイルを削除しようとしているプロセスを特定できます。スクリプトはおそらくbashのインスタンスになりますが、親はcrond(時間指定ジョブ)またはアプリのいずれかになります。

別の可能な方法は、cronテーブルを確認して、ファイルがヌックされる直前にどのcronジョブが実行されるかを確認することです。(アプリがcrondに渡さずにジョブを実行する場合、アプリ内でジョブスケジュールとログを探します。)


実際にはそれよりも複雑です。この場合、実際には「X」処理後にファイル自体を削除する必要がありますが、問題は「X」処理が発生する前にファイルが削除されていることです。このファイルはシステムによって自動生成されます。あなたが言った方法で操作できない理由はありますが、感謝します!
新Dapaty

OK。ジョブを見つける必要がある理由がわかりました。それはワークフローを混乱させています。推奨事項:ポストX処理(おそらくそれによってトリガーされる)、データファイルをアーカイブフォルダーに移動します。元のフォルダーへのmod / move / delアクセス許可を持つサービスアカウントでこれを実行します。そのフォルダをロックダウンして、その場所で他のユーザーがmod / move / delできないようにします。管理者のジョブを介して、自由にアーカイブを削除できます。
ジョージエアハルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.