web-dev-qa-db-ja.com

元のユーザーを記録するためにauditdを取得する

この質問は、私の前の質問に関連しています: 本番サーバーで管理者が実行したすべてのコマンドをログに記録します

管理者が個人のユーザー名でサーバーにログインし、Sudo -iを実行してrootになることは会社のポリシーです。 Sudo -iを実行すると、SudoはSudo_USERという環境変数を作成します。この変数には、元のユーザーのユーザー名が含まれています。

auditdにこの変数を各コマンドのログに含めることは可能ですか?または同等の機能。

これは、auditdの現在のルールセットです。

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# Log any command run on this system
#-a exit,always -F Arch=b64 -S execve
-a exit,always -F Arch=b32 -S execve
5
Soviero

述べたように ここ

使用する

session required pam_loginuid.so

すべてのログイン関連のPAM構成ファイル(suおよびSudo用のものではない)では、auditdが呼び出し元ユーザーのuidをフィールドauidに記録します。

auditdのログでこのIDを検索できます。

ausearch -ua <uid>

別のアカウントになりすましている場合でも、ユーザーが発行したすべてのコマンドを生成します。

4
fuero

あなたが要求している情報は、嬉しいことに、すでにログに含まれています。探したい特定のフィールドはaudです。 auditctlのマンページから:

     auid          The original ID the user logged in with. Its an abbreviation 
                   of audit uid. Sometimes its referred to as loginuid. Either 
                   the user account text or number may be used.

例として、次の方法論を使用して生成したロットエントリを次に示します。

  1. ルールを追加します:-a always,exit -S sethostname -S setdomainname -k system-locale
  2. ユーザーアカウントでシステムにログインし、su -を発行してルートシェルを起動します
  3. 次のコマンドを実行します:hostname audit-test.home.private

type = SYSCALL msg = audit(1358306046.744:260):Arch = c000003e syscall = 170 success = yes exit = 0 a0 = 2025010 a1 = 17 a2 = 7 a3 = 18 items = 0 ppid = 23922 pid = 26742 auid = 1000 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts4 ses = 16 comm = "hostname" exe = "/ usr/bin/hostname" subj = unconfined_u:unconfined_r:unconfined_t :s0-s0:c0.c1023 key = "system-locale"

したがって、はい、ログメッセージは非常に冗長ですが、ログメッセージにauid=1000がはっきりと表示されます。これは、私のユーザーアカウントのuidに対応しています。

上記の例の詳細とauditdの簡単な説明については、コミュニティブロガー(私)の IT Security からのこのブログ投稿を想像してみてください。資格 監査対象の簡単な紹介

Fueroによって言及されたausearchコマンドは、これらのかなり徹底的なログに対してレポートを検索および実行するために使用される一連のアプリケーションの一部です。

4
Scott Pack