
Ich führe ein Programm mit langer Laufzeit auf einem Linux-Server aus. Viele andere Benutzer führen ihre Programme ebenfalls auf diesem Server aus. Wir alle haben Sudo-Berechtigungen.
Angenommen, ein böswilliger Benutzer beendet mein laufendes Programm, beispielsweise mit sudo kill
oder sudo pkill
. Wie finde ich heraus, welcher Benutzer das ist?
Antwort1
Obwohl Pauls Antwort richtig ist, dass Beweise beseitigt werden könnten, bedeutet das nicht, dass die Beweise beseitigt sind. Es wissen viel mehr Leute über sudo Bescheid als Leute, die wissen, welche Protokolle gelöscht werden müssen (wenn sie sich überhaupt die Mühe machen würden).
Auf meinem System wird jedes Mal, wenn sudo verwendet wird, die gesamte Befehlszeile in einem Protokoll gespeichert. Ich kann mir vorstellen, dass Ihr System das auch tut. Unter OpenBSD ist dies /var/log/authlog, während es auf einem Debian-System /var/log/auth.log ist.
Wenn Sie nicht wissen, in welcher Datei diese Informationen gespeichert sind, versuchen Sie, einen sudo-Befehl auszuführen. (Es spielt keine Rolle, was Sie mit sudo tun: sogar echo
würde ausreichen. Der Zweck besteht darin, die Protokolle zu ändern, die geändert werden, wenn sudo verwendet wird.) Verwenden Sie dann
ls -ltr /var/log/*auth*
oder
ls -ltr /var/log | tail
um kürzlich geänderte Dateien zu finden.
Antwort2
Wenn Sie alle über verfügen sudo
, gibt es keine garantierte Möglichkeit, Beweise für einen beendeten Prozess aufzubewahren, da alle Beweise mit der gleichen Berechtigungsstufe entfernt werden könnten.
Du kannst den ... benutzenauditd
Überwachungs-Daemonum bestimmte Systemaufrufe wie Kill zu verfolgen.
Natürlich könnte ein Root-Benutzer zuerst den Audit-Daemon stoppen und dann die Protokolle löschen. Sie möchten die Protokolle also extern exportieren.
Ein besserer Ansatz wäre, sudo besser zu verwalten und jedem Benutzer nur den Zugriff zu gewähren, den er benötigt. Normale Benutzer benötigen fast nie vollen Root-Zugriff und Sie können sudo verwenden, um eine Teilmenge der Berechtigungen zu erteilen.