サーバーでフォーラムスクリプトを実行していますが、どういうわけか少数の添付ファイルが失われ始めます。何がいつ削除されているのかを知りたい。 Linuxのauditd(auditctl)を設定して、ディレクトリツリー(添付ファイルはマルチレベルのディレクトリツリー内に保存されます)を監視して、ファイルの削除を監視する方法を教えてください。
これには他のツールを使用する必要がありますか?
これは私が前の質問に書いた答えです:
一般に、プロセス/ユーザー/ファイルがlsofを24時間年中無休で実行しなくても、プロセス/ユーザー/ファイルが何をしているかを知りたい場合は、auditctlを使用します。
最近のようなカーネル監査制御があると仮定すると、制御は単純な操作であるはずです。 (Red Hatを実行している場合、これはDebian-fuに含まれています)
# 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に挿入します。ウォッチを最上位ディレクトリに挿入することはできません。これはカーネルによって禁止されています。ワイルドカードもサポートされておらず、警告が生成されます。監視の方法は、内部でiノードを追跡することです。つまり、ディレクトリに監視を配置すると、ファイルイベントのように見えますが、これは実際にはメタデータの更新にすぎません。これを行うと、いくつかのイベントを見逃す可能性があります。ディレクトリ内のすべてのファイルを監視する必要がある場合は、各ファイルに個別の監視を配置することをお勧めします。 syscall監査ルールとは異なり、監視はカーネルに送信されたルールの数に基づいてパフォーマンスに影響を与えません。
たぶん incron を使用できますか?
Fenixのauditdの推奨事項は理想的なようですが、 [〜#〜] aide [〜#〜] のようなファイルシステムIDSが役立つ場合があります。残念ながら、分離しようとしているものを十分に細かくすることはほとんどありません。
私はあなたが説明するような問題の解決策としてスクリプトを書くことがよくあります。推奨されるソリューションで希望どおりの結果が得られない場合は、自分で書いてください。多くの場合、それほど複雑ではありません。
いくつかのアイデア。 strace
を使用してアプリケーションの動作を確認できますが、ログのログが生成され、システムが遅くなる可能性があります。
もう1つのアイデアは、ファイルでinotifywait
を使用し、次にlsof/fuser
を使用して、何を使用しているかを確認することです。このスクリプトを高い優先度で実行してみて(可能な場合)、情報をできるだけ正確にすることができます。イベントが配信される前にファイルが削除されるため、unlink
呼び出しはキャッチされません。