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. Bash-Shellに入力されたすべてのコマンドをPythonスクリプトでラップする
- 2. すべてのコマンドが入力された後、python pdbで 'l'の出力を表示するには
- 3. キャプチャした入力をtypo3で表示するにはどうすればよいですか?
- 4. 選択入力をすべてのプラットフォームのすべてのブラウザで同じに見えるようにするにはどうすればよいですか?
- 5. すべての入力されたコマンドをlinuxコンソールにコピーし、その結果をファイルに出力します。
- 6. Javaでキャプチャされたすべてのグループを取得する
- 7. SQL Serverの複数のテーブルで同時に入力/更新されたすべてのレコードを選択するにはどうすればよいですか?
- 8. どのようにmod_wsgiによってApacheのすべてのhttp要求をキャプチャするのですか?
- 9. TeamCityでキャプチャされるメッセージをFinalBuilderから出力するにはどうすればよいですか?
- 10. Reactjsで入力中のすべてのテキストを、どのように選択するか?たとえば
- 11. サードパーティの入出力ストリームをどのように扱うべきですか?
- 12. キャプチャされたコマンドから複数行の出力をエコーする方法は?
- 13. キーボード入力はどのように端末に入力されますか?
- 14. 特定の期間内にMySQLデータベースで実行されたすべてのコマンドを調べるにはどうすればよいですか?
- 15. カレンダーでHTMLの入力テキストボックスに日付を入力するにはどうすればよいですか?
- 16. @の前のデータだけがデータベースに入力されるように、電子メール入力アドレスをトリミングするにはどうすればよいですか?
- 17. iPhoneで入力するすべてのタイプを入力してください
- 18. "標準入力コマンド"をどのように受け取り、プログラムの実行を継続するかを知るにはどうすればよいですか?
- 19. 誰かが入力テキストボックスなしであなたのウェブサイトに「入力」できるようにするにはどうすればよいですか?
- 20. RSpec。パイプされた出力やリダイレクトされた出力をどのように色づけるのですか?
- 21. Windowsのcmdシェルからどのように出力をキャプチャできますか?
- 22. ライブ入力でキーボード入力を受け入れるにはどうすればよいですか?
- 23. サーブレットでフォーム入力がクリアされないようにするにはどうすればよいですか?
- 24. どのようにtouchend座標をキャプチャするのですか?
- 25. フィールドセットなしでformtasticネストされた入力を作成するにはどうすればよいですか?
- 26. JSpinnerのキーボード入力とマウス入力を無効にするにはどうすればよいですか?
- 27. Rustでシステムコマンドを呼び出して出力をキャプチャするにはどうすればよいですか?
- 28. grunt-shell-spawnコマンドの出力はどのように表示されますか?
- 29. 並べ替えられたリストの並行ディクショナリにどのように入力できますか?
- 30. 入力されたテキストフィールドの値に基づいてsenchaでどのように問い合わせますか?
シェル履歴は実行可能なオプションですか? – wei2912
私はbashや他のシェルが提供する履歴を使いたくないです。 – vinayag
優れた答え:http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD