fragen stichworte

Auditd zur Aufzeichnung des ursprünglichen Benutzers erhalten

Diese Frage bezieht sich auf meine vorherige Frage: Alle Befehle, die von Admins auf Produktionsservern ausgeführt werden,

protokollieren

Es ist eine Unternehmensrichtlinie für Administratoren, sich über einen persönlichen Benutzernamen bei den Servern anzumelden und anschließend sudo -i auszuführen, um root zu werden. Beim Ausführen von sudo -i erstellt sudo eine Umgebungsvariable mit dem Namen SUDO_USER, die den Benutzernamen des ursprünglichen Benutzers enthält.

Kann auditd diese Variable für jeden Befehl in ihre Protokolle aufnehmen? Oder ein funktionales Äquivalent.

Dies ist der aktuelle Regelsatz für 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

antworten

Wie bereits erwähnt hier:

Verwenden von

session required pam_loginuid.so

In allen Login-bezogenen PAM-Konfigurationsdateien (nicht die für su und sudo) wird auditd die Uid des aufrufenden Benutzers im Feld auid protokollieren lassen.

Mit

können Sie die Protokolle von auditd nach dieser ID durchsuchen

ausearch -ua <uid>

liefert alle Befehle, die der Benutzer ausgegeben hat, selbst wenn er sich als anderer Benutzer ausgibt.

Die angeforderten Informationen sind erfreulicherweise bereits in den Protokollen enthalten. Das spezifische Feld, nach dem Sie suchen möchten, ist aud. Von der Hilfeseite für 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.

Hier ist ein Beispiel für einen Eintrag, den ich mit folgender Methode erstellt habe:

  1. Fügen Sie die Regel hinzu: -a always,exit -S sethostname -S setdomainname -k system-locale
  2. Melden Sie sich mit meinem Benutzerkonto beim System an und starten Sie eine Root-Shell, indem Sie su -
  3. eingeben
  4. Führe den Befehl aus: 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"

Also, während ja die Log-Nachricht ziemlich ausführlich ist, können wir auid=1000 in der Log-Nachricht deutlich sehen, die der UID meines Benutzerkontos entspricht.

Weitere Einzelheiten zum obigen Beispiel sowie eine kurze Beschreibung von auditd finden Sie in diesem Blogpost von IT Security, einem Community-Blogger (mir) mit dem fantasievollen Titel Eine kurze Einführung in Auditd.

Der von fuero erwähnte ausearch -Befehl ist Teil einer Reihe von Anwendungen, die zum Durchsuchen und Ausführen von Berichten gegen diese ziemlich gründlichen Protokolle verwendet werden.