2013-03-29 13 views
6

Unix/Linuxに入力されたすべてのコマンドをどのユーザーでもキャプチャしたいと思います。 scriptコマンドやacctユーティリティのようないくつかの選択肢があります。しかし、それらの問題は、ターミナルからファイルへのすべてのことを愚かにするか、単にコマンドの要約を提供することです。私はそれがコマンドの引数を持つ任意のユーザーによって入力されたすべてのコマンドを私に提供するユーティリティを探しています。出来ますか?これを得るためにシステムコールにフックを入れるような選択肢はありますか?Unix/Linuxで入力されたすべてのコマンドをどのようにキャプチャするのですか?

+2

シェル履歴は実行可能なオプションですか? – wei2912

+0

私はbashや他のシェルが提供する履歴を使いたくないです。 – vinayag

+1

優れた答え:http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD

答えて

4

シェルの監査については、 http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/という非常に良い記事のようです。

これは、ユーザー履歴ファイルの信頼性(とその改善に関する情報を提供します)を考慮しますが、シェルに組み込まれている明示的な監査機能についても説明します。使用している環境に、監査機能を有効にしてコンパイルされたシェルがない場合でも、(少なくともLinuxディストリビューションの場合と同様に)使用可能なビルドのソースと構成があれば、設定の残りの部分をデフォルトの配布のままにしておきながら、監査機能を有効にするのは難しいでしょう。

この方法は、何らかのプログラム内から呼び出される他のコマンド機能またはオペレーティングシステム機能によって実行されるコマンドです。だから、f.ex. perlや他のプログラミング言語のインタプリタがマシン上で利用可能な場合、おそらくperlの実行を監査することができますが、ユーザがperlインタプリタに何を伝えているかを伝えることはできません。一方、シェルの監査であっても、実行された場合にperlの実行が見られるかどうかはわかりません。いくつかのエディタ(viのようなもの)の中からエディタ内に書かれたものを処理するためのフィルタとして使用します。

したがって、シェル監査は1つの監査レイヤーを提供しますが、環境がシェル以外の他の実行パスに対して実際に強化されていない限り、ゲインはそれほど大きくありません。

監査対象のユーザーがシェルアクセスを実際に必要としているかどうかを検討する必要があります。そうでない場合は、より限定された監査機能を提供します。小さなテキストベースのメニューシステム、おそらく?

はあなたが例えば使用する場合:あなたはルートとそのようにシステムファイルを変更することで、コンソール自体をリダイレクトする立場にある場合

0

グラブ/home/victim/.bash_historyまたは/home/victim/.config/fish/fish_history

これらは、ユーザーが入力したWS引数を持つすべてのbashや魚のシェルコマンドを見てみましょうされます。

+0

質問作成者は、明示的に履歴を使用しないことを望んでいました。 –

0

これを解決する最も簡単な方法は、あります/bin/shデフォルトのコンソールとして、/bin/hsに移動し、/bin/shの下で、このようなファイルを作成します。

#!/bin/hs 

ORIGSHELL=/bin/hs 
LOGFILE=/var/log/whatyoulike 

OPTIONS="[email protected]" 

USER=`whoami` 
WEBUSER=web 
WILD=NO 
WARN=NO 



if [ "$USER" = "$WEBUSER" ] 
then 

    #Ok then - are we doing something wild? 
    for ARG in [email protected] 
    do 
    case "$ARG" in 
    *\/lynx) 
     WILD=YES 
     ;; 
    *\/wget) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/curl) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/links) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/fetch) 
     WILD=YES 
     WARN=YES 
     ;; 
    esac 
    done 

    #Are we wild? 
    if [ "$WILD" = "YES" ] 
    then 
    HOST=`hostname` 
    IPADDR=`resolveip -s $HOST` 
    NETSTAT=`/usr/bin/nighthawk -ape --numeric-hosts --numeric-ports --tcp | grep 'ESTABLISHED web'` 

    # Log it. 
    echo "`date` [$USER] $IPADDR "[email protected]"" >> $LOGFILE 
    echo "$NETSTAT" >> $LOGFILE 
    fi 
    #Are we REALLY wild? 
    if [ "$WARN" = "YES" ] 
    then 
    # Mail it! 
    mail -s 'HACKATTACK' [email protected] < $LOGFILE & 
    fi 
fi 

# Now, do it. 
exec $OPERATION "[email protected]" 

#we never come here... 
exit 0 

これは一例であり、それは透明にすべてを追跡するために使用することができますか。あなたは入力を確認したいことをすることができます。 上記のスクリプトは、現在のシェルの創始者さえ発見するために使用されるので、あなたはそれに反応することができます。 もちろん、上記のチェックは実際に使用するものではありません。) - しかし良いサンプルです。

はジミー

+0

これは、システムシェルを置き換えるときに見える、本当に危険な考えです。 –

1

は、bashのソースをつかむ 、それがお役に立てば幸いです。 exec呼び出しの周りにロガーを追加してください。それをコンパイルします。ログイン後、これを最初のコマンドとして実行してください。

他のすべてが本当に根強い力を求めています。

0

あなたがコントロールしようとしている環境の規模に応じて、しかし、監査、TTY記録、ハッキング、あなたが欲しいものを行うための無料ツールが有効にされて、あなたがたほうが良いかもしれあなたが取り組むべき課題に取り組むことに焦点を当てた監査と製品の両方を使用しています。 挿入し、簡単なライブラリ:いくつかの金融サービスクライアントで使用されるいくつかの非常に人気のあるものは、あなたがそれは何Snoopy Logger

を使用することができます[Observe-ITCentrifyPowerBroker

ホープこれは

2

助けていますプロセスとexecv/e()システムコールの間で、LDプリロードを使用します。実行されたすべてのコマンドをsyslogに記録します。

何がそうでないか: セキュリティ/監査ソリューション - 簡単に回避することができます。 組み込みのシェルコマンドはログに記録されません(シェルが呼び出されたときにシェルは新しいプロセスを作成しません - 例えばecho vs/bin/echo)。

開示:現在のスヌーピーの管理者はこちらです。

1

散発記録の場合は、通常は実行します。

ssh localhost | tee -a recorded-session.log

これは非常にうまくいきます。

関連する問題