Unix/Linux で任意のユーザーが入力したすべてのコマンドをキャプチャしたいと考えています。スクリプト コマンドや acct ユーティリティを使用するなど、いくつかの代替手段があります。しかし、それらの問題は、端末からファイルまですべてをダムにするか、単にコマンドの要約を提供することです。コマンドの引数を使用してユーザーが入力したすべてのコマンドを提供するユーティリティを探しています。出来ますか?これを取得するためにシステムコールにフックを作成するような代替手段はありますか?
8 に答える
http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/には、シェル監査に関する非常に優れた記事があるよう です。
これは、ユーザー履歴ファイルの信頼性などを考慮します (およびそれを改善するための情報を提供します) が、シェルに組み込まれている明示的な監査機能についても説明します。使用している環境に、監査機能を有効にしてコンパイルされたシェルがない可能性がありますが、ビルドのソースと構成が利用可能な場合 (少なくともすべての Linux ディストリビューションで行うように)、それは必要です。デフォルトのディストリビューションの残りの構成を維持しながら、監査機能を有効にするのは非常に困難です。
このアプローチがまだ開いているのは、他のコマンドを介して実行されるコマンド、または一部のプログラム内から呼び出されるオペレーティング システムの機能です。だから、f.ex。マシンで perl またはその他のプログラミング言語インタープリターを使用できる場合、おそらく perl の実行を監査できますが、ユーザーが perl インタープリターに何をするように指示したかはわかりません。一方、シェルの監査でも、f.ex で実行された場合に perl の実行が見られるかどうかはわかりません。エディター内で書かれたものを処理するフィルターとして (vi のような) エディター内から。
そのため、シェル監査は監査の 1 つのレイヤーを提供しますが、環境がシェル以外の実行パスに対して本当に厳しくされていない限り、利益はそれほど大きくありません。
監査対象のユーザーが実際にシェル アクセスを必要としているかどうかを検討する必要があります。そうでない場合は、監査機能を備えた、より制限されたものを提供してください。おそらく、小さなテキストベースのメニューシステムでしょうか?
スヌーピーロガーが使える
概要: プロセスと execv/e() syscalls の間に LD プリロードによって自身を挿入する単純なライブラリ。実行されたすべてのコマンドを syslog に記録します。
そうでないもの: セキュリティ/監査ソリューション - 簡単に回避できます。組み込みのシェル コマンドはログに記録されません (これらは内部的なものであり、呼び出されたときにシェルは新しいプロセスを作成しません。たとえば、echo と /bin/echo の比較)。
開示:現在のスヌーピーメンテナーはこちら。
bash ソースを取得します。exec 呼び出しの周りにロガーを追加します。コンパイルします。ログイン後、最初のコマンドとしてこれを実行します。
他のすべてのものは、本当にルート パワーを必要とします。
監査、tty 記録、ハッキング、および無料のツールを使用して、必要なことを実行できます。ただし、制御しようとしている環境の規模によっては、課題に対処することに重点を置いた監査と製品の両方を使用する方がよい場合があります。取り組みたい。いくつかの非常に人気のあるもので、いくつかの金融サービス クライアントで使用されています [ Observe-IT、Centrify、PowerBroker ]
お役に立てれば
散発的な記録の場合、私は通常実行します
ssh ローカルホスト | ティー -a 記録された-session.log
これは非常にうまく機能します。
掴む/home/victim/.bash_history
か/home/victim/.config/fish/fish_history
これにより、ユーザーが入力した引数を持つすべての bash および fish シェル コマンドを確認できます。