Niveau :      
Résumé : PROMPT_COMMAND=

Aujourd'hui vous avez découvert un problème sur une machine.
- "Mais que s'est-il passé ?"
- "Mais qui a fait ça ?"
- "Mais il faudrait stocker les dates dans les historiques !"

Ok, faisons comme ça ...

Première méthode, simple, exécutons une commande à chaque ligne exécutée qui va nous stocker cette information dans un nouvel historique. Notez qu'on ne peut pas mettre cette information dans .bash_history, ca mettrait le bazar.

$ export PROMPT_COMMAND='echo `date +"%F %T"` `history 1`>> ~/.bash_timestamp'

C'est bien, mais on peut faire beaucoup mieux : pas de sous-processus (vive les perfs), pas de duplication de ligne lorsqu'on tape une ligne vide, pas de No de séquence

$ H2=0
$ export PROMPT_COMMAND='H=`history 1` ; H1=${H:0:6} ; [ $H1 -eq $H2 ] || echo `date +"%F %T"` "${H:6}" >> ~/.bash_timestamp ; H2=$H1'

C'est bien, maintenant nous voudrions avoir l'historique de tous les utilisateurs. Mettons tout ça dans /etc/bash.bashrc, donc pour tout le monde, avec quelques adaptations :

$ H2=0
$ export PROMPT_COMMAND='H=`history 1` ; H1=${H:0:6} ; [ $H1 -eq $H2 ] || echo `date +"%F %T"` "$USER" "${H:6}" >> /var/log/bash_logs ; H2=$H1'

Pour que ça marche, il nous faut un fichier inscriptible par tout le monde.

$ touch /var/log/bash_logs
$ chmod 662 /var/log/bash_logs

Et nous allons nous préserver de la mauvaise foi des utilisateurs qui voudraient modifier ces logs a posteriori.

# en root
$ chattr +a /var/log/bash_logs

Notez qu'on ne se préserve que de leur mauvaise foi mais qu'il est impossible de se préserver de la malveillance, car il suffit de redéfinir son PROMPT_COMMAND (ou d'utiliser autre chose que bash ...) pour que rien ne soit loggué.