In einer modernen IT-Landschaft, wo Effizienz und Sicherheit entscheidend sind, spielt nicht zuletzt die korrekte Konfiguration der Bash History eines jeden Linux Servers eine wichtige Rolle.
Dies ist vor allem deshalb relevant, um jederzeit bestimmen zu können, welcher Benutzer welche Befehle ausführt und in welcher Reihenfolge er dies getan hat. Dies gilt auch wenn der User gleichzeitig über mehrere SSH-Sitzungen auf die gleichen Systeme zugreift oder sogenannte Service-User eingesetzt werden. Rocky Linux 9, als robustes und sicheres Betriebssystem, bietet wie auch die bezahlte Variante Red Hat Enterprise Linux 9, eine solide Basis für Ihre Applikationsservers. In der Standardkonfiguration der beiden Systeme ist die Bash History jedoch limitiert und speichert nur die letzten 1000 Befehle. Auch werden standardmässig die bereits ausgeführten Befehle erst beim Beenden der User-Session in die User-History geschrieben und nicht direkt nach jedem absetzen eines neuen Befehls. Dies bietet kein live-logging und ist zudem problematisch bei der gleichzeitigen Verwendung von mehreren Sessions, da so nur die Befehle der ersten SSH-Session protokolliert werden können.
In diesem kleinen Blog-Beitrag erläutern wir, wie diese Problematik einfach überwunden werden kann und somit eine umfassende Nachverfolgbarkeit sicherstellt wird, die für effektive Sicherheitsüberwachung und Compliance unerlässlich ist.
Um eine einfache und möglichst schlanke Konfiguration der Bash History zu ermöglichen, schauen wir uns einmal das Verzeichnis /etc/profile.d/
genauer an.
Warum /etc/profile.d/ ?
Dieses spezielle Verzeichnis erlaubt uns, benutzerdefinierte Skripte bei jedem Start einer neuen Bash- oder Login-Shell für alle Benutzer auszuführen und wie in unserem Fall Umgebungsvariablen zu definieren. Die Nutzung von /etc/profile.d/
im Gegensatz zu einer .bashrc
bietet einen systemweiten Ansatz, der sicherstellt, dass unsere Konfigurationen konsistent auf das gesamte System angewendet werden, ohne dass individuelle Benutzerprofile manuell angepasst werden müssen.
Die Konfiguration
Diese Konfiguration ist schnell und einfach durchgeführt. Die grösste Herausforderung besteht beim Definieren der korrekten Umgebungsvariablen, welche wir hier bereits für euch vorgenommen haben. Im Verzeichnis /etc/profile.d/
, wird zum Beispiel mit dem Editor vim, eine neue Datei wie folgt angelegt# vim /etc/profile.d/bash_history.sh
Der Name der Datei kann dabei frei gewählt werden, das einzig wichtige ist, dass sie mit .sh
endet und ausführbar ist. Wir gehen in den insert-modus ‹i‹ fügen folgenden Inhalt hinzu. Wir speichern anschliessend mit ‹ESC‹ – :wq
– ENTER:
export HISTSIZE=-1
export HISTFILESIZE=-1
export HISTTIMEFORMAT="[%F %T] "
export HISTCONTROL=ignoredups
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Damit das file wie vorgesehen, beim nächsten shell-logon korrekt ausgeführt wird, muss dies noch ausführbar gemacht werden. Dies erreichen wir mit dem command: # chmod +x /etc/profile.d/bash_history.sh
Unsere Anpassungen bewirken folgendes:
- Unlimitierte History (
HISTSIZE
undHISTFILESIZE
auf-1
): Im Gegensatz zur Standardbegrenzung von 1000 Commands, ermöglicht-1
die Speicherung einer unbegrenzten Anzahl von Commands in der History. Alte Einträge <1000 werden somit nicht mehr automatisch gelöscht und bleiben erhalten. - Zeitstempel (
HISTTIMEFORMAT
): Jeder Befehl in der History erhält zusätzlich zur Nummerierung auch einen Zeitstempel. Dies ist besonders wichtig, um zu verstehen, welcher Mitarbeiter welche Befehle in welcher Reihenfolge ausgeführt hat, selbst bei mehreren gleichzeitigen Sessions. - Duplikate vermeiden (
HISTCONTROL=ignoredups
): Diese Einstellung verhindert, dass wiederholte Befehle unmittelbar hintereinander in die History aufgenommen werden, was die Übersichtlichkeit massiv erhöht. - Sofortiges History Append (
PROMPT_COMMAND
): Durch das setzen vonhistory -a
(append) und der Variable$PROMPT_COMMAND
, welche den effektiven Befehl des Benutzers beinhaltet, wird bei jedem neuen Befehl (Prompt Command) auch gleich das History Append ausgeführt. So wird sichergestellt, dass selbst bei einer Unterbrechung einer der SSH-Sitzung(en) keine Daten verloren gehen. Dies ist ebenfalls für die Integration in Sicherheitsüberwachungssysteme von entscheidender Bedeutung.
Bedeutung für SIEM-Systeme
Die sofortige Protokollierung der von Benutzern oder Administratoren abgesetzten Befehle spielt auch eine zentrale Rolle bei einer Echtzeit-Sicherheitsüberwachung, insbesondere beim Einsatz eines SIEM-Systems oder Log-Managements mit Elasticsearch. Erst durch das sofortige Weiterleiten aller getippten Befehle an das SIEM wird eine Echtzeit-Überwachung und -Analyse ermöglicht, was für die Erkennung von Sicherheitsvorfällen auf UNIX-Systemen unerlässlich ist. Die hier vorgestellte Konfiguration erleichtert forensische Aufgaben enorm, indem sie jederzeit sicherstellt, dass jedes Kommando, von jedem User sofort und mit einem genauen Zeitstempel versehen, für ein forewarding mit Filebeat (Agent von Elastic) und eine spätere Analyse zur Verfügung steht.
Fazit
Durch das Umsetzen dieser einfachen Bash History-Konfiguration können IT-Fachkräfte mit wenig Aufwand ein höheres Mass an Sicherheit und Compliance gewährleisten. In Kombination mit einer leistungsstarken SIEM-Lösung wie Elasticsearch bietet diese Konfiguration eine robuste Grundlage für die Überwachung und Analyse von Befehlsausführungen in Echtzeit, was in der heutigen schnelllebigen IT-Infrastruktur unerlässlich ist.