OpenLdap et Apple IOS 7 : configuration du serveur

Récemment, avec la mise à jour des périphériques mobile Apple vers iOS7, vous avez peut-être constaté la disparition des contacts enregistrés sur un serveur LDAP (notamment OpenLdap) distant.

La raison est simple, Apple a décidé de bloquer l’authentification simple sur un annuaire LDAP. Ceci pour éviter certains problèmes de sécurité. L’authentification se fait désormais grâce aux algorithmes MD5 et plus particulièrement Digest-Md5 ou Cram-Md5. Or si le serveur LDAP n’est pas configuré pour recevoir ce type d’authentification, plus rien ne fonctionne.

Ici nous nous intéresserons à la résolution du problème avec un serveur OpenLdap. Il faudra alors utiliser une bibliothèque SASL, nous utiliserons ici cyrus-sasl.

Configuration de cyrus-sasl

Après avoir installé cyrus-sasl sur votre serveur (si ce n’est pas déjà fait), il faut créer un un fichier de configuration pour le service LDAP. Sur la plupart des systèmes le service s’appelle slapd, il faut donc créer le fichier /usr/lib64/sasl2/slapd.conf sur un système 64bits ou /usr/lib/sasl2/slapd.conf sur un système 32 bits.

Voici un exemple de fichier de configuration:

log_level: 0
pwcheck_method: ldap
ldap_server: localhost
ldap_basedn: o=users
ldap_ssl: no
ldap_bind_dn: cn=xxx,o=users
ldap_bind_pw: yyy

Ici, cyrus sasl va chercher les utilisateurs dans l’arbre LDAP. On lui indique de faire sa recherche dans l’arbre « o=users » et de s’authentifier en tant que xxx avec le mot de passe yyy. A vous de modifier le fichier en fonction de la structure de votre arbre.

Vous avez peut-être trouver çà et là des documentations vous indiquant d’utiliser sasldb. Nous avons choisi de ne pas le faire pour modifier le moins possible le fonctionnement actuel. En effet, les utilisateurs étant enregistrés dans l’arbre LDAP, autant se baser sur cette information, plutôt que de multiplier les comptes pour chaque utilisateur. De plus il faut ensuite s’assurer que les applicatifs pourront créer les comptes dans sasldb.

Une fois cyrus configurer il faut maintenant reconfigurer OpenLdap.

Configuration d’OpenLdap

Avant de passer à la reconfiguration à proprement parler de OpenLdap, un petit point s’impose sur le fonctionnement de l’authentification entre OpenLdap et cyrus-sasl.

Lorsque le client souhaite s’authentifier sur l’annuaire LDAP, le serveur transfert la requête à cyrus-sasl. Si l’authentification réussi, celui-ci répond avec une chaîne du type uid=david,cn=digest-md5,cn=auth. Il faut ensuite que OpenLdap fasse le lien entre cette chaîne d’authentification et l’utilisateur dans l’arbre ldap, par exemple uid=david,o=users.

Ceci se fait grâce à la directive sasl-regexp. Dans ce cas précis il suffit d’ajouter à notre configuration OpenLdap (dans le slapd.conf par exemple) la ligne

sasl-regexp uid=(.*),cn=DIGEST-MD5,cn=auth uid=$1,o=users

Ainsi chaque utilisateur correctement identifié par cyrus-sasl sera mappé sur l’utilisateur correspondant dans l’arbre LDAP.

Pour une structure d’arbre plus complexes, on peut également faire une recherche dans l’arbre plutôt qu’un remplacement statique dans l’expression régulière:

sasl-regexp uid=(.*),cn=DIGEST-MD5,cn=auth ldap:///o=users??sub?(&(uid=$1))

Ici après authentification on va chercher dans l’arbre o=users un utilisateur dont l’uid correspond.

A partir de ce moment vous pouvez tester la connexion à l’aide de digest-md5, en utilisant Apache Directory Studio par exemple.

Cependant, toutes les requêtes faites dans l’arbre LDAP seront faites avec l’utilisateur uid=david,cn=digest-md5,cn=auth il faut donc penser à ajouter cette chaîne dans les autorisations d’accès que vous avez configurées pour l’utilisateur LDAP classique (uid=david,o=users).

Après tout cela vous pouvez redémarrer le serveur OpenLdap et vérifier que tout fonctionne sur votre appareil équipé d’IOS7.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *