Terminal-Protokollierung mag wie ein Eingriff in die Privatsphäre klingen, aber es gibt viele Gründe, warum Sie wissen möchten, welche Befehle Ihre Benutzer ausführen. Ob aus Compliance-Gründen oder einfach nur für eine gute Systemadministration, manchmal möchten Sie einfach wissen, was Ihre Benutzer tun. Wenn Sie eine Flotte von Linux-Systemen verwalten und wissen müssen, was die Leute vorhaben, denen Sie eine Shell anvertraut haben, sollten Sie vielleicht tlog
in Betracht ziehen . tlog
ist ein Terminal-E/A-Logger, der in RHEL und mehreren anderen Distributionen enthalten ist. Es protokolliert mehr als nur Tastenanschläge; Es protokolliert auch die empfangene Ausgabe. Es kann verwendet werden, um eine Sitzung buchstäblich wiederzugeben.
In diesem Artikel führe ich Sie durch einen grundlegenden tlog
Konfiguration und demonstrieren Sie etwas von der Macht, die es ausübt. Linux ist ziemlich gut darin, Aktionen zu protokollieren. Es kann beispielsweise Befehle protokollieren, die über sudo
ausgeführt wurden . Die sichere log kann Ihnen mitteilen, wer sich angemeldet hat oder wer sich nicht angemeldet hat, aber nichts standardmäßiges protokolliert zentral jede Aktion von einem nicht privilegierten Benutzer übernommen. Ja, die meisten Shells führen einen Verlauf, aber Benutzer können diesen ändern oder sogar löschen, wenn sie wissen, was sie tun. Das tlog
Das Dienstprogramm selbst ist nicht narrensicher, aber eine zusätzliche Protokollierungsschicht kann nicht schaden. Es hat jedoch seine Einschränkungen und Bedenken, die in der unten verlinkten Red Hat-Dokumentation beschrieben werden. Auch tlog
meldet sich in JSON an, damit es später analysiert oder sogar wiedergegeben werden kann.
Mein Ziel ist es, Ihnen die Leistungsfähigkeit von tlog
zu zeigen zusammen mit Cockpit. Cockpit ist, falls Sie es nicht wissen, eine Webverwaltungsschnittstelle, die in RHEL enthalten ist. Die Verwendung von Cockpit ist optional und wenn Sie tlog
verwenden möchten ohne, das ist gut so. Überspringen Sie einfach die Anleitungsschritte, die die Cockpit-Konfiguration beinhalten.
[Das könnte Ihnen auch gefallen: Logrotate unter Linux einrichten]
Tlog einrichten
Für diese Anleitung verwende ich ein frisch installiertes minimales RHEL 8.3-System. Die offizielle Red Hat Enterprise Linux 8-Dokumentation zur Terminalprotokollierung finden Sie hier. Für den Einstieg benötigen Sie lediglich ein RHEL 8-System mit einem Abonnement. Dieser Vorgang sollte auch unter CentOS 8 nahezu identisch sein. Installieren Sie tlog
und Cockpit und aktivieren Sie dann die Sitzungsaufzeichnung in sssd (dem System Security Services Daemon). Sie können tlog
verwenden auf ein paar andere Arten, aber mit diesem Ansatz können Sie tlog
verwalten über sssd, statt pro Benutzer.
Installieren Sie zuerst die erforderlichen Pakete:
[root@gangrif-tlogtest ~]# yum install -y tlog cockpit cockpit-session-recording
Sobald die Installation abgeschlossen ist, aktivieren und starten Sie Cockpit:
[root@gangrif-tlogtest ~]# systemctl enable cockpit.socket --now
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket → /usr/lib/systemd/system/cockpit.socket.
Sie können Cockpit testen, indem Sie Ihren Webbrowser auf https://your-server's-IP
. Wenn das nicht funktioniert, müssen Sie möglicherweise Cockpit in der hostbasierten oder netzwerkbasierten Firewall aktivieren. In meinem Fall war das nicht nötig.
Als nächstes fügen Sie tlog
hinzu zur SSD-Konfiguration. Der sssd-Daemon ermöglicht viele Anpassungen an Ihrem Authentifizierungsstapel, einschließlich Dingen wie Remote-Benutzerverzeichnissen. In diesem Fall verwenden Sie es für lokales tlog
Integration. Es gibt einige Möglichkeiten, dies einzurichten. Ich werde tlog
hinzufügen Sitzungsaufzeichnung für eine bestimmte Gruppe namens suspicious-users , sodass jeder dieser Gruppe hinzugefügte Benutzer protokolliert wird. Sie können einzelne Benutzer oder alle Benutzer protokollieren, wenn Sie möchten. Fügen Sie die folgende Konfiguration zu /etc/sssd/conf.d/sssd-session-recording.conf
hinzu . Stellen Sie sicher, dass diese Datei root:root gehört , und Benutzer/andere können die Datei nicht lesen oder schreiben. Sssd ist aus gutem Grund wählerisch.
[root@gangrif-tlogtest ~]# cat /etc/sssd/conf.d/sssd-session-recording.conf
[session_recording]
scope = some
groups = suspicious-users
Wenn Sie sssd nicht verwenden oder nicht verwenden können, gibt es eine Option, die tlog
manuell konfiguriert für Benutzer. Die Option ist in der zuvor erwähnten Dokumentation beschrieben.
Nachdem Sie diese Datei platziert haben, starten Sie sssd neu. Testen Sie jetzt die Konfiguration.
Benutzersitzungen protokollieren
Dieser Gangrif Benutzer, er sieht verdächtig aus. Fügen Sie ihn den verdächtigen Benutzern hinzu gruppieren Sie diesen tlog
ist für die Aufnahme konfiguriert.
[root@gangrif-tlogtest tlog]# groupmems -g suspicious-users -a gangrif
[root@gangrif-tlogtest ~]# id gangrif
uid=1000(gangrif) gid=1000(gangrif) groups=1000(gangrif),10(wheel),1001(suspicious-users)
Wenn Sie sich als gangrif anmelden , wird ein nettes Warnbanner angezeigt, das anzeigt, dass Sie beobachtet werden. Dieses Banner kann über den Hinweis geändert oder entfernt werden Direktive in /etc/tlog/tlog-rec-session.conf
. Möglicherweise müssen Sie den Benutzern mitteilen, dass sie überwacht werden. Für mich tlog
ist leistungsstärker, wenn Sie einen potenziellen Angreifer nicht darüber informieren, dass er überwacht wird. Indem Sie ihnen mitteilen, was Sie eingerichtet haben, wissen sie nur, was sie zu deaktivieren versuchen sollen.
[nlager@batou-lan ~]$ ssh [email protected]
[email protected]'s password:
Web console: https://gangrif-tlogtest.tamlab.rdu2.redhat.com:9090/ or https://10.8.109.214:9090/
Last login: Tue Dec 22 15:29:44 2020 from 10.10.116.62
ATTENTION! Your session is being recorded!
[gangrif@gangrif-tlogtest ~]$
Sehen Sie sich die Sitzung im Cockpit an
Standardmäßig tlog
Protokolle im Systemjournal. Der einfachste Weg, Ihre protokollierten Daten wieder herauszuholen, ist die Verwendung des Session-Logging des Cockpits Tafel. Es ist eigentlich ziemlich glatt und gut zusammengesetzt. Sie können eine Sitzung wiedergeben und sehen, welche Befehle eingegeben wurden, einschließlich Tippfehler, eingegebene, aber fehlgeschlagene Befehle oder Befehle, die mit Strg+C geschlossen wurden . Wenn Sie auf die Protokollansicht drücken Schaltfläche zeigt Ihnen dieser Viewer sogar zugehörige Systemprotokolle, die während der Sitzung aktualisiert wurden. Es ist wirklich ein nettes Werkzeug.
Wechseln Sie vom Systemjournal zur Dateiprotokollierung
Wenn Sie Cockpit nicht verwenden, wird das Anzeigen der Protokolle etwas komplizierter, da sich die gesuchten Daten im Systemjournal befinden. In diesem Fall fand ich es am einfachsten, einfach tlog
zu wechseln zur Aufnahme in eine Datei übergehen. Sie könnten sich auch in Syslog protokollieren, was einen ähnlichen Effekt hätte und möglicherweise einfacher zu warten wäre. Der Einfachheit halber werde ich einfach direkt in eine Datei schreiben. Ich sollte Sie warnen, dass sich tlog
bewegt loggt sich aus dem Systemjournal aus und in eine Datei unterbricht die Cockpit-Integration.
Erstellen Sie zunächst einen Ort zum Speichern der Dateien und stellen Sie sicher, dass das tlog darauf schreiben kann Benutzer. Ich habe ein Verzeichnis in /var/log
hinzugefügt genannt tlog
und setzen Sie den Besitz auf tlog:tlog .
Als nächstes in /etc/tlog/tlog-rec-session.conf
, sag tlog
wo seine Protokolle gespeichert werden. In der Datei finden Sie Zeilengruppen für verschiedene Konfigurationen. Einer trägt die Bezeichnung File Writer Parameters . Mit diesem Parameter können Sie den Pfad für die Ausgabedatei definieren. Die Konfiguration für meinen Pfad sah folgendermaßen aus:
// File writer parameters
"file": {
// The "file" writer log file path.
"path" : "/var/log/tlog/tlog.log"
},
Sagen Sie es jetzt tlog
um den Dateischreiber anstelle des Standardwertes zu verwenden, der das Journal ist. Unten in der Konfigurationsdatei finden Sie eine Zeile kurz vor dem abschließenden } die ein //"writer":"journal" enthält Einstellung. Ändern Sie diese Einstellung in Datei, so:
// The type of "log writer" to use for logging. The writer needs
// to be configured using its dedicated parameters.
"writer" : "file"
}
Wenn sich Ihr Zielbenutzer das nächste Mal anmeldet, wird die Datei /var/log/tlog/tlog.log
erstellt und Sitzungen dort protokolliert werden sollen. Sie sollten die Protokollrotation darauf einrichten, und wenn Sie einen externen Logger haben, sollten Sie diese Datei dorthin senden. Diese Daten sind nur nützlich, wenn sie verfügbar sind, wenn Sie sie benötigen. Wenn ein Angreifer es findet und löscht, nützt es Ihnen nichts.
Sehen Sie sich die Sitzung mit tlog-play an
Sobald Sie diese Protokolle in einer Datei haben, können Sie sie sich ansehen. Sie könnten journalctl
verwenden , aber da die Protokolle JSON-formatiert sind, sind sie für Menschen nicht einfach zu lesen. Als Beispiel mein rm -rf
Befehlsbeispiel von oben sieht etwa so aus:
{"ver":"2.2","host":"gangrif-tlogtest.tamlab.rdu2.redhat.com","rec":"2a5a7ca40dd6424e91f587c0e012e623-3cf2-1f1e2d","user":"gangrif","term":"xterm-256color","session":31,"id":1,"pos":0,"timing":"=185x50+31>61+136>1+105>1+135>1+193>1+218>1+202>4+161>4+111>1+167>1+181>1+93>1+196>1+1412>2+2>166+1897>1+251>1+208>1+159>1+73>1+110>1+90>1+73>1+119>1+285>1+504>1+143>1+136>1+961>1+175>1+144>1+865>4","in_txt":"","in_bin":[],"out_txt":"\u001b]0;gangrif@gangrif-tlogtest:~\u0007[gangrif@gangrif-tlogtest ~]$ rm rf\b\u001b[K\b\u001b[K-rf /\r\nrm: it is dangerous to operate recursively on '/'\r\nrm: use --no-preserve-root to override this failsafe\r\n\u001b]0;gangrif@gangrif-tlogtest:~\u0007[gangrif@gangrif-tlogtest ~]$ mwahahaha!!!! \b\u001b[K","out_bin":[]}
Die Informationen sind nicht leicht zu lesen, aber zum Glück gibt es ein Tool, das dies vereinfacht. Sie können tlog-play
verwenden mit den im Journal aufgezeichneten Sitzungen, und Sie können die Aufzeichnungs-ID angeben, um diese bestimmte Aufzeichnung auszugeben. Wenn stattdessen eine Datei analysiert wird, funktioniert die Aufzeichnungs-ID nicht. Alle Aufnahmen landen in derselben Datei, und Sie können sie nicht einfach alle abspielen, da die Sitzungs-IDs nicht identisch sind. Du musst sie aufteilen. Sie können die Sitzungs-ID identifizieren, die Sie ansehen möchten, und dann grep
diese Session-ID vor tlog-play
in eine neue Datei wird damit zufrieden sein. Vielleicht kann Syslog so konfiguriert werden, dass diese Dateien beim Schreiben automatisch geteilt werden.
[root@gangrif-tlogtest tlog]# grep 2a5a7ca40dd6424e91f587c0e012e623-3da9-1fdf38 tlog.log >> session.log
[root@gangrif-tlogtest tlog]# tlog-play -i session.log
[gangrif@gangrif-tlogtest ~]$ rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
[gangrif@gangrif-tlogtest ~]$ logout
[root@gangrif-tlogtest tlog]#
Die Sitzung wird anhand der Timing-Daten aus dem JSON-Protokoll auf dem Bildschirm wiedergegeben. Es ist ziemlich glatt. Sie können sich vorstellen, wie nützlich dies bei der Durchführung von Forensiken sein könnte, nachdem ein Ausfall oder eine Kompromittierung erkannt wurde. Sie könnten sogar tlog
verwenden für Dinge wie das Aufzeichnen einer Demo von etwas auf der Kommandozeile.
[ Holen Sie sich dieses kostenlose Buch von Red Hat und O'Reilly – Kubernetes Operators:Automating the Container Orchestration Platform. ]
Abschluss
All dieses Gerede über die Überwachung der Benutzereingaben kann einige Fragen aufwerfen. Werden zum Beispiel Passworteingaben protokolliert? Was ist mit SSH-Sitzungen, die zu einem anderen Host springen? Was ist mit X Sitzungen? Die Dokumentation listet X Sitzungen als Einschränkung auf, aber tlog
erfasst sie nicht. Die Passwortprotokollierung ist standardmäßig deaktiviert, kann aber bei Bedarf aktiviert werden.
Ob es also um Compliance geht oder nur um eine schicke Demo einer neuen Technologie aufzuzeichnen, ich hoffe, dieser Artikel hilft Ihnen dabei, die Arbeit mit tlog.
zu erledigen