Envoyer un email lorsqu'un utilisateur se connecte en ssh

Vous avez un serveur dédié, ou un raspberry pi qui traine sur votre réseau? Il peut alors être intéressant de recevoir un mail lorsque quelqu’un se connecte en ssh sur la machine. Surtout si ce quelqu’un n’est pas vous!

Attention: Cet article ne se substitue pas aux "vraies" techniques de sécurisation, comme la désactivation du login root, l’utilisation de clés ssh, ou encore le blocage des ports. Néanmoins c'est un ajout intéressant si, malgré tout, quelqu’un arrive à passer entre les mailles de votre sécurisation.

La méthode naïve consistera à ajouter un bête sendmail au bashrc de votre utilisateur. Mais cette méthode est incomplète, car le pirate peut démarrer une session ssh sans utiliser de shell, ou en utilisant un shell alternatif. Dans ces deux cas notre email ne partirait pas.

La solution pour avoir un email qui part à tout les coups est d'utiliser la technique du pam_exec depuis un compte root.

PAM est l'accronyme de Pluggable Authentication Modules, ou modules d'authentifications attachables.

On va donc créer un script dans un répertoire root (genre /etc/ssh) que l'on va rendre exécutable (chmod u+x).

#!/bin/sh

# Change these two lines:
sender="sender-address@example.com"
recepient="notify-address@example.org"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="`env`"
    echo "$message" | mailx -r "$sender" -s "$subject" "$recepient"
fi

Vous pouvez tester le script en l'exécutant dans votre session actuelle.

Enfin, on va l'ajouter a la liste des scripts à exécuter lors du login dans PAM:

Dans le fichier /etc/pam.d/sshd, on va rajouter la ligne suivante:

session optional pam_exec.so seteuid /path/to/login-notify.sh

Pour tester, j'ai mis le script en optionnal, c'est à dire que s'il plante, l'authentification fonctionnera quand même. Vous pouvez le retirer ou le laisser, mais il faut garder en tête que si le script fail pour n'importe quelle raison, plus aucun login par ssh ne sera possible. Vous pourriez bien vous retrouver bloqués hors de votre propre serveur.

Pour aller plus loin, voici une jolie explication de comment PAM fonctionne (en anglais)

Qu'avez vous pensé de cet article?