Unix/Linuxに入力されたすべてのコマンドをどのユーザーでもキャプチャしたいと思います。 scriptコマンドやacctユーティリティのようないくつかの選択肢があります。しかし、それらの問題は、ターミナルからファイルへのすべてのことを愚かにするか、単にコマンドの要約を提供することです。私はそれがコマンドの引数を持つ任意のユーザーによって入力されたすべてのコマンドを私に提供するユーティリティを探しています。出来ますか?これを得るためにシステムコールにフックを入れるような選択肢はありますか?Unix/Linuxで入力されたすべてのコマンドをどのようにキャプチャするのですか?
答えて
シェルの監査については、 http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/という非常に良い記事のようです。
これは、ユーザー履歴ファイルの信頼性(とその改善に関する情報を提供します)を考慮しますが、シェルに組み込まれている明示的な監査機能についても説明します。使用している環境に、監査機能を有効にしてコンパイルされたシェルがない場合でも、(少なくともLinuxディストリビューションの場合と同様に)使用可能なビルドのソースと構成があれば、設定の残りの部分をデフォルトの配布のままにしておきながら、監査機能を有効にするのは難しいでしょう。
この方法は、何らかのプログラム内から呼び出される他のコマンド機能またはオペレーティングシステム機能によって実行されるコマンドです。だから、f.ex. perlや他のプログラミング言語のインタプリタがマシン上で利用可能な場合、おそらくperlの実行を監査することができますが、ユーザがperlインタプリタに何を伝えているかを伝えることはできません。一方、シェルの監査であっても、実行された場合にperlの実行が見られるかどうかはわかりません。いくつかのエディタ(viのようなもの)の中からエディタ内に書かれたものを処理するためのフィルタとして使用します。
したがって、シェル監査は1つの監査レイヤーを提供しますが、環境がシェル以外の他の実行パスに対して実際に強化されていない限り、ゲインはそれほど大きくありません。
監査対象のユーザーがシェルアクセスを実際に必要としているかどうかを検討する必要があります。そうでない場合は、より限定された監査機能を提供します。小さなテキストベースのメニューシステム、おそらく?
はあなたが例えば使用する場合:あなたはルートとそのようにシステムファイルを変更することで、コンソール自体をリダイレクトする立場にある場合
グラブ/home/victim/.bash_history
または/home/victim/.config/fish/fish_history
これらは、ユーザーが入力したWS引数を持つすべてのbashや魚のシェルコマンドを見てみましょうされます。
質問作成者は、明示的に履歴を使用しないことを望んでいました。 –
これを解決する最も簡単な方法は、あります/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
これは一例であり、それは透明にすべてを追跡するために使用することができますか。あなたは入力を確認したいことをすることができます。 上記のスクリプトは、現在のシェルの創始者さえ発見するために使用されるので、あなたはそれに反応することができます。 もちろん、上記のチェックは実際に使用するものではありません。) - しかし良いサンプルです。
はジミー
これは、システムシェルを置き換えるときに見える、本当に危険な考えです。 –
は、bashのソースをつかむ 、それがお役に立てば幸いです。 exec呼び出しの周りにロガーを追加してください。それをコンパイルします。ログイン後、これを最初のコマンドとして実行してください。
他のすべてが本当に根強い力を求めています。
私はこれが古いことを知っていますが、私はスクリプトコマンドが彼が探していたものかもしれないと思いますか?
> script my_output_file
Script started, file is my_output_file
http://www-users.cs.umn.edu/~gini/1901-07s/files/script.html
あなたがコントロールしようとしている環境の規模に応じて、しかし、監査、TTY記録、ハッキング、あなたが欲しいものを行うための無料ツールが有効にされて、あなたがたほうが良いかもしれあなたが取り組むべき課題に取り組むことに焦点を当てた監査と製品の両方を使用しています。 挿入し、簡単なライブラリ:いくつかの金融サービスクライアントで使用されるいくつかの非常に人気のあるものは、あなたがそれは何Snoopy Logger
を使用することができます[Observe-IT、CentrifyとPowerBroker
ホープこれは
助けていますプロセスとexecv/e()システムコールの間で、LDプリロードを使用します。実行されたすべてのコマンドをsyslogに記録します。
何がそうでないか: セキュリティ/監査ソリューション - 簡単に回避することができます。 組み込みのシェルコマンドはログに記録されません(シェルが呼び出されたときにシェルは新しいプロセスを作成しません - 例えばecho vs/bin/echo)。
開示:現在のスヌーピーの管理者はこちらです。
散発記録の場合は、通常は実行します。
ssh localhost | tee -a recorded-session.log
これは非常にうまくいきます。
- 1. コマンドラインですべてのコマンドと出力をキャプチャするにはどうすればよいですか?
- 2. Bash-Shellに入力されたすべてのコマンドをPythonスクリプトでラップする
- 3. Autohotkeyで生のマウス入力をキャプチャして送信するにはどうすればよいですか?
- 4. ECSで起動されたコンテナのコンソール出力をキャプチャするにはどうすればよいですか?
- 5. 入力されたすべての特殊文字はどのようにして判別できますか?
- 6. すべてのコマンドを一度に入力できますか?
- 7. すべてのコマンドが入力された後、python pdbで 'l'の出力を表示するには
- 8. PowerShellでコマンド実行によって表示される情報をどのようにキャプチャしますか?
- 9. jsonリクエストに入力された入力をどのように取得するのですか?
- 10. Perlでは、あるコマンドの出力を別のコマンドの入力にどのようにパイプしますか?
- 11. ターミナルからのユーザー入力も必要なコマンドのすべての出力をキャプチャする方法は?
- 12. キャプチャした入力をtypo3で表示するにはどうすればよいですか?
- 13. 選択入力をすべてのプラットフォームのすべてのブラウザで同じに見えるようにするにはどうすればよいですか?
- 14. Laravelリクエストは、入力がどのような形式でキャプチャされたかを示します
- 15. ベクトルで一連の入力をどのように取るべきですか?
- 16. Javaでキャプチャされたすべてのグループを取得する
- 17. どのようにmod_wsgiによってApacheのすべてのhttp要求をキャプチャするのですか?
- 18. TeamCityでキャプチャされるメッセージをFinalBuilderから出力するにはどうすればよいですか?
- 19. Xamarinで*すべての* iOS例外を確実にキャプチャするにはどうすればよいですか?
- 20. type = "value"以外のすべての入力を選択するにはどうすればよいですか?
- 21. SQL Serverの複数のテーブルで同時に入力/更新されたすべてのレコードを選択するにはどうすればよいですか?
- 22. すべての入力されたコマンドをlinuxコンソールにコピーし、その結果をファイルに出力します。
- 23. linuxのlsコマンドのようにWindowsのdirコマンドをどのように出力するのですか?
- 24. Javaですべてのコンパイルをキャプチャするにはどうすればよいですか?
- 25. Reactjsで入力中のすべてのテキストを、どのように選択するか?たとえば
- 26. これはどのように入力を逆転させるのですか?
- 27. サードパーティの入出力ストリームをどのように扱うべきですか?
- 28. どのように動的に生成された "挿入"コマンドから値を返すのですか?
- 29. エイリアスのコマンドの出力をエイリアスが実行されたときに評価されるようにするにはどうすればよいですか?
- 30. キャプチャされたコマンドから複数行の出力をエコーする方法は?
シェル履歴は実行可能なオプションですか? – wei2912
私はbashや他のシェルが提供する履歴を使いたくないです。 – vinayag
優れた答え:http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD