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

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

シェルでコマンドが実行される前にログファイルに書き込むことはできますか?私はSSHセッションのすべてのコマンドを記録するSSHパッチがあることを知っていますが、cgiまたはPHPスクリプトを介してWebサーバー上で実行されるコマンドも記録したいと思います。

答え1

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

他の質問を考慮してこれについて考える別の方法は、「実行されたすべてのコマンドの記録を取得するにはどうすればよいですか?」と考えました。

auditdRedHatによって開発されたが、すべてのLinuxで利用可能なデーモンが提供する会計ツールを使用すると、これを行うことができます。このソフトウェアは、実行されたコマンドだけでなく、消費されたリソース、セッションの長さ、SUIDバイナリの使用、重要なシステムファイルの変更、ファイル権限の変更、システム時間の変更などを記録するメカニズムも提供します。これは包括的であり、ファイルとシステム呼び出しを監視できます。パラメータを使用して起動時にカーネルをオンにすることもできますaudit=1。実行されたコマンドがコンソール、SSHセッション、またはデーモンで実行されるかどうかは重要ではありません。ログファイルは通常保存されるように構成されており、/var/log/audit実行されたコマンドを探している場合は、grep exec /var/log/audit/audit.log次のように検索できます。


セキュリティとロギングの一般概念

残りの部分は質問の範囲外ですが、質問の安全タグや将来の読者のために重要かもしれません。全体的なセキュリティに優れています。ベースラインおそらく、Linuxシステムに最も関連性の高い構成は次のとおりです。ディシャ RHEL-6 STIG(見やすく提供される非公式リンク)システムにも使用できる監査関連の項目がたくさんあります。これらの概念の正確な実装は、主要なLinuxディストリビューションによって異なる場合がありますが、進捗状況を要約するためにまだ有用です。ベースライン安全慣行。 (DISAは他の多くのシステムやソフトウェア製品のための他の多くの良いベンチマークも提供しています。)

モニタリングとロギングは素晴らしいですが、メッセージが流れ続けてログのすべての行を読み、心の中​​であるイベントを他のイベントと効果的に関連付ける作業を実際に続けますか?また、記録されたデータの整合性が最も重要であることも考慮してください。会計ソフトウェアがインストールされ、構成されたシステムが決して破損しないと信じることができますか?このような暴露はどうですか?シェルショック

そのため、ログファイルデータの改ざんの可能性を最小限に抑え、ログ情報を分析して対応できるソフトウェアを使用する必要があります。

ロギングデータの整合性を維持するための1つの戦略は、すべてのログ履歴をローカルに保存するだけでなく、中央ログサーバーに転送してリモートに保存することです。

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

ログサーバーが、syslog用のTCP / UDP 514などのロギングソフトウェアによって使用されるポートを介して本番サーバーからのトラフィックのみを受け入れるようにしてください。管理ネットワークにプライベートネットワークを使用するなど(RFC 1918)利用可能な手段を使用して、管理ネットワークをできるだけプライベートにします。可能であれば、VLAN IDを実装し、許可されているすべての例外を拒否するようにファイアウォールを設定します。ネットワークにできるだけ多くの帯域幅を提供し、できるだけ少なく活用してください。中央のsyslogサーバーはネットワーク内のデバイスの数によって過剰になる可能性があるため、別々の「syslogネットワーク」を設計することもできます。システムログメッセージをロードします。その結果、UDPを使用するとメッセージが削除される可能性があります。代わりに、TCPの使用を検討することもできますが、これはすべてのディスク領域が使い果たされるまでsyslogメッセージがsyslogクライアントのキューに蓄積され、事実上「石を撃つ」ことであるため、問題になる可能性があります。 (したがって、ローカルログファイルに使用できる最大ディスク容量を定義し、システムパーティションまたはボリュームで過度のディスク使用を防ぐために別々のパーティションまたは論理ボリュームを作成することをお勧めします。)rsyslogを使用する場合は、ロギングサーバーを指定するには、アカウント関連のロギングを配信するためにrsyslogでaudispdプラグインを有効にする必要があります。

情報を厳密に検査し、潜在的に対応していない場合は、セキュリティ上の理由で何を記録するのですか?これだけでも難しい作業になることができます。したがって、ログファイル分析ソフトウェアの選択も重要です。脅威とは何か、そして私たちがタイムリーに対応できるように、私たちが理解できるようにこれを私たちに提示する方法を知るか知るように構成する必要があります。それ以外の場合、当社のセキュリティログは事故後の分析を除いてほとんど使用されません。ソフトウェアは、syslogデータを送信するように構成されているすべてのデバイス(サーバー、ワークステーション、ルーター)、またはログデータを送信できるすべてのデバイスで中央ログサーバーのデータを分析できる必要があります。

答え2

設定できます会計

次に、awkまたはsedを使用して目的の文字列を抽出します。

答え3

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

例えば

$ ls > ls.log

出力を返さないコマンドには詳細情報を使用してください。

$ mv -v foo bar > mv.log

、関数、またはPHP独自の関数を使用して同じことがphp-scriptsできるからです。echo>system

関連情報