Skip to content

Bash History loggen mit rsyslog

Da mehrere Administratoren das System verwalten, loggen wir alle in der Bash eingegebenen Befehle in einer Datei, um Änderungen am System nachvollziehen zu können. Die Variable $ORIGINAL_USER wird wie weiter unten beschrieben in der Datei /etc/ssh/sshrc definiert.

Zuerst erstelln wir uns eine Datei /etc/profile.d/history.sh in welcher wir eine Read-Only Variable PROMPT_COMMAND definieren, welches den letzten History Eintrag zur Logging Facility local5.info sendet.

# File: /etc/profile.d/history.sh

if [ -n "$ORIGINAL_USER" ]; then
        readonly export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo "USER:" $USER "("$ORIGINAL_USER")" \
                "COMMAND:" "$(history 1 | cut -c8-)" | /usr/bin/logger -plocal5.info'
else
        readonly export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo "USER:" $USER \
                "COMMAND:" "$(history 1 | cut -c8-)" | /usr/bin/logger -plocal5.info'
fi

# vim: syntax=bash ts=4 sw=4 sts=4 sr noet

Nun erstellen wir eine Datei /etc/rsyslog.d/history.conf und konfigurieren syslog damit alle info Logs aus Facility local5 in die Datei /var/log/bash/history.log geschrieben werden.

# Bash history logging
# File: /etc/rsyslog.d/history.conf

local5.info     /var/log/bash/history.log
& stop

Damit die Datei /var/log/bash/history.log nicht endlos groß wird, erstellen wir für logrotate ein Eintrag. Dazu erstellen wir die Datei /etc/logrotate.d/history mit folgendem Inhalt.

root:~# vi /etc/logrotate.d/history
# File: /etc/logrotate.d/history

/var/log/bash/history.log {
  rotate 8
  daily
  compress
  missingok
  notifempty
  delaycompress
  create 640 root adm
}

Nun erstellen wir noch das Logverzeichnis /var/log/bash und starten den rsyslog neu, damit die Änderungen übernommen werden.

root:~# mkdir -p /var/log/bash && systemctl restart rsyslog