Otázka :Jak přesměrovat historii příkazů shellu na Syslog?
Existuje několik metod, jak to udělat. Můžete zkusit kteroukoli ze 3 níže uvedených metod:
Metoda 1 – prostřednictvím služby rsyslog
Chcete-li použít rsyslog pro protokolování každého příkazu shellu, postupujte podle následujících kroků:
1. Vytvořte nový konfigurační soubor rsyslog a definujte cestu k souboru protokolu. Například:/var/log/commands.log .
# vi /etc/rsyslog.d/bash.conf local6.* /var/log/commands.log
2. Upravte ~/bashrc uživatele . Poznámka:Musíte upravit ~/bashrc každého uživatele, kdo takové protokoly potřebuje.
# vi ~/.bashrc whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')" export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Například:
[root@hostname ~]# cat ~/.bashrc | tail -n2 whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')" export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' [root@hostname ~]#
3. Restartujte službu rsyslog
# systemctl restart rsyslog
Vše hotovo. Viz příklad formátu protokolu níže:
[root@hostname ~]# date Thu Apr 9 00:26:11 EDT 2020 [root@hostname ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo)
[root@hostname ~]# tail -2 /var/log/commands.log Apr 9 00:26:11 hostname root: [email protected] [1643]: date [0] Apr 9 00:26:18 hostname root: [email protected] [1643]: cat /etc/redhat-release [0] [root@hostname ~]#
Metoda 2 – prostřednictvím možnosti bash shell
1. Přidejte „shopt -s syslog_history do celého systému /etc/profile nebo osobního inicializačního souboru ~/.bash_profile. Například:
[root@hostname ~]# cat /etc/profile | grep shopt shopt -s syslog_history
2. Odhlaste se a znovu se přihlaste, abyste tuto možnost viděli.
3. Příklad protokolu:
[root@hostname ~]# pwd /root [root@hostname ~]# date Thu Apr 9 01:26:46 EDT 2020
[root@hostname ~]# tail -2 /var/log/messages Apr 9 01:26:46 hostname -bash: HISTORY: PID=1345 UID=0 date Apr 9 01:26:52 hostname -bash: HISTORY: PID=1345 UID=0 tail -2 /var/log/messages
[bob@hostname ~]$ tail -f /var/log/messages Apr 9 01:26:45 hostname -bash: HISTORY: PID=1345 UID=0 pwd Apr 9 01:26:46 hostname -bash: HISTORY: PID=1345 UID=0 date Apr 9 01:26:52 hostname -bash: HISTORY: PID=1345 UID=0 tail -2 /var/log/messages
Metoda 3 – pomocí příkazu skriptu
Kromě toho, pokud chcete zaznamenat pouze jednu relaci terminálu, vyzkoušejte příkaz „script“, jak je uvedeno níže, je také snadno použitelný a velmi užitečný.
1. Chcete-li zahájit protokolování, stačí spustit:
# script /tmp/screen.log
2. Nyní můžete spustit příkazy bash. Po dokončení můžete opustit:
# exit
Poté uloží celou relaci do souboru /tmp/screen.log
3. Ověřte výstupy:
# cat /tmp/screen.log
Například:
[root@hostname ~]# script /tmp/screen.log Script started, file is /tmp/screen.log [root@hostname ~]# date Thu Apr 9 00:28:26 EDT 2020 [root@hostname ~]# whoami root [root@hostname ~]# exit exit Script done, file is /tmp/screen.log
[root@hostname ~]# cat /tmp/screen.log Script started on Thu 09 Apr 2020 12:28:23 AM EDT [root@hostname ~]# date Thu Apr 9 00:28:26 EDT 2020 [root@hostname ~]# whoami root [root@hostname ~]# exit exit Script done on Thu 09 Apr 2020 12:28:42 AM EDT [root@hostname ~]#