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 :
slapd
: serveur LDAP "standalone".slurpd
: démon de réplication qui permet de répliquer au fil de l’eau d’un annuaire LDAP vers un autre annuaire LDAP.- librairies incluant le protocole LDAP, les utilitaires, les outils et les exemples clients.
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
Compilation
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
.
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
son 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.
root% ./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! ...
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
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"
-h
spécifie le nom du serveur LDAP (SRVDCTFR1
)-p
spécifie le port du serveur LDAP (3268)-D
est le compte AD autorisé en lecture dans l’annuaire LDAP (mycompany\smithj
)-w
est le mot de passe du compte AD autorisé en lecture dans l’annuaire LDAP-b
est la racine de l’arborescence AD à scruter- le dernier paramètre est le filtre de recherche, dans l’exemple on
recherche l’entrée LDAP pour le compte doej via l’attribut
sAMAccountName
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].