web-dev-qa-db-ja.com

シェルで実行されたコマンドを追跡/ログする方法は?

コマンドがシェルで実行される前にログファイルに書き込むことはできますか? sshセッションからのすべてのコマンドをログに記録するsshのパッチがあることは知っていますが、cgiまたはphp-scriptsによってWebサーバーから実行されたコマンドもログに記録したいと思います。

4
sodan

コマンドがシェルで実行される前にログファイルに書き込むことはできますか?

他の質問を考えると、この質問について考える別の方法は、「実行されたすべてのコマンドの記録を確実に取得するために何ができるか?」

auditdデーモンによって提供されるアカウンティングツールは、RedHatによって開発されましたが、どのLinuxでも利用でき、これを行うことができます。このソフトウェアは、実行されたコマンドだけでなく、消費されたリソース、セッションの長さ、SUIDバイナリの使用、重要なシステムファイルの変更、ファイル権限の変更、システム時刻の変更なども記録するメカニズムを提供します。これは包括的で、ファイルとシステムコールの両方を監視できます。引数audit=1を使用して、ブート時にカーネルで有効にすることもできます。実行されたコマンドがコンソール、SSHセッション、またはデーモンのいずれからであったかは関係ありません。ログファイルは通常/var/log/auditに保存されるように構成されており、実行されたコマンドを探している場合は、たとえばgrep exec /var/log/audit/audit.logを使用して見つけることができます。


セキュリティとロギングに関する一般的な概念

残りは質問の範囲外ですが、質問のセキュリティタグまたは将来の読者のためにおそらく重要です。 DISA RHEL-6 STIG (非公式)を使用して、Linuxシステムに最も関連する可能性が高い、全体的なセキュリティベースライン構成を取得できます。表示の便宜のために提供されたリンク)、およびシステムにも使用できる数十の監査関連のエントリがあります。概念の正確な実装は、Linuxの主要なディストリビューション間で異なる場合がありますが、実際のbaselineセキュリティプラクティスの要約としては引き続き有用です。 (DISAは、他の多くのシステムやソフトウェア製品のために、他にも多くの優れたベースラインを提供しています。)

モニタリングとロギングは素晴らしいですが、ログのすべての行を読み取るタスクに本当に追いつき、メッセージが流れ続けるにつれて、あるイベントを別のイベントと効果的に関連付けますか?また、ログに記録されたデータの整合性が最も重要であることも考慮してください。会計ソフトウェアがインストールおよび構成されている1つのシステムが決して侵害されないことを信頼できますか? Shellshock のような啓示についてはどうですか?

したがって、ログファイルデータの改ざんを軽減し、ソフトウェアを使用して、ログ内の情報を分析して対応できるようにする必要があります。

ログデータの整合性を維持するための1つの戦略は、すべてのログがローカルだけでなく、中央のログサーバーへの転送を介してリモートでも保存されるようにすることです。

[Production Server] <---> [NIC 1] <--production traffic--> [Internet]
                    <---> [NIC 2] <--management traffic--> [Log Server]

Log Serverが、SyslogのTCP/UDP 514のような、ロギングソフトウェアが使用するポートのProduction Serverからのトラフィックのみを受け入れることを確認します。管理ネットワークにプライベートネットワーク(RFC 1918)を使用するなど、利用可能な手段を使用して管理ネットワークをできるだけプライベートにします。 VLAN可能な場合はIDを実装し、例外としてall-allow-by-exceptionファイアウォール構成を実装します。もちろん、ネットワークに可能な限り多くの帯域幅を与え、それをできるだけ少なくします。ネットワーク内のデバイスの数によっては、中央のsyslogサーバーがsyslogメッセージで過負荷になる可能性があるため、個別の「syslogネットワーク」を設計する限り、UDPの使用時にメッセージが破棄される可能性があります。代わりにTCP=を使用することを考えるかもしれませんが、これも、すべてのディスク領域が消費されるまで、syslogクライアントのキューにスタックするsyslogメッセージで問題になり、効果的に「足元を撃ちます」 。 "(したがって、個別のパーティションまたは論理ボリュームを作成して、ローカルログファイルに使用可能な最大ディスク容量を定義し、システムパーティションまたはボリュームでの暴走ディスクの使用を防ぐことは賢明です。)rsyslogを使用している場合、 、rsyslog clで中央ロギングサーバーを指定することに加えて会計に関連するログを転送するには、rsyslogでaudispdプラグインを有効にする必要があります。

情報を厳密に検査して潜在的に応答するつもりがない場合、セキュリティのために何でもログに記録するのはなぜですか?それだけでも困難な作業になる可能性があります。したがって、ログファイル分析ソフトウェアの選択も重要です。脅威を構成するものと、それを私たちに認識させるために提示する方法を知っているか、または知っているように構成されている必要があります。そうでなければ、おそらくインシデント後の分析以外では、セキュリティログはあまり役に立ちません。ソフトウェアは、syslogデータを送信するように構成されているすべてのデバイス(サーバー、ワークステーション、ルーター)、またはログデータを送信できる任意のデバイスについて、中央ログサーバー上のデータを分析できる必要があります。

6
Christopher

accounting を設定できます

次に、awkまたはsedで遊んで、必要な文字列を抽出します

0
elbarna

コマンドが出力を返す場合、コマンドを実行して、返された出力をファイルログに保存できます

例えば.

$ ls > ls.log

出力を返さないコマンドで冗長を使用する

$ mv -v foo bar > mv.log

ために php-scriptsechoを使用して同じことを行うことができます。同じ> for system関数またはphp独自の関数。

0
tachomi