Question :Comment rediriger l'historique des commandes shell vers Syslog ?
Il existe plusieurs méthodes pour le faire. Vous pouvez essayer l'une des 3 méthodes ci-dessous :
Méthode 1 - via le service rsyslog
Pour utiliser rsyslog pour enregistrer chaque commande shell, suivez simplement les étapes ci-dessous :
1. Créez un nouveau fichier de configuration rsyslog et définissez le chemin du fichier journal. Par exemple :/var/log/commands.log .
# vi /etc/rsyslog.d/bash.conf local6.* /var/log/commands.log
2. Modifiez le ~/bashrc de l'utilisateur . Remarque :vous devez modifier le ~/bashrc de chaque utilisateur qui a besoin de ces journaux.
# 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]"'
Par exemple :
[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. Redémarrez le service rsyslog
# systemctl restart rsyslog
Terminé. Voir l'exemple de format de journal ci-dessous :
[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 ~]#
Méthode 2 - via l'option shell bash
1. Ajoutez ‘shopt -s syslog_history ' dans le fichier de démarrage /etc/profile à l'échelle du système ou dans le fichier d'initialisation personnel ~/.bash_profile. Par exemple :
[root@hostname ~]# cat /etc/profile | grep shopt shopt -s syslog_history
2. Déconnectez-vous et reconnectez-vous pour appliquer cette option.
3. Exemple de journal :
[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
Méthode 3 - via la commande de script
De plus, si vous ne souhaitez enregistrer qu'une seule session de terminal, essayez simplement la commande "script" comme ci-dessous, elle est également facile à utiliser et très utile.
1. Pour commencer la journalisation, exécutez simplement :
# script /tmp/screen.log
2. Vous pouvez maintenant lancer vos commandes bash. Une fois terminé, vous pouvez quitter :
# exit
Il enregistrera alors toute la session dans un fichier /tmp/screen.log
3. Vérifiez les sorties :
# cat /tmp/screen.log
Par exemple :
[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 ~]#