もし私が:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
これにより、ログに次の情報が表示されます。
[root@notebook /var/log] grep 123456uu *
auth.log:Jan 9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log]
しかし、もし私が:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
ログには表示されません。
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
私の質問:「sudo su -」コマンドのロギングをどのようにオンにしますか?
オペレーティングシステムはUbuntu 12.04ですが、問題は一般的です。
アップデート#1:
[user@notebook ~] sudo su -
[sudo] password for user:
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]
答え1
Ubuntu 12.04を使用しているのでlog_input
、オプションでlog_output
有効になっているI / Oロギング機能を見てください。
log_input
設定されている場合、
sudo
コマンドは擬似ttyで実行され、すべてのユーザー入力が記録されます。 I / Oリダイレクトまたはコマンドがパイプの一部であるため、標準入力がユーザーのttyに接続されていない場合、その入力もキャプチャされ、別々のログファイルに保存されます。通常のsudoログ行に含まれる一意のセッションID(プレフィックスが.sudoです)を使用して、
iolog_dir
このオプションで指定されたディレクトリに入力を書き込みます(デフォルト)。このオプションを使用してセッションIDの形式を制御できます。/var/log/sudo-io
TSID=
iolog_file
ユーザー入力には、パスワード(画面に表示されていなくても)などの機密情報を含めることができます。これは暗号化されていない状態でログファイルに保存されます。ほとんどの場合、単にlog_outputを介してコマンド出力を記録するだけで十分です。
log_output
設定されている場合、
sudo
コマンドはpseudo-ttyで実行され、script(1)コマンドと同様に画面に送信されたすべての出力が記録されます。 I / Oリダイレクトまたはコマンドがパイプの一部であるため、標準出力または標準エラーがユーザーのttyに接続されていない場合、その出力もキャプチャされ、別々のログファイルに保存されます。出力は、通常のsudoログ行(デフォルト)に含まれる一意のセッションIDを使用して、このオプションで指定されたディレクトリに書き込まれます
iolog_dir
。このオプションはセッションIDの形式を制御するために使用できます。/var/log/sudo-io
TSID=
iolog_file
出力ログは sudoreplay(8) ユーティリティーを使用して表示でき、使用可能なログのリストまたは検索にも使用できます。
実装:Sudoバージョン最小:1.7.4p4が必要です。
/etc/sudoers
編集:必要なすべてのsudoersエントリに2つのタグ(コマンドまたはエイリアスを使用して「su」が指定されている場合)を追加するだけです。ログ入力とログ出力。
例:
%admins ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: ALL
次のデフォルトのログディレクトリ構造をに追加しますsudoers
。
Defaults iolog_dir=/var/log/sudo-io/%{user}
答え2
実行していないため、grep
while操作は失敗します。実行中なのでシェルが起動します。その後、シェルが 。sudo su -
echo 1234567zz
su -
echo
これは意図的なものです。すべてのコマンドの実行を記録すると、システムログは無駄な情報でいっぱいになります(通常は見えない後ろで実行される多数のプログラムがあります)。
grepを変更するとgrep 'COMMAND=/bin/su -' *
表示されます。
sudo su -
それも役に立ちませんsu
。sudo -i
同じことをしてください。
答え3
複雑さが追加され、「sudo su -」で実行されたコマンドを記録する3つの方法があります。
- Bashコマンド履歴に依存
- execve ロギングラッパーのインストール
- SELinuxを使用した監査
どちらが適切かは、ロギングを通じて達成しようとしている目標によって異なります。
1) Bash コマンド履歴
十分な行が維持され、他のセッションで上書きされず、コマンドが無視されず、タイムスタンプが正しく表示されるように履歴ツールを構成する必要があります。 (HIST *変数参照バッシュマニュアル)。履歴ファイルを編集したり、環境を操作したり、別のシェルを実行したりすると、簡単に破損する可能性があります。
2) ラッパーの実行
スヌーピーレコーダー一つです。/etc/profile
ロガーライブラリがプロセスのメモリマップ()にあることを確認し、/proc/<pid>/maps
そうでない場合はそれを設定してLD_PRELOAD
再起動します(使用exec $SHELL --login "$@"
)。$LIB/snoopy.so
または、/etc/ld.so.preloadにエントリを使用または追加することもできます。等価パスsnoopy.soの32/64ビット版。
より困難ですが、LD_PRELOAD
スヌーピングコードが実行されなくなるように実行環境を操作して、上記の環境変数のバージョンを破損する可能性があります。
コンテンツを信頼できるように、システムログをすぐに送信する必要があります。
3) レビュー
設定はexecveラッパーよりも少し簡単ですが、ここから情報を抽出するのは難しいです。これは、「ユーザーがコマンドを実行した後にシステムに与える影響を記録する方法はありますか?sudo su -
」という質問に対する答えです。コンテンツを信頼できるように、システムログをすぐに送信する必要があります。
これサーバー障害の回答auditdで使用するためのかなり包括的な構成のようです。
他の提案もありますサーバー障害に関する同様の質問。
答え4
他の人が言ったように、sudo
これはできません。
代わりにauditd
ログインするには.ifを使用してください。すべてルートとして実行するには(たとえば、crontabで実行された操作を含む)、次のようにします。
sudo auditctl -a exit,always -F euid=0
ETA:すべてを記録するとパフォーマンスに影響を与えるため、これにはいくつかの制限を設けることをお勧めします。例を参照してくださいman auditctl
。
元のログインuidがルートではなくシステムコールのみを記録するには、次のコマンドを使用します。
sudo auditctl -a exit,always -F euid=0 -F auid!=0
ログは通常 /var/log/audit/audit.log で終了します。で検索できますausearch
。
とのマニュアルページに詳細がありますauditctl
。audit.rules
ausearch