So protokollieren Sie jeden Linux-Befehl auf einem Protokollserver

13

Ich möchte, dass jeder einzelne eingegebene Befehl an einen Protokollserver gesendet wird. Bereits konfiguriert ist das Syslog-ng, um alle Logs an den Logserver zu senden.

Ich interessiere mich für alle Methoden, um dies zu tun. Ich würde eine Diskussion über betrügerische Benutzer und die Sicherheit erwarten, aber das erste primäre Ziel ist es, die Sitzungen einfach zum Protokollieren zu bringen. Alle Sitzungen laufen über ssh, aber Konsolenverbindungsbefehle sollten ebenfalls protokolliert werden. Ich möchte, dass dies für jede Shell passiert, aber die erste ist bash. (Auch hier weiß ich, dass ein betrügerischer Benutzer seine eigene Shell erstellen könnte ...)

Löwe
quelle

Antworten:

29

So nähern Sie sich dem Problem nicht. Sobald Sie einem Benutzer Shell-Zugriff gewähren, vertrauen Sie diesem Benutzer an, alles zu tun, wofür er die erforderlichen Berechtigungen besitzt. Vergessen Sie die Befehlsprotokollierung, es gibt viel zu viele Möglichkeiten, einen Befehl in einem Unix-System auszuführen.

Zum Beispiel kann der Benutzer einen Mail-Client starten (der einzige protokollierte Befehl ist pinezum Beispiel), dort wählt er "Compose" (Verfassen), um das VI zu starten, und startet von VI aus einen beliebigen Befehl, den er ausführen möchte :!cmd. Dieser Befehl wird nirgendwo protokolliert und ist aus Sicht des Systems mit jeder von VI aufgerufenen Hilfsanwendung wie grep oder sort vergleichbar. Der einzige Befehl, der von der Shell protokolliert wurde, war pine.

Anscheinend heißt das, was Sie tatsächlich wollen, Auditing . Aktivieren Sie die Überwachungssubsystem und verwenden Sie den auditctlBefehl und den auditdDämon aus dem Audit - Paket zu kontrollieren , was protokolliert. Weitere Informationen finden Sie in der Manpage auditctl (8) .

Beachten Sie, dass die Protokollierung jeder Prozessinstanziierung möglicherweise auch nicht optimal ist. Das einfache ./configurefür ein Softwarepaket (das mit Autotools erstellt wurde) zeichnet sich beispielsweise durch die Erstellung von Tausenden von Prozessinstanzen aus. Dadurch wird das Überwachungsprotokoll mit so viel Rauschen überflutet, dass es später sehr schwierig wird, es zu analysieren.

Juliano
quelle
13

Installieren Sie das acctPaket (der Paketname variiert je nach Distribution, auch als Prozessabrechnung bezeichnet) und verwenden Sie lastcomm <username>:

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

Sie können auch nach tty oder Befehlsnamen suchen. Wie man lastcommimmer für mehr Infos.

Sam Halicke
quelle
11

Wenn Sie bereit sind, ein wenig C-Programmierung zu machen, können Sie dies tun, indem Sie eine Bibliothek schreiben, die execve umschließt, in syslog protokolliert und dann die Bibliothek mit dem tatsächlichen execve-Syscall dlopen. Setzen Sie dann in / etc / environment LD_PRELOAD auf den Pfad für die Bibliothek, die Sie erstellt haben.

Sie sollten vorsichtig sein, wenn Sie hier eine Schleife eingeben. Daher möchten Sie möglicherweise entweder nur die Execs bestimmter Binärdateien protokollieren oder andere (z. B. syslog) von der Protokollierung ausschließen.

Kennzeichen
quelle
Eigentlich ist das ganz hilfreich. Die erste Suche nach execve wrapper führt zu snoopy ( sourceforge.net/projects/snoopylogger ). Es scheint nah an dem zu sein, wonach ich gesucht habe, wenn auch ein wenig ausführlich. Nach dem Testen sehe ich, dass ich die Genehmigung des Managements benötige, um dies in eine Produktionsumgebung zu integrieren. (Eine Warnung an alle euch schändlichen Typen)
Leo
@Leo Seit Version 2.0.0 unterstützt Snoopy die Angabe eines benutzerdefinierten Protokollformats, wenn ./configure ausgeführt wird. Übermäßige Ausführlichkeit sollte daher kein Problem mehr darstellen. Offenlegung: Snoopy Betreuer hier.
Bostjan Skufca
7

Klingt für mich so, als suchst du etwas wie rootsh ( Manpage ). So zitieren Sie die Manpage:

Rootsh ist ein Wrapper für Shells, der alle wiedergegebenen Tastenanschläge und Terminalausgaben in einer Datei und / oder in Syslog protokolliert.

Trotz des Namens kann dies für jeden Benutzer verwendet werden.

Andrew M.
quelle
2

Wahrscheinlich ist es besser, wenn Benutzer sudo (oder ähnliches) verwenden, um Befehle auszuführen, die Ihnen wichtig sind, und den Benutzern auf einer bestimmten Ebene zu vertrauen. Je näher Sie der "vollständigen Kontrolle" der Dinge kommen, desto schwieriger ist es, herauszufinden, was sie tun. Ich habe mir zum Beispiel kürzlich solche Tools angesehen. Meistens erstellen sie nur Protokolle, die schwierig zu verwalten sind, wenn Sie über genügend Benutzer und Computer verfügen, damit sich so etwas lohnt. :)

Berücksichtigen Sie alle Informationen, die Sie generieren. Wie viel kümmert es dich? Wahrscheinlich sehr wenig - Sie generieren also Protokolle, die größtenteils wertlos sind. Wenn Sie die Dinge prüfen, die Ihnen wirklich am Herzen liegen, wie andere vorschlagen, werden Sie wahrscheinlich in einen besseren Endzustand versetzt.

dannysauer
quelle
1

Bash kann seit 4.1 mit Syslog-Unterstützung kompiliert werden.

Es ist nicht kinderleicht (Prozessabrechnung ist vielleicht besser dafür), aber es ist meistens eine Benutzerinteraktion. Die Lautstärke sollte überschaubarer sein und Sie können auf etwas Detaillierteres umschalten, wenn Sie den Verdacht haben, dass etwas nicht normal ist.

Dies ist jedoch sehr aufdringlich und als Benutzer würde ich eine sehr spezifische Datenschutzwarnung erwarten, bevor Sie damit beginnen.

Tobu
quelle
0

Es gibt auch sudosh ( http://sudosh.sourceforge.net ), das die Sitzungsprotokollierung durchführt. Sie haben die Möglichkeit, es als definierte Shell für einen Benutzer oder über sudo auszuführen. Außerdem werden die Timings für jede Sitzung protokolliert, sodass Sie die Sitzung erneut abspielen und ansehen können (einschließlich Sitzungen bearbeiten und so weiter).

Stock
quelle