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