Sous Linux la connexion est gérée par le système d’authentification PAM (Pluggable Authentication Modules). Comme son nom l'indique tout se passe dans différents modules qui permettent d'ajouter des fonctions comme différents systèmes pour l’authentification (LDAP, NSS) ou alors des fonction à exécuter lors de la connexion (montage de répertoires).

pam_exec

Le module pam_exec permet d'exécuter une commande arbitraire lors de la connexion. Il est donc de faire tout ce que l'on veut.

Pour l'activer il suffit d'ajouter la ligne suivante dans votre fichier /etc/pam.d/common-session:

[...]
session    optional     pam_exec.so    commande
[...]

Remplacer commande par la commande à exécuter.

Plusieurs variables d'environnements sont spécialement définies:

  • $PAM_TYPE
  • $PAM_USER
  • $PAM_RUSER
  • $PAM_RHOST
  • $PAM_SERVICE
  • $PAM_TTY

Notification de connexion par email

Une des fonction classiques de ce module est d'avoir une notification par email lors d'une connexion. Pour cela il suffit de créer un script /usr/local/bin/send-mail-on-login.sh> qui : - ne prendra en compte que les ouvertures de nouvelles connexions - limitera à un nombre limité d'utilisateur (admin et root ici) - Envoi les information par mail à l'administrateur

#!/bin/sh
if ([ "$PAM_TYPE" != "open_session" ] ||
    ([ "$PAM_USER" != "root" ] &&
     [ "$PAM_USER" != "admin" ]))
then
    exit 0
else
    {
        echo "User: $PAM_USER"
        echo "Remote Host: $PAM_RHOST"
        echo "Service: $PAM_SERVICE"
        echo "TTY: $PAM_TTY"
        echo "Date: `date`"
        echo "Server: `uname -a`"
    } | mail -s "$PAM_SERVICE login on `hostname -s` for account $PAM_USER" root
fi
exit 0

Ne pas oublier de le rendre executable à l'aide de la commande suivante:

# chmod + x /usr/local/bin/send-mail-on-login.sh

et de modifier le fichier /etc/pam.d/common-session en accord:

[...]
session    optional     pam_exec.so    /usr/local/bin/send-mail-on-login.sh
[...]

Maintenant à chaque connexion de root ou admin, un email sera envoyer à l'administrateur. Par exemple pour une connexion d'admin en ssh :

User: admin
Remote Host: dslb-000-000-000-000.pools.arcor-ip.net
Service: sshd
TTY: ssh
Date: mercredi 22 juin 2011, 22:46:38 (UTC+0200)
Server: Linux test 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 x86_64 GNU/Linux