Wie können Sie jeden eingegebenen Befehl protokollieren?

24

Wie können Sie jeden Befehl protokollieren, den jemand in die Shell eingegeben hat?

Ich frage Sie, ob Sie auf dem Server eines anderen angemeldet sind und etwas kaputt geht oder ob jemand anderes (absichtlich oder böswillig) auf Ihrem Server angemeldet ist.

Sogar ein Anfänger kann Bypass Geschichte mit unset historyoder eine neue Shell erstellen , um ihre Spuren zu verbergen.

Ich bin gespannt, wie die älteren Linux-Administratoren verfolgen, welche Befehle eingegeben wurden bzw. welche Änderungen am System vorgenommen wurden.

Spuder
quelle

Antworten:

29

Schauen Sie sich auditd . Wenn Sie hinzufügen

-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve

zu /etc/audit/audit.rulesjedem ausgeführten befehl werden protokolliert. Siehe: http://whmcr.com/2011/10/14/auditd-logging-all-commands/

Dann senden Sie es an einen Syslog-Server.

Stein
quelle
Sicher execveist dies nicht der einzige Systemanruf, den Sie protokollieren müssen. Warum nicht execvpauch? Oder execl? usw.
2.
Eigentlich ist mir aufgefallen, dass in der Manpage execdazu steht: "Die exec() Funktionsfamilie ersetzt das aktuelle Prozessabbild durch ein neues Prozessabbild. Die in dieser Handbuchseite beschriebenen Funktionen sind Frontends für execve(2)." Obwohl ich mir nicht sicher execveatbin, kann ich mich in Bezug auf die execFamilie sicher fühlen .
2.
5

Sie können den Skriptbefehl verwenden . Dieser Befehl ist in POSIX nicht enthalten, aber Sie werden es nützlich finden, alle Tastenanschläge sowie Ausgabe- und Fehlermeldungen in einer Datei zu speichern. Sie können die Datei später anzeigen. Wenn Sie wichtige Arbeiten ausführen und ein Protokoll aller Ihrer Aktivitäten führen möchten, sollten Sie diesen Befehl sofort nach dem Anmelden aufrufen:

$ script
Skript gestartet, Datei ist Typenskript
$ _ Beachten Sie, dass dies eine andere Shell ist - Kind der Login-Shell

Die Eingabeaufforderung kehrt zurück und alle Ihre Tastatureingaben (einschließlich derjenigen, die für die Rücktaste verwendet wurde), die Sie jetzt hier eingeben, werden in der Datei 'typescript' aufgezeichnet. Nachdem Ihre Aufnahme beendet ist, können Sie die Sitzung beenden, indem Sie exit eingeben .
Hinweis: Wenn Sie den Dateinamen des Skripts eingeben , wird die Sitzung in der Datei Dateiname statt in Typenskript gespeichert. Das heißt, Typenskript ist die Standardeinstellung, wenn kein bestimmter Dateiname angegeben ist.

Sie können jetzt den Katzendateinamen oder das Katzentypenskript verwenden, um die aufgezeichnete Sitzung anzuzeigen.

Wenn Sie eine neue Sitzung an eine alte Datei anhängen möchten, verwenden Sie: script -a Hängt die neue Sitzung an typescript an, gilt dieselbe Standardregel auch hier

Auf diese Weise kann ein Systemadministrator die Sitzungen verfolgen. Hoffe, es war informativ und nützlich. Prost!

Kennzeichen
quelle