Scripting avec pam_exec, notification de connexion
Niveau :
Résumé : pam_exec
Vous souvenez-vous de PAM (Pluggable Authentication Modules) ? En plus des nombreux modules déjà présentés, on trouve pam_exec qui permet d'exécuter une commande arbitraire. A partir de là on peut faire pas mal de choses, comme par exemple une notification à chaque session ouverte par un utilisateur (connexion ssh, su, sudo, etc.).
Notification de connexion
Nous allons créer une règle utilisant le module pam_exec pour exécuter un script de notification à l'ouverture d'une nouvelle session.
Script de notification
D'après le manuel de pam_exec, les informations PAM sont passées au script à l'aide des variables d'environnement : PAM_RHOST, PAM_RUSER, PAM_SERVICE, PAM_TTY, PAM_USER et PAM_TYPE. Concevons donc un script simple qui :
- ne s'intéresse qu'au cas de l'ouverture d'une nouvelle session, soit le type PAM open_session
- récupère les informations et les envoie par mail à l'administrateur
#!/bin/sh [ "$PAM_TYPE" = "open_session" ] || exit 0 { echo "User: $PAM_USER" echo "Ruser: $PAM_RUSER" echo "Rhost: $PAM_RHOST" echo "Service: $PAM_SERVICE" echo "TTY: $PAM_TTY" echo "Date: `date`" echo "Server: `uname -a`" } |mail -s "`hostname -s` $PAM_SERVICE login: $PAM_USER" root
On peut sauver ce script sous /usr/local/bin/pam-notify-login
et n'oublions pas de le rendre exécutable :
# chmod a+x /usr/local/bin/pam-notify-login
Remarque : vous aurez besoin d'une version récente des modules PAM pour avoir la variable d'environnement PAM_TYPE envoyée par le module pam_exec. En effet celle-ci n'a été ajoutée qu'à partir de la révision 1.8. Concrètement Debian lenny ne l'a pas (libpam-modules 1.0) alors que squeeze l'a (libpam-modules 1.1).
Règle pam_exec
Après consultation de la documentation Linux-PAM, voici la règle à utiliser :
session optional pam_exec.so /usr/local/bin/pam-notify-login
Il faut maintenant l'ajouter à tous les services interactifs (donc pas cron) qui utilisent PAM : SSH, login, su, sudo, etc. Sous Debian (et certainement d'autres distrib), on peut le faire grâce au fichier /etc/pam.d/common-session
qu'incluent les services intéractifs. On ajoute donc cette règle à la fin du fichier.
Attention cependant si vous utilisez sudo sous Debian, un petit oubli fait que la règle de sudo n'inclut pas ce fichier. On doit donc rajouter la règle à la main dans /etc/pam.d/sudo
en attendant mieux.
Une fois les règles ajoutées, essayez de vous connecter en SSH, de faire un su ou un sudo : vous devriez recevoir la notification par mail.
PS : Ceci est un billet invité, s'il vous a plu, vous pouvez aller lire la prose de StalkR en version originale sur son site.
Tags:pam, planet-libre, Scripting, Sécurité, Système