Les serveurs d’annuaire : exploiter LDAP sur Mac

Classé dans : Logiciels et solutions | 0

Tout système d’information d’entreprise se doit de définir un référentiel regroupant les informations propres aux utilisateurs, aux groupes de personnes et éventuellement aux ressources utilisées (ordinateurs, équipements, emplacements etc.), sur lequel s’appuieront d’autres services tel que le partage de fichiers ou la messagerie. C’est le fameux service d’annuaire, communément représenté par Active Directory dans le monde Microsoft, bien que d’autres systèmes existent, comme NIS (Network Information Service, développé par Sun) ou Open Directory. Ce dernier, partie intégrante de Mac OS X Server jusqu’à sa version X.6, est intégré dans le système d’Apple depuis OS X.7 Lion, ce qui permet à l’application Server de bénéficier d’un référentiel utilisateurs présent dans tous les Mac depuis cette version, et allège d’autant le code de l’application.

Revenons sur cette notion d’annuaire ; ce terme, en informatique, désigne une base de données répartie. Le premier modèle d’annuaire X.500, sorti en 1988, identifie deux types d’entités : les DSA (Directory System Agent) et les DUA (Directory User Agents), correspondant aux demandeurs d’informations. Entre les deux, le dialogue est assuré par DAP (Directory Access Protocol), dont les spécifications initiales étaient si complexes qu’un protocole simplifié a vu le jour en 1993 : LDAP (Lightweight Directory Access Protocol).

LDAP définit à la fois un modèle de représentation et d’organisation à part entière (défini dans les RFC 4512 et RFC 4514), que les moyens d’accéder aux informations (RFC 4515 et 4516). Il dispose d’un schéma de base, librement adaptable, implémenté dans des modèles aussi divers que OpenLDAP ou bien sûr Active Directory de Microsoft.

La base de données – DIB (Directory Information Base) – est organisée sous forme d’arbres (DIT, Directory Information Tree), dont les données finales sont nommées DSE (Directory Service Entry), représentées par des attributs. Un DIT peut être représenté comme suit :

Chaque enregistrement est accessible par son DN (Distinguished Name), formé du RDN (Relative Distinguished Name) et de ses enregistrements parents.

Exemple : RDN : uid=msaliou ; DN : uid=msaliou, cn=users, dc=ods, dc=masociete, dc=com

Il est utile de mémoriser les attributs suivants :

  • c (country) : code pays en 2 letters (standard ISO 3166)
  • cn (common name) : nom de l’objet
  • gn (given name) : nom courant (généralement le prénom)
  • dc (domain component) : composant du domaine
  • o (organization) : entreprise ou entité organisationnelle
  • ou (organization unit) : service de l’entreprise
  • uid (user id) : identifiant unique de la personne

Ci-dessous la définition d’un attribut (name) dans un schéma LDAP :

attributetype ( 2.5.4.41 NAME 'name'
  EQUALITY caseIgnoreMatch
  SUBSTR caseIgnoreSubstringsMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

Il existe d’autres attributs usuels (description, title, initials…). Un schéma peut prévoir l’implémentation de classes d’objets (objectClasses), comme par exemple chez Apple la classe apple-configuration, qui comprend des attributs tels que apple-accountpolicy, apple-kdc-authkey ou encore apple-keyword.

Un format spécifique, LDIF (LDAP Data Interchange Format), à l’instar d’XML pour d’autres modèles de données, permet de représenter en liste les données d’un DSE :

dn: uid=msaliou,cn=users,dc=ods,dc=masociete,dc=com
cn: Marc Saliou
telephoneNumber: +33123456789
mail: ms@masociete.com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top

 

Se connecter à un serveur d’annuaire

Imaginons que vous souhaitiez utiliser un serveur Mac pour stocker vos utilisateurs dans un Master Open Directory, au sein d’une base OpenLDAP. Dans ce cas :

  • Le schéma de base est situé dans /etc/openldap/schema/
  • Les paramètres de la base de données sont situés dans /var/db/openldap/openldap-data
  • Les journaux (ou logs) LDAP seront situés dans /var/log/slapd.log (option activable via la commande sudo slapconfig -enableslapdlog)

Au moment de la création du Master Open Directory, l’app Server nous demande de définir un administrateur de la base (par défaut diradmin). C’est lui qui permettra de créer ou de modifier le contenu de l’arbre.

OS X nous fournit plusieurs commandes, comme slapconfig, permettant de configurer le démon slapd (Stand-alone LDAP Daemon), pour créer, gérer ou sauvegarder un service Open Directory sur un serveur Mac. La commande slapconfig -getldapconfig par exemple nous fournira ce type de résultat :

server:~ admin$ sudo slapconfig -getldapconfig

Search base: dc=ods,dc=msociete,dc=com
Database: /var/db/openldap/openldap-data
Maximum search results: 11000 size.prtotal=unlimited
Search timeout: 60
SSL: on
SSL identity: ods.masociete.com
Backend: config

A ce propos, il est utile de savoir que les paramètres de configuration de slapd se trouvent dans /etc/openldap/slapd.conf.

La connexion d’un poste Mac client à un serveur LDAP (opération bind) s’effectue via la Préférence Système Utilisateurs et Groupes ou plus directement avec l’Utilitaire d’annuaire :

La base de recherche, qui peut être demandée lors de la connexion avec l’Utilitaire d’annuaire, correspond au noeud auquel on « s’accroche » dans l’arbre. Il devra être saisi en décomposant la référence de celui-ci, soit avec l’exemple ci-dessus : cn=users, dc=ods, dc=masociete, dc=com

L’opération de binding peut également être effectuée en ligne de commande avec dsconfigldap :

dsconfigldap -a server.masociete.com -u diradmin -p motdepasseldap -l admin -q motdepasselocal

Il est à noter que le port TCP par défaut est 389, mais il peut être modifié, notamment si l’on veut utiliser une connexion sécurisée via SSL. Il est aussi possible d’utiliser le mécanisme Simple Authentification and Security Layer (SASL) procurant des outils d’authentification plus élaborés à base de clés.

Une commande similaire spécifique, dsconfigad, permet quant à elle de définir la connexion avec un serveur Active Directory.

 

Les opérations courantes

Du coté du serveur, les utilisateurs peuvent être créés facilement avec l’app Server. Mais pour l’application qui va exploiter cette base, la question qui se pose est de savoir comment accéder aux informations.

La commande ldapsearch permet d’explorer le contenu de la base, par exemple ci-dessous pour afficher les champs uidNumber et loginShell de l’utilisateur msaliou :

ldapsearch –LLL –x –h ods.masociete.com -b cn=users,dc=ods,dc=masociete,dc=com "(uid=msaliou)" uidNumber loginShell

La RFC 2255 définit par ailleurs la notion d’URLs LDAP qui permet notamment aux clients Web d’accéder directement aux données, avec la syntaxe suivante :

ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>

et dont les attributs sont les suivants :

<base_dn>   : DN de l’entrée qui est le point de départ de la recherche

<attributes>: les attributs que l’on veut consulter

<scope>     : la profondeur de recherche dans le DIT à partir du <base_dn> : »base » | « one » | « sub »

<filter>    : filtre de recherche, par défaut (objectClass=*)

Par exemple :

ldap://ods.masociete.com/ou=Ventes,o=MaSociete,c=FR?cn,tel,mail?scope=sub?(objetclass=person)

Cependant, ce mode n’étant pas implémenté dans OS X, il faudra recourir aux services d’un outil externe, tel que JXPlorer ou LDAP Brower for Mac.

Mais heureusement, dans OS X.9, l’Utilitaire d’annuaire inclut un éditeur de répertoire permettant de visualiser graphiquement les données de notre base :

L’exploration d’un enregistrement, dans le cas d’Open Directory, fait apparaitre des champs spécifiques, tel que NFSHomeDirectory, qui désigne le chemin du répertoire de travail à utiliser pour l’utilisateur.

Apple a par ailleurs publié en juin 2012 un article précisant les méthodes d’accès à un annuaire LDAP depuis Mac OS X.6 Server Admin, traitant notamment des réglages de recherches et de mappages, qui restent valables à ce jour.

N’hésitez pas à nous contacter pour toute information complémentaire.

Marc SALIOU M. Saliou