サーバーでフォーラムスクリプトを実行していますが、どういうわけか少数の添付ファイルが失われ始めます。何が何を削除しているのかを知りたい。Linuxのauditd(auditctl)を設定して、ディレクトリツリー(添付ファイルはマルチレベルのディレクトリツリー内に保存されます)を監視して、ファイルの削除を監視する方法を教えてください。
これには他のツールを使用する必要がありますか?
サーバーでフォーラムスクリプトを実行していますが、どういうわけか少数の添付ファイルが失われ始めます。何が何を削除しているのかを知りたい。Linuxのauditd(auditctl)を設定して、ディレクトリツリー(添付ファイルはマルチレベルのディレクトリツリー内に保存されます)を監視して、ファイルの削除を監視する方法を教えてください。
これには他のツールを使用する必要がありますか?
回答:
これは私が前の質問に書いた答えです:
一般に、lsofを24時間年中無休で実行する必要なしに、プロセス/ユーザー/ファイルが何をしているかを知りたい場合は、auditctlを使用します。
最近のカーネルの監査制御があると仮定すると、制御は単純な操作であるはずです。(これは、Debian-fuにあります。RedHatを実行している場合は、適切に変換してください)
# apt-get install auditd
実行中であることを確認してください(/etc/init.d/auditd status)。
auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>
32ビットarchを実行している場合は、b64をb32に置き換えます。openは、任意のシステムコールまたは「all」という単語で置き換えることができます。
詳細については、auditctlのマンページを参照してください。
このメソッドを使用して、「リンク解除」システムコールを監視するように要求できます。
-wパラメータはファイル/ディレクトリを監視するのに役立ちますが、manページで説明されているように、注意事項があります。
-w pathファイルシステムオブジェクトの監視をpathに挿入します。ウォッチを最上位ディレクトリに挿入することはできません。これはカーネルによって禁止されています。ワイルドカードもサポートされておらず、警告が生成されます。監視の方法は、inodeを内部的に追跡することです。つまり、ディレクトリにウォッチを置くと、ファイルイベントのように見えますが、これは実際にはメタデータの更新にすぎません。これを行うと、いくつかのイベントを見逃す可能性があります。ディレクトリ内のすべてのファイルを監視する必要がある場合は、各ファイルに個別の監視を配置することをお勧めします。syscall監査規則とは異なり、監視はカーネルに送信される規則の数に基づいてパフォーマンスに影響を与えません。
いくつかのアイデア。を使用strace
してアプリケーションの動作を確認できますが、ログのログが生成され、システムの速度が低下する場合があります。
もう1つのアイデアは、を使用してから、ファイルinotifywait
でそれを使用lsof/fuser
しているものを確認することです。このスクリプトを高い優先度で実行して(可能な場合)、情報をできるだけ正確にすることができます。unlink
イベントが配信される前にファイルが失われるため、おそらく呼び出しをキャッチしません。
-f
、子を追跡するには、フラグを使用してマスター親プロセスをトレースする必要があります。
fenixのauditdの推奨事項は理想的なようですが、AIDEなどのファイルシステムIDSが役立つ場合があります。残念ながら、分離しようとしているものを十分に細かくすることはほとんどありません。
私はあなたが説明するような問題の解決策としてスクリプトを書くことがよくあります。推奨されるソリューションで目的を達成できない場合は、自分で書いてください。多くの場合、それほど複雑ではありません。