Es ist eine Unternehmensrichtlinie für Administratoren, sich über einen persönlichen Benutzernamen bei den Servern anzumelden und dann sudo -i
zu root zu werden. Beim Ausführen erstellt sudo -i
sudo eine Umgebungsvariable namens SUDO_USER
, die den Benutzernamen des ursprünglichen Benutzers enthält.
Gibt es eine Möglichkeit, ALLE Befehle in syslog mit der folgenden Syntax zu protokollieren :
${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}
Ein Beispieleintrag wäre:
Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg
Offensichtlich muss es nicht genau die obige Syntax sein, es muss nur ein Minimum des realen Benutzers (z. B. root), des sudo-Benutzers (z. B. ksoviero) und des vollständigen ausgeführten Befehls (z. B. yum) enthalten installiere random-pkg).
Ich habe es bereits versucht snoopy
, aber die SUDO_USER
Variable war nicht enthalten .
auditd
.auditd
, und obwohl ich alle ausgeführten Befehle protokolliert habe, enthält es dieSUDO_USER
Variable (oder entsprechende Informationen) nicht und ich kann keinen Weg finden, sie einzuschließen. Jede Hilfe wäre sehr dankbar!Antworten:
Update : 2 weitere Dinge, die in den Kommentaren und in den Folgefragen aufgetaucht sind:
auditd
diese Weise wird das Protokollvolumen erheblich erhöht, insbesondere wenn das System über die Befehlszeile stark ausgelastet ist. Passen Sie Ihre Protokollaufbewahrungsrichtlinie an.Auditd
Protokolle auf dem Host, auf dem sie erstellt wurden, sind genauso sicher wie andere Dateien auf derselben Box. Leiten Sie Ihre Protokolle an einen Remote-Protokollsammlungsserver wie ELK oder Graylog weiter, um die Integrität Ihrer Protokolle zu gewährleisten. Zusätzlich zu dem obigen Punkt können alte Protokolle aggressiver gelöscht werden.Wie von Michael Hampton vorgeschlagen,
auditd
ist hier das richtige Werkzeug für den Job.Ich habe dies auf einer Ubuntu 12.10-Installation getestet, sodass Ihre Laufleistung auf anderen Systemen variieren kann.
Installieren Sie
auditd
:apt-get install auditd
Fügen Sie diese 2 Zeilen hinzu zu
/etc/audit/audit.rules
:Diese verfolgen alle Befehle, die von root (
euid=0
) ausgeführt werden. Warum zwei Regeln? Derexecve
Syscall muss sowohl im 32- als auch im 64-Bit-Code verfolgt werden.Um
auid=4294967295
Nachrichten in Protokollen loszuwerden , fügen Sieaudit=1
die Cmdline des Kernels hinzu (durch Bearbeiten/etc/default/grub
).Legen Sie die Linie
session required pam_loginuid.so
in allen PAM-Konfigurationsdateien, die für login (
/etc/pam.d/{login,kdm,sshd}
) relevant sind , aber nicht in den Dateien, die fürsu
oder relevant sindsudo
. Auf dieseauditd
Weise können Sie den anrufenden Benutzeruid
beim Anrufen vonsudo
oder korrekt ermittelnsu
.Starten Sie Ihr System jetzt neu.
Lassen Sie uns einloggen und einige Befehle ausführen:
Dies wird in etwa so aussehen
/var/log/audit/auditd.log
:Die
auid
Spalte enthält den aufrufenden Benutzeruid
, mit dem Sie nach Befehlen filtern können, die dieser Benutzer ausführtDies listet sogar Befehle auf, die der Benutzer als root ausgeführt hat.
Quellen:
quelle
Denken Sie daran, dass sudo selbst alle sudo-Befehle im syslog protokolliert. Daher sollten alle Benutzer mit Privilegien dazu angehalten werden, nicht nur sudo zu verwenden, um eine Root-Shell zu erhalten, sondern:
Das Problem bei diesem oder einem anderen Ansatz, an den ich gedacht habe, ist, dass es als
root
Benutzer ziemlich schwierig ist, einen Benutzer daran zu hindern, sich einer bestimmten Art der Protokollierung zu entziehen. Daher ist alles, was Sie versuchen, <100%. Es tut mir leid, das zu sagen.Aufklärung, Dokumentation, Durchsetzung und vor allem Vertrauen ist gefragt.
quelle
Ich war einmal mit dem gleichen Problem konfrontiert und musste eine schnelle und schmutzige Lösung finden - jeder sudo-Benutzer hat seine eigene Verlaufsdatei, sobald er den Befehl ausführt
sudo -i
In
/root/.bashrc
der folgenden Zeile habe ich hinzugefügt -Jeder Benutzer, der sich als root-Benutzer ausgibt, hat eine Verlaufsdatei .bash_history-username.
Eine andere Methode -
Fügen Sie den folgenden Code hinzu,
/root/.bashrc
und der Benutzername, der Sudo-Benutzer und der Befehl werden an die Protokolldatei angehängt, wo immer die Benachrichtigungsebene festgelegt ist, höchstwahrscheinlich / var / log / messages.Gutschrift an - http://backdrift.org/logging-bash-history-to-syslog-using-traps
quelle
/bin/sh
,unset HISTFILE
oder/bin/bash --norc
.Eine Reihe von Einrichtungen untersagt die Verwendung von auditd, da es ressourcenintensiv ist und die Möglichkeit von Denial-of-Service-Angriffen besteht.
Eine Lösung besteht darin, die neueste Korn-Shell (ksh-93, siehe http://kornshell.com/ für Details) so zu konfigurieren, dass alle als Root ausgeführten Befehle auf einem Remote-Syslog-Server protokolliert werden und diese dann, außer im Notfall, nach Richtlinien erforderlich sind In bestimmten Situationen melden sich Sysadmins mit persönlichen Konten an und führen die erweiterte Korn-Shell über sudo aus. Durch die Prüfung der Protokolle kann festgestellt werden, wann ein Administrator eine andere Shell von der genehmigten Shell aus startet, um deren Spuren zu verwischen, und die SA kann dann nach Bedarf geschult werden.
quelle
Sudo hat etwas, das als Sudoreplay bezeichnet wird, wenn aktivierte Sitzungen protokolliert werden und später wiedergegeben werden können. Es funktioniert ähnlich wie der
script
Befehl, mit dem ein Typoskript einer Terminalsitzung erstellt wird, das später mit demscriptreplay
Befehl wiedergegeben werden kann .quelle
Nicht, dass mit den anderen Antworten etwas nicht stimmt, aber wenn Sie der Meinung sind, dass
sudo
die Protokollierung übersyslog
zufriedenstellend ist, kann ich einen Fehler vorschlagen: Protokollieren Sie ihn über das Netzwerk auf einem Remote-Überwachungshost.Dies umgeht das Problem: "Jetzt, wo ich root geworden bin, kann ich jede Spur meines Fehlverhaltens aus den Protokollen entfernen." Möglicherweise sind Sie jetzt in der lokalen Box als Root angemeldet, können dieses Protokollpaket jedoch nicht vom Netzwerk zurückrufen und verfügen (vermutlich) nicht über Root-Berechtigungen auf dem Remote-Überwachungshost.
Ich mache dies mit einigen der Netzwerke, die ich seit Jahren verwalte, und es hat zwei weitere Signalvorteile:
Erstens gibt es einen Ort im Netzwerk, an dem alle Syslogs überprüft werden können, was die Korrelation von Vorfällen erheblich vereinfacht. Dies ist auch eine zentrale Anlaufstelle für Untersuchungen wie "Wann hat
juno
sich der NFS-Server beschwert,hera
nicht geantwortet? Hat sich jemand beschwert?" das Gleiche zur gleichen Zeit? Wenn ja,hera
ist es wahrscheinlich das Problem, mal sehen, was sie protokolliert hat; wenn nicht, istjuno
die Netzwerkverbindung verdächtiger, mal sehen, wasjuno
zu dieser Zeit noch protokolliert wurde. "Zweitens wird die Syslog-Protokollrotation einfacher: Sie bewahren Kopien von Protokollen nicht länger als einige Tage auf lokalen Hosts auf, stellen jedoch sicher, dass der Überwachungsserver über sehr viel Speicherplatz verfügt, und lassen alle Syslogs mehrere Jahre dort. Wenn Sie sie beispielsweise für forensische Überprüfungszwecke auf WORM-Medien schreiben möchten, müssen Sie nur ein WORM-Laufwerk kaufen.
quelle
Seit Version 2.0.0 kann snoopy beliebige Umgebungsvariablen protokollieren.
In einem kürzlich veröffentlichten Beitrag wurde jedoch darauf hingewiesen, dass der Holzeigentümer von tty eine ziemlich effektive und elegante Antwort auf die Frage "Wer hat diesen Befehl als Root ausgeführt?" Ist.
Offenlegung: Ich bin snoopy Betreuer.
quelle