S A S L

Simple Authentication and Security Layer.
Méthode d'authentification utilisable avec les protocoles fonctionnant en mode connecté, définie dans les RFC 2222, 2245 et 2444. Voir aussi GSSAPI.
(Définition du Jargon Français).

Contrairement à ce que le nom pourrait laisser entendre, SASL est tout sauf simple à mettre en pratique. L'objectif n'étant pas d'en devenir des spécialistes, nous l'utiliserons dans un cas de figure qui répond à la question. Schéma d'authentification

Cyrus va avoir besoin d'authentifier ses clients. Postfix probablement aussi, suivant ce que nous lui demanderons de faire.

SASL va fournir un serveur saslauthd que les applications (Cyrus et probablement Postfix) iront interroger chaque fois qu'il sera nécessaire d'authentifier un utilisateur.

saslauthd est capable d'interroger de façons très diverses différents éléments capables de lui fournir les informations requises. Ici, nous allons utiliser saslauthd de manière à ce qu'il s'appuie sur PAM, qui lui-même s'appuiera sur notre base MySQL. Vous comprenez aisément la souplesse que peut apporter ce type de fonctionnement, si nous désirons remplacer MySQL par quelque chose d'autre.

Saslauthd

Installation

Il faut installer le paquet sasl2-bin, qui fera installer les dépendances nécessaires. donc :

aptitude install sasl2-bin libsasl2-modules

Et laissons faire.

Configuration

Il y a un simple fichier à manipuler : /etc/default/saslauthd, car saslauthd n'a pas de fichier de configuration, tout est dans la ligne de commande.

Le fichier doit ressembler à ceci :

#
# Settings for saslauthd daemon
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Which authentication mechanisms should saslauthd use? (default: pam)

# Notez la somme de possibilités offertes

# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"
Dans les options, il y en a deux qui sont fondamentales ici :

  • le -r « Combine the realm with the login (with an ’@’ sign in between). e.g. login: “foo” realm: “bar” will get passed as login: “foo@bar”. ». Avec nos options, nous aurons dans notre base de données l'adresse complète de l'utilisateur en guise de nom d'utilisateur ;
  • nous allons utiliser un socket unix pour communiquer avec saslauthd. Il se trouve que les composants de Postfix impliqués seront en cage (chroot) dans /var/spool/postfix. Nous devons donc modifier le chemin d'accès par défaut à ce socket, pour que les composants de Postfix puissent y accéder, c'est le but de la partie -m /var/spool/postfix/var/run/saslauthd. Il ne faudra donc pas oublier de créer cette arborescence. Autant le faire tout de suite (même si Postfix n'est pas encore installé) :
mkdir -p /var/spool/postfix/var/run/saslauthd

Nous en avons fini avec saslauthd, nous pouvons même le démarrer :

systemctl restart saslauthd.service

et vérifier qu'il est en service comme nous le lui avons demandé :

# ps aux | grep saslauthd
root      2266  0.0  0.1   7212   980 ?        Ss   15:20   0:00 /usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n 5
root      2267  0.0  0.3   7256  1564 ?        S    15:20   0:00 /usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n 5
root      2268  0.0  0.1   7212   540 ?        S    15:20   0:00 /usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n 5
root      2269  0.0  0.0   7212   360 ?        S    15:20   0:00 /usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n 5
root      2270  0.0  0.0   7212   360 ?        S    15:20   0:00 /usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n 5

Et PAM ?

Lorsque cyrus-imapd va s'adresser à saslauthd, il faudra que pam sache qui interroger et comment le faire. Nous aurons à créer un fichier nommé imap dans /etc/pam.d. Nous le ferons lorsque nous aurons installé cyrus-imapd, qui va en placer un qu'il nous faudra modifier.