Shell : Historiser (logguer) toutes les commandes shell

Voici une astuce permettant d’historiser toutes les commandes tapées dans un shell.

Cet méthode est inspiré d’un article que j’ai vu sur Linux Attitude, j’ai juste rajouté le fait de rediriger ces logs dans un fichier à part avec la mise en place d’un logrotate.

Ajouter dans /etc/profile :

# envoyer la commande dans syslog pour chaque commande AVANT exécution
trap 'logger -i -p local5.info -t bash "$USER $(tty): $(fc -ln -1)"' DEBUG
OU
# envoyer la commande dans syslog pour chaque commande APRES exécution
PROMPT_COMMAND='logger -i -p local5.info -t bash "$USER $(tty): $(history 1)"'
# fc ne marche pas correctement dans PROMPT_COMMAND

Rediriger les logs dans un fichier à part, pour cela créer le fichier :

vi /etc/rsyslog.d/shell.conf

Et ajouter :

local5.*                                     -/var/log/shell.log

Le tiret (-) devant le fichier de log permet une écriture asynchrone (pas forcément nécessaire, car ça ne risque pas d’impacter les perf, mais bon…)

Créer un fichier logrotate

/etc/logrotate.d/shell
/var/log/shell.log {
rotate 30
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
create 640 root adm
}

Une fois que tout est prêt, il suffit de relancer rsyslog :

/etc/init.d/rsyslog restart

L'article Shell : Historiser (logguer) toutes les commandes shell est apparu en premier sur L'admin sous GNU / Linux - Blog Libre.

Vus : 3313
Publié par Admin-Linux : 176