Compilation des librairies clientes LDAP avec OpenLDAP 2.3.43 sous Solaris


1- Introduction

Cet article décrit la compilation sous Solaris des librairies clientes LDAP (Lightweight Directory Access Protocol) avec OpenLDAP 2.3.43 (site officiel : http://www.openldap.org/). Les librairies clientes LDAP d'OpenLDAP 2 permettent de compiler Apache 2.0 avec les modules LDAP pour l'authentification.

Outre les librairies clientes LDAP, la compilation d'OpenLDAP fournit également des binaires particulièrement utiles pour interroger/modifier les annuaires LDAP depuis une machine Solaris, comme par exemple le binaire ldapsearch dédié à l'interrogation des annuaires LDAP.

La suite OpenLDAP est un projet OpenSource qui inclut plusieurs composants :

Dans le contexte de cet article, l'objectif n'est pas de monter un serveur LDAP (slapd) et/ou une réplication (slurpd) avec OpenLDAP, ni de décrire le fonctionnement et l'architecture d'un annuaire LDAP, mais de mettre à disposition un client LDAP sur une machine Solaris pour interroger un annuaire AD Microsoft (Microsoft Active Directory). Seul le troisième composant de la suite OpenLDAP est donc construit sur la machine Solaris (librairies, utilitaires et outils).

Tous les pré-requis de compilation sont supposés disponibles sur la machine Solaris :

root#gcc -v
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.9/3.4.2/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as
--with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
gcc version 3.4.2

2- Compilation

2-1- Préparation de la compilation

Les sources sont récupérées depuis le site www.openldap.org sous la forme d'une archive compressée tgz (openldap-2.3.43.tgz) et installées dans le répertoire /export/home/compilation/openldap en tant que root.

L'archive est décompressée :

root# cd /export/home/compilation/openldap
root# gunzip openldap-2.3.43.tgz

Puis les fichiers sont extraits de l'archive openldap-2.3.35.tar avec la commande tar :

root# tar xvf openldap-2.3.43.tar

Les fichiers sources sont extraits par la commande tar dans le répertoire /export/home/compilation/openldap/openldap-2.3.43.

2-2- Commande configure

Pour obtenir plus d'aide sur la configuration de la compilation d'OpenLDAP, la commande ./configure --help en se positionnant dans le répertoire des sources (/export/home/compilation/openldap/openldap-2.3.43) donne toutes les options de la compilation.

root# cd openldap-2.3.43
root# ./configure --help

Dans les options de la compilation, la partie serveur est occultée (slapd), seules les librairies clientes sont à compiler, c'est pourquoi l'option --enable-slapd=no est donnée à la configuration. Il en est de même pour le démon de réplication LDAP slurpd, l'option est désactivée avec l'option --enable-slurpd=no.

L'installation des librairies clientes est réalisée dans le répertoire /Software/openldap, l'option --prefix=/Software/openldap est donc donnée à la commande configure.

La commande configure finale est donc la suivante :

root# ./configure --prefix=/Software/openldap --enable-slapd=no --enable-slurpd=no

Le binaire ar est indispensable pour la compilation d'OpenLDAP. Le binaire ar compile les librairies .a nécessaires et sans précautions, la compilation est en échec car le binaire ar n'est pas installé dans des répertoires standards comme /usr/local/bin etc…, il est installé dans le répertoire /usr/ccs/bin. La commande configure vérifie la disponibilité du binaire ar, et si ce n'est pas le cas, le message d'erreur ci-dessous est donné lors du lancement de la commande configure :

configure: error: Unable to locate ar(1) or suitable replacement. Check PATH or set AR.

Après vérification de la présence du binaire ar dans le répertoire /usr/ccs/bin, il faut modifier la variable d'environnement PATH ou AR afin de référencer le répertoire /usr/ccs/bin pour l'utilisateur root qui réalise la compilation : dans le contexte de cet article, c'est la variable PATH qui est modifiée en passant en K-Shell. Par précaution également, pour retrouver les packages nécessaires lors de la compilation, les répertoires /usr/local/bin et /usr/local/lib sont respectivement référencés dans les variables PATH et LD_LIBRARY_PATH :

root# ksh
root# export PATH=/usr/ccs/bin:/usr/local/bin:$PATH
root# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

La commande configure donne alors quelques avertissements durant sont exécution, avertissements qui sont purement liés aux options : à titre d'exemple les options --enable-bdb (bases Berkeley) et --enable-hdb (bases HDB) sont par défaut ignorées car le démon slapd est désactivé or slapd écrit les informations du serveur OpenLDAP dans des bases Berkeley DB (bdb) ou des bases HDB.

D'autres avertissements concernent les méthodes de cryptographie (Cyrus SASL, TLS/SSL) qui sont désactivées si l'OS ne dispose pas des librairies correspondantes.

# ./configure --prefix=/Software/openldap --enable-slapd=no --enable-slurpd=no
      Configuring OpenLDAP 2.3.43-Release ...
      checking build system type... sparc-sun-solaris2.9
      ...
      checking configure arguments... configure: WARNING: slapd disabled, ignoring --enable-bdb argument
      configure: WARNING: slapd disabled, ignoring --enable-hdb argument
      configure: WARNING: slapd disabled, ignoring --enable-monitor argument
      configure: WARNING: slapd disabled, ignoring --enable-relay argument
      configure: WARNING: slapd disabled, ignoring --enable-syncprov argument
      ...
      configure: WARNING: Could not locate TLS/SSL package
      configure: WARNING: TLS data protection not supported!
      ...
      configure: WARNING: Could not locate Cyrus SASL
      configure: WARNING: SASL authentication not supported!
      configure: WARNING: Strong authentication not supported!
      ...

2-3- Commande make et make install

Les commandes make et make install sont ensuite successivement lancées pour compiler et installer dans le répertoire de destination /Software/openldap.

root# make
root# make install

La commande make install montre que les binaires installés dans /Software/openldap/bin sont par défaut exécutables par tout utilisateur (chmod 755):

      ../../build/shtool install -c -m 755 -s ldapsearch /Software/openldap/bin/ldapsearch
      ../../build/shtool install -c -m 755 -s ldapmodify /Software/openldap/bin/ldapmodify
      ../../build/shtool install -c -m 755 -s ldapdelete /Software/openldap/bin/ldapdelete
      ../../build/shtool install -c -m 755 -s ldapmodrdn /Software/openldap/bin/ldapmodrdn
      ../../build/shtool install -c -m 755 -s ldappasswd /Software/openldap/bin/ldappasswd
      ../../build/shtool install -c -m 755 -s ldapwhoami /Software/openldap/bin/ldapwhoami
      ../../build/shtool install -c -m 755 -s ldapcompare /Software/openldap/bin/ldapcompare

3- Les binaires du client OpenLDAP (ldapsearch)

Les librairies clientes OpenLDAP peuvent dès lors être utilisées après avoir référencé /Software/openldap/bin dans la variable PATH et /Software/openldap/lib dans la variables LD_LIBRARY_PATH :

root# ksh
root# export PATH=/Software/openldap/bin:$PATH
root# export LD_LIBRARY_PATH=/Software/openldap:$LD_LIBRARY_PATH

Plusieurs binaires sont installés dans le répertoire /Software/openldap/bin, notamment des binaires d'administration (ldapmodify pour modifier des entrées LDAP, ldapdelete pour supprimer des entrées LDAP etc...).

Dans le contexte de cet article, le client OpenLDAP est installé pour Apache 2.0 et à des fins de consultation avec le binaire ldapsearch.

Voici un exemple d'appel de la commande ldapsearch pour retrouver un compte AD dans MS Active Directory :

root# ldapsearch -h SRVDCTFR1 -p 3268 -D "mycompany\smithj"
        -b "DC=mycompany,DC=intranet" -w<mot_de_passe> "sAMAccountName=doej"

L'option -b est très importante, elle permet de déterminer à quelle profondeur chercher dans un annuaire LDAP. Il se peut que plusieurs entrées soient retournées pour un même compte.

A titre d'exemple, il suffit d'imaginer que le compte doej existe dans deux OU (Organization unit) différentes (US et FR) à la racine DC=mycompany, DC=intranet, dans ce cas de figure deux entrées sont retournées par le binaire ldapsearch :

...
CN=DOE John,OU=Data Messaging,OU=Core Services,OU=IT,OU=IM,OU=SUPPORT,OU=Users,OU=PAR,OU=FR,DC=mycompany,DC=intranet
...
CN=DOE John,OU=Admin Users,OU=Security,DC=us,DC=mycompany,DC=intranet

Pour lever ce type d'ambiguïté qui peut poser des problèmes avec Apache pour l'authentification, l'option -b peut être étendue en ajoutant des critères sur les OU et les DC d'un annuaire LDAP, la commande ci-dessous ne retourne bien qu'une seule entrée :

root# ldapsearch -h SRVDCTFR1 -p 3268 -D "mycompany\smithj"
        -b"OU=FR,DC=mycompany,DC=intranet" -w<mot_de_passe> "sAMAccountName=doej"

L'authentification Apache avec LDAP est en échec lorsque plusieurs entrées sur un filtre sont trouvées dans l'annuaire LDAP avec le message d'erreur "search found tow or more matches", c'est pourquoi l'arborescence LDAP doit être bien réfléchie ainsi que le filtre -b à appliquer lors des appels des librairies clientes LDAP :

[Tue May 22 19:48:56 2007] [warn] [client 10.128.148.144] [22471]
        auth_ldap authenticate: user doej authentication failed;
        URI / [User is not unique (search found two or more matches)][No such object].


Annexe

Historique

Version Date Commentaires
1.0 08/2008 Version initiale

Liens

BOL : Sun Solaris 10
BOL : OpenLDAP