Scripting avec pam_exec, notification de connexion

Niveau : Star Star Star Empty Empty
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:, , , ,
Vus : 1047
Publié par Peck : 100