Vous partagez un utilisateur sur une machine avec des collègues (typiquement sur un serveur), et en tant que bon administrateur, vous avez besoin de savoir qui fait quoi et qui blâmer pour avoir modifié un fichier de conf ou stoppé un service.
C'est impossible de base de savoir ça. Vous n'avez à votre disposition que la commande history
, qui est très limitée, car vous ne savez pas qui à fait quoi ni à quelle heure.
Pourtant, si vous utilisez des clés SSH pour que vos utilisateurs se connectent (ce que vous devriez, comme ça ils n'ont pas à connaître le mot de passe), il y a moyen de les tracer.
Pour cela, vous devez vous servir des variables d'environnement SSH. Vous obtiendrez de jolis logs comme ça :
Aug 1 10:50:33 myserver shareduser(john.doe)[/home/shareduser/myappli][25577]: cd myappli/master
Aug 1 10:50:34 myserver shareduser(john.doe)[/home/shareduser/myappli/master][25615]: ls
Aug 1 10:50:36 myserver shareduser(john.doe)[/home/shareduser/myappli/master/www][25648]: cd www
Aug 1 10:50:36 myserver shareduser(john.doe)[/home/shareduser/myappli/master/www][25686]: ls
Aug 1 12:00:03 myserver shareduser(damien.gustave)[/home/shareduser][42189]: cat .ssh/authorized_keys
Aug 1 12:05:31 myserver shareduser(damien.gustave)[/home/shareduser][47745]: grep REAL .ssh/authorized_keys
Aug 1 12:10:57 myserver shareduser(damien.gustave)[/home/shareduser][3925]: vi /etc/profile
Aug 1 12:11:04 myserver shareduser(damien.gustave)[/home/shareduser][4110]: echo $REALUSER
Sympa, hein ? Allez, on mets ça en place :
Editer le fichier /etc/profile
Ajouter à la fin la ligne :
readonly PROMPT_COMMAND='history -a >(logger -i -p local5.info -t "$USER($REALUSER)[$PWD]"); history -w;'
On aura donc dans les logs ce format :
DATE - SERVEUR - UTILISATEUR - (UTILISATEUR_REEL) - [WORKING_DIRECTORY] - [PID]: - COMMANDE
Ce format peut être personalisé en tweakant la commande logger ci-dessus pour entrer les infos que vous souhaitez.
Editer /etc/ssh/sshd_config
Ajouter PermitUserEnvironment yes
au fichier de configuration afin d'autoriser les variable d'environnement, puis redémarrer le service :
sudo service ssh restart
Editer /home/user/.ssh/authorized_keys
Les clés SSH autorisés devraient se trouver là.
Préfixer chaque ligne avec la valeur voulue pour la variable d'environnement :
environment="REALUSER=damien.gustave" ssh-rsa AAAAB3[...]
Créer le fichier /etc/rsyslog.d/shell.conf
Avec pour contenu :
local5.* /var/log/shell.log
Editer /etc/rsyslog.conf
Trouver la ligne :
*.*;auth,authpriv.none -/var/log/syslog`
La remplacer par :
*.*;auth,authpriv.none,local5.none -/var/log/syslog`
Puis redémarrer rsyslog :
service rsyslog restart
Créer /etc/logrotate.d/shell
Afin d'avoir de beau logs qui tournent tous les jours :
/var/log/shell.log {
rotate 30
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
create 644 root adm
}
Et voilà, vous êtes maintenant Big Brother.