Bash: journaliser l'historique de commandes dans syslog : Différence entre versions
(i) |
(Aucune différence)
|
Version du 29 janvier 2018 à 12:25
Activation de la fonction de log avec bash 4.1+
A partir de la version 4.1, on peut demander la journalisation dans syslog de l'hisstorique bash à la compilation. Il suffit de compiler avec l'option SYSLOG_HISTORY positionnée dans config-top.h. Voir Rpmbuild avec modifications (ajout de patch).
- Avantage: plus fiable que le trap DEBUG ci-dessous (mais implique de désactiver tout autre shell pour être complète)
- Inconvénients: implique de refaire le patch+compilation à chaque mise à jour du package bash.
Méthode via trap DEBUG
Le trap DEBUG de bash associé à la variable BASH_COMMAND permet de journaliser toute commande exécutée dans syslog.
- ajouter le fichier logcmd.sh dans /etc/profile.d, (permissions 644 = rwxr--r--), et le contenu
function cmd2syslog
{
unset PROMPT_COMMAND
if [ -n "`fc -ln -0 2>/dev/null`" ] && [ -n "$BASH_COMMAND" ]; then
__cmd2syslog "$BASH_COMMAND"
fi
}
function __cmd2syslog
{
cmdline=$1
cmdexec=`echo $cmdline | awk '{print $1}'`
echo $cmdexec | grep -q "^/"
if [ $? -ne 0 ]; then
unalias which 2>/dev/null
fullexec=`which $cmdexec 2>/dev/null | awk '{print $1}'`
else
fullexec=$cmdexec
fi
warntxt=""
if [ -n "$fullexec" ]; then
cmdown=`ls -l $fullexec | awk '{print $3}'`
[ "$cmdown" = "root" ] || warntxt=" WARNING suspect command? $fullexec"
fi
remssh=""
if [ -n "$SSH_CLIENT" ] && [ -n "$BASH_EXECUTION_STRING" ]; then
remssh=" (non-interactive SSH from $SSH_CLIENT)"
fi
logger -d -p local6.debug -t bash "${USER}[$$]${warntxt}${remssh}: $cmdline"
}
if [ -n "$PS1" ]; then
trap cmd2syslog DEBUG
fi
- ce script sera lu par /etc/bashrc et pris en compte automatiquement au lancement d'un shell bash interactif (test sur PS1).
- ici, on utilise local6.debug pour logger, il faut ajouter une règle dans rsyslog.conf (ou équivalent) pour journaliser dans un fichier, par exemple dans log secure:
local6.* /var/log/secure
- Avantage: facile à mettre en oeuvre sans recompiler bash.
- Inconvénients:
- méthode très facile à contourner (il suffit de détourner ou annuler le trap DEBUG).
- peut générer un peu de déchet avec set -x sur un shell interactif.
- spécifique à bash.