Wenn ich:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
Dann kann ich das in den Protokollen sehen:
[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]
aber wenn ich:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
Ich kann es nicht in den Protokollen sehen:
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
Meine Frage: Wie kann ich die Anmeldung für die Befehle im "sudo su -" einschalten?
OS ist ein Ubuntu 12.04, aber die Frage ist im Allgemeinen.
UPDATE 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]
sudo su -
, kann er auch alle Protokolleinträge entfernen, die Sie für seine Aktionen vornehmen können. Wenn Sie 100% ige Sicherheit bei der Protokollierung wünschen, müssen Sie die Protokollierungsudo
stark einschränken undsudo su
vollständig verbieten .Antworten:
Da Sie unter Ubuntu 12.04 arbeiten, sehen Sie sich die E / A-Protokollierungsfunktionen an, die über die Optionen
log_input
und aktiviert wurdenlog_output
.UMSETZUNG: Sudo-Version mindestens: 1.7.4p4 erforderlich.
/etc/sudoers
Änderung: Sie müssen lediglich zwei Tags zu allen erforderlichen sudoers-Einträgen hinzufügen (wobei "su" angegeben ist, entweder mit Befehl oder Alias). LOG_INPUT und LOG_OUTPUT.Beispiel:
Fügen Sie die folgende Standardstruktur für das Protokollverzeichnis hinzu
sudoers
:quelle
Ihr ,
grep
wenn dabeisudo su -
versagt , weil Sie nicht laufenecho 1234567zz
, du läufstsu -
, die startet eine Shell. Die Shell läuft dann deineecho
.Dies ist absichtlich und das Protokollieren jeder einzelnen Befehlsausführung würde Ihr Syslog mit nutzlosen Informationen überfluten (es gibt normalerweise Tonnen von Programmen, die hinter den Kulissen ausgeführt werden, die Sie normalerweise nicht sehen).
Wenn Sie Ihr grep auf ändern, werden
grep 'COMMAND=/bin/su -' *
Sie es sehen.sudo su -
ist auch eine nutzlose Verwendung vonsu
.sudo -i
macht das gleiche.quelle
grep 'COMMAND=/bin/su -' *
(oder ohne Wildcard:)grep 'COMMAND=/bin/su -' /var/log/auth.log
?sudo -
) wird protokolliert und Ihre aktualisierte Ausgabe zeigt dies. Das ist alles worüber wir hier sprechen. Die anderen Befehle, z. B.echo
nach dem Benutzerwechselsudo -
, sind keine sudo-Befehle und daher (gemäß meiner Antwort) nicht angemeldetauth.log
. Es werden nur einzelne, explizit mit vorangestellte Befehlesudo
protokolliert. Sosudo echo
wird protokolliert, aber ebenecho
nicht, unabhängig davon, dass Sie zum Superuser gewechselt haben.In zunehmender Komplexität gibt es drei Möglichkeiten, die im "sudo su -" ausgegebenen Befehle zu protokollieren:
Welche Methode geeignet ist, hängt davon ab, was Sie mit der Protokollierung erreichen möchten.
1) Bash-Befehlsverlauf
Sie sollten die Verlaufsfunktion konfigurieren, um sicherzustellen, dass genügend Zeilen vorhanden sind, nicht aus verschiedenen Sitzungen überschrieben, Befehle nicht ignoriert und die entsprechenden Zeitstempel verwendet werden. (Siehe HIST * -Variablen im bash-Handbuch ). Einfaches Umkehren durch Bearbeiten der Verlaufsdatei, Bearbeiten der Umgebung oder Ausführen einer anderen Shell.
2) Wrapper ausführen
Snoopylogger ist einer. Fügen Sie eine Überprüfung hinzu,
/etc/profile
dass sich die Logger-Bibliothek in der Speicherzuordnung des Prozesses befindet (/proc/<pid>/maps
), und setzen Sie sie gegebenenfallsLD_PRELOAD
und starten Sie sie neu (mitexec $SHELL --login "$@"
). Alternativ können Sie einen Eintrag zu /etc/ld.so.preload mit$LIB/snoopy.so
oder gleichwertige Pfade zu Ihren 32/64-Bit-Versionen von snoopy.so hinzufügen.Obwohl dies schwieriger ist, kann die
LD_PRELOAD
Version der Umgebungsvariablen von oben immer noch durch Manipulieren der Ausführungsumgebung untergraben werden, sodass der Snoopy-Code nicht mehr ausgeführt wird.Syslog sollte sofort gesendet werden, damit der Inhalt vertrauenswürdig ist.
3) auditd
Etwas einfacher zu konfigurieren als der Execve-Wrapper, aber schwerer zu extrahieren. Dies ist die Antwort auf die Frage, die Sie wahrscheinlich wirklich stellen: "Gibt es eine Möglichkeit zu protokollieren, welche Auswirkung der Benutzer auf ein System nach dessen Ausgabe hatte?
sudo su -
". Syslog sollte sofort gesendet werden, damit der Inhalt vertrauenswürdig ist.Diese Serverfault-Antwort scheint eine ziemlich umfassende Konfiguration zur Verwendung mit auditd zu sein.
Es gibt einige andere Vorschläge zu einer ähnlichen Frage zu Serverfehler .
quelle
Weil es
sudo
die Protokollierung ist; Es protokolliert Sudo-Befehle. Im ersten Fallsudo echo
wird protokolliert. Im zweiten Fallsudo su
wird angemeldet (suchen Sie danach in/var/log/auth.log
).su
ist "Benutzer wechseln", standardmäßig auf root. Alles, was Sie danach tun, geht nicht durchsudo
. Es ist ungefähr so, als ob Sie sich als root angemeldet hätten. Die Anmeldung selbst wird protokolliert, aber nicht jeder einzelne Befehl.quelle
Wie andere gesagt haben,
sudo
kann das nicht.Verwenden Sie stattdessen
auditd
. Wenn Sie alles protokollieren möchten, was von root erledigt wurde (einschließlich z. B. von crontab), verwenden Sie Folgendes:ETA: Beachten Sie, dass sich die Protokollierung auf die Leistung auswirkt. Sie sollten sie daher möglicherweise etwas einschränken. Siehe
man auditctl
Beispiele.Wenn Sie nur Systemaufrufe protokollieren möchten, bei denen die ursprüngliche Anmelde-UID nicht root ist, verwenden Sie stattdessen Folgendes:
Die Protokolle werden normalerweise in /var/log/audit/audit.log gespeichert. Sie können sie mit suchen
ausearch
.Es stehen weitere Informationen in den Manpages
auditctl
,audit.rules
undausearch
.quelle
sudo su -
wären und du wieder auf dem ersten Platz bistsudo su -
wird in sein,~/.bash_history
wenn Ihre Muschel bash ist.echo 1234567zz
wird in sein,/root/.bash_history
wenn Roots Shell bash ist.Eine Erklärung dazu wurde bereits von Goldlöckchen gepostet.
quelle
Möchten Sie, dass sich su anmeldet, weil Sie der Meinung sind, dass es sich um eine Sicherheitslücke handelt? Haben Sie über diesen Befehl nachgedacht?
sudo bash
genauso schlimm imho.Wenn Sie sich Sorgen machen, was die Benutzer mit sudo machen können, müssen Sie die Verwendung einschränken. Sie können die Befehle einschränken, die sie auch ausführen können. Beschränken Sie den Zugriff auf / bin / su, wenn Sie sich Sorgen machen.
quelle
Was ist damit:
oder
oder langer Einzeiler:
sudo -E erhält die Umgebung aufrecht PROMPT_COMMAND wird vor jeder Eingabeaufforderung ausgeführt
quelle
Wenn dies hilft, können Sie die "NOEXEC" -Option von Sudoern verwenden.
Sie müssen es als definieren
Dadurch werden Shell-Escapes verhindert und der Benutzer kann sudo -i oder sudo -s oder sudo su - nicht verwenden.
Dies hat jedoch den Nachteil, dass die Shell-Escape-Funktion deaktiviert wird. Auch das Ausführen von Skripten aus einem Skript heraus wird verweigert.
quelle
Machen wir das nicht kompliziert: Immer wenn
sudo
es aufgerufen wird, meldet es dies in einer Datei/var/log
(auf Ihrem System ist esauth.log
, auf meiner OS X-Boxsystem.log
).sudo
meldet seine Kommandozeilenargumente, hat aber keine Ahnung, was in einem interaktiven Befehl wie passieren könntesu
.Dies bedeutet nicht, dass es keine Aufzeichnung darüber gibt, was in einer Root-Subshell passiert: Shell-Befehle werden im Verlauf der Shell gespeichert. Auf meinem System ist die Speicherung des Root-Verlaufs standardmäßig aktiviert. Ich muss also nur nach
~root/.sh_history
einer Aufzeichnung suchen, was getan wurde (es sei denn, jemand hat daran manipuliert, aber er könnte genauso gut daran manipulieren/var/log
).Ich denke, das ist die beste Lösung für Sie. Wenn nicht, fahren Sie mit in die Stadt
auditd
, wie @Jenny vorgeschlagen hat.PS. Wenn der Verlauf von root noch nicht aktiviert ist, hängt die Aktivierung davon ab, welche Shell verwendet wird. Für
bash
, setzeHISTORY
undHISTFILESIZE
auf eine ausreichend große Zahl (Standard ist 500, mein Handbuch sagt). Wenn Sie möchten, können Sie angeben, wo der Verlauf gespeichert werden soll, indem SieHISTFILE
einen Pfad festlegen (Standard$HOME/.sh_history
).quelle
Möglicherweise möchten Sie ein Typoskript Ihrer Sitzung erstellen, indem Sie Folgendes verwenden
script(1)
:Jetzt können Sie
grep
(beachten Sie, dass die#
Eingabeaufforderungen tatsächlich in aufgezeichnet sind/tmp/my_typescript
):Alternativ können Sie die ganze Sitzung auch noch einmal ansehen mit
scriptreplay(1)
:Die Datei
/tmp/my_typescript.timing
enthält Informationen, wenn jeder Befehl aufgerufen wurde. Es gibt weitere Tools wiettyrec
odershelr
, die noch mehr Schnickschnack haben.quelle