Wenn mehrere Administratoren ein System verwalten, ist es vorteilhaft, die Shell History in eine Logdatei zu schreiben (zu loggen), um Änderungen am System nachvollziehen zu können. Die Variable $ORIGINAL_USER
wird wie im Artikel PermitUserEnvironment beschrieben, in der Datei /etc/ssh/sshrc
definiert.
Zuerst erstellen wir ein Skript /etc/profile.d/history.sh
mit einer eine Read-Only Variable PROMPT_COMMAND
, welches den letzten History Eintrag zur Logging Facility local5.info
sendet.
root:~# vi /etc/profile.d/history.sh
# 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
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.
root:~# vi /etc/rsyslog.d/history.conf
# Bash history logging
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
/var/log/bash/history.log {
rotate 8
daily
compress
missingok
notifempty
delaycompress
create 640 root adm
}
Damit das History Logfile geschrieben werden kann, müssen wir noch das Verzeichnis /var/log/bash
erstellen.
root:~# mkdir -p /var/log/bash
Nun starten wir den rsyslog neu, damit die Änderungen übernommen werden.
root:~# systemctl restart rsyslog