すべてのLinuxコマンドをログサーバーに記録する方法


13

入力されたすべてのコマンドがログサーバーに送られるようにします。すべてのログをログサーバーに送信するsyslog-ngがすでに構成されています。

これを行うためのありとあらゆる方法に興味があります。不正なユーザーとセキュリティについての議論が期待されますが、最初の主要な目的は、単にセッションをログに記録することです。すべてのセッションはSSH経由ですが、コンソール接続コマンドもログに記録する必要があります。どんなシェルでもこれを実現したいのですが、主なものはbashです。(繰り返しますが、不正なユーザーが独自のシェルを作成できることは知っています...)

回答:


29

これは、問題へのアプローチ方法ではありません。シェルにユーザーにアクセス権を付与すると、そのユーザーに適切なアクセス許可があれば何でもできるようになります。コマンドロギングを忘れてください。Unixシステムでコマンドを実行する方法は多すぎます。

たとえば、ユーザーはメールクライアントを起動し(pineたとえば、記録されるコマンドは1つのみ)、そこでVIを起動する「作成」を選択し、VIから必要なコマンドを起動します:!cmd。このコマンドはどこにも記録されず、システムの観点からは、grepやsortなど、VIによって呼び出されるヘルパーアプリケーションのようなものです。シェルによって記録された唯一のコマンドはでしたpine

実際に必要なものは監査と呼ばれるようです。監査サブシステムを有効にし、監査パッケージのauditctlコマンドとauditdデーモンを使用して、記録する内容を制御します。詳細については、auditctl(8)のマニュアルページを参照してください。

すべてのプロセスのインスタンス化をログに記録することも最適ではないことに注意してください。たとえば、シンプルな./configureソフトウェアパッケージ(autotoolsを使用して作成された)は、数千のプロセスインスタンス化の作成で注目に値します。これにより、監査ログが非常に多くのノイズであふれ、後で分析することが非常に困難になります。


13

acctパッケージをインストールし(パッケージ名はディストリビューションによって異なり、プロセスアカウンティングとも呼ばれます)、使用しますlastcomm <username>

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

ttyまたはコマンド名で検索することもできます。いつものようにman lastcomm、詳細については。


11

少しのCプログラミングを実行する場合は、execveをラップするライブラリを作成し、syslogにログを記録してから、実際のexecve syscallを含むライブラリをdlopenで作成します。次に、/ etc / environmentで、LD_PRELOADを作成したライブラリのパスに設定します。

ここでループに入ることに注意する必要があります。そのため、特定のバイナリのEXECのみをログに記録するか、他のログ(syslogなど)をログから除外することができます。


実際、これは非常に役立ちます。execveラッパーの最初の検索では、スヌーピー(sourceforge.net/projects/snoopylogger)が表示されます。少し冗長ですが、私が探していたものに近いようです。テスト後、これを運用環境に入れるには管理者の承認が必要になることがわかりました。(すべての不名誉なタイプへの警告)
レオ

@Leoバージョン2.0.0以降、Snoopyは./configureを実行する際にカスタムログ形式の仕様をサポートするため、過剰な冗長性はもう問題になりません。開示:スヌーピーのメンテナーはこちら
ボストヤンSkufca 14年

7

rootshmanページ)のようなものを探しているように聞こえます。マニュアルページを引用するには:

Rootshは、エコーされたすべてのキーストロークと端末出力をファイルやsyslogに記録するシェルのラッパーです。

名前にもかかわらず、これはすべてのユーザーに使用できます。


2

おそらく、ユーザーにsudo(または同様の)を使用して気になるコマンドを実行させ、あるレベルでユーザーを信頼させる方がよいでしょう。「完全に制御する」ことに近づくにつれて、それらが何をしているかを追跡することが難しくなります。たとえば、最近このようなツールを検討しています。ほとんどの場合、ログを作成するだけで、そのようなことを価値のあるものにするために十分なユーザーとマシンがある場合、管理が困難です。:)

生成するすべての情報を考慮してください。どれくらい気にしますか?おそらく非常に少ない-あなたはほとんど価値のないログを生成しています。他の人が示唆しているように、あなたが実際に気にしていることを監査することは、おそらくあなたをより良い最終状態に導きます。


1

Bashは4.1以降のsyslogサポートでコンパイルできます。

それは絶対確実ではありません(プロセスアカウンティングがその方が良いかもしれません)が、それは主にユーザーインタラクションです。ボリュームはより管理しやすく、異常が疑われる場合はより詳細なものに切り替えることができます。

そうは言っても、これは非常に邪魔であり、ユーザーとしては、あなたがそれを始める前に非常に具体的なプライバシー警告を期待するでしょう。


0

セッションロギングを行うsudosh(http://sudosh.sourceforge.net)もあります。ユーザーの定義済みシェルとして、またはsudoを介して実行するオプションがあります。各セッションのタイミングも追跡するので、セッションを再生して見ることができます(セッションの編集などを含む)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.