Introduction
Un précédent article paru en août 2008 (3 ans déjà) présentait la compilation sous Solaris 9 des librairies clientes LDAP (Lightweight Directory Access Protocol) avec OpenLDAP 2.3.43.
La version 2.3 d’OpenLDAP 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.
Avec la version 2.4.x d’OpenLDAP, la réplication d’un annuaire LDAP n’est
plus un démon à part (slurpd
), la réplication est désormais intégrée
directement dans le démon slapd
d’un serveur OpenLDAP.
Un annuaire openLDAP peut par ailleurs avoir différents types de moteurs de bases de données pour le stockage, stockages appelés communément backends :
Moteur | Configuration de compilation |
---|---|
Berkeley DB (oracle) | --enable-bdb |
MySQL NDB Cluster | --enable-ndb |
ODBC (iodbc|unixodbc|odbc32) | --with-odbc=(iodbc|unixodbc|odbc32) |
Avec ODBC, l’annuaire LDAP peut être stocké dans un serveur PostgreSQL, Oracle ou MS SQL Server par exemple. La base de données Oracle Berkeley DB demeure toutefois le moteur privilégié pour les annuaires OpenLDAP.
Cet article va désormais plus loin en présentant la compilation d’OpenLDAP 2.4.26 client et serveur en 64 bits sur une plateforme Sun Solaris 10 X86 avec Sun Studio 12.1, pour plus d’informations sur l’installation des compilateurs SunStudio 12.1 : Installation de Sun Studio 12 sur Sun Solaris 10 X86 pour les compilations.
La compilation d’OpenLDAP 2.4.26 est réalisée avec les 3 composants ci-dessous :
- OpenSSL 0.9.8r pour la couche SSL/TLS avec le serveur OpenLDAP.
- Oracle Berkeley DB 5.2.28 (11.2.5.2.28) pour le stockage backend.
- unixODBC 2.3.0.
L’installation d’openLDAP est réalisée dans un répertoire personnalisé afin
de ne pas polluer les répertoires systèmes /usr
.
L’architecture d’OpenLDAP 2.4 est ensuite présentée brièvement avec un exemple d’utilisation du binaire ldapsearch pour rechercher un compte dans un annuaire LDAP Microsoft Active Directory (AD). La construction d’un serveur OpenLDAP n’est pas abordée, il fera l’objet d’un article ultérieurement.
Téléchargement
OpenLDAP 2.4.26 est disponible en téléchargement sous la forme d’une archive
compressée (openldap-2.4.26.tar.gz
) à cette adresse :
OpenLDAP Download.
L’archive compressée openldap-2.4.26.tar.gz
est transférée avec ftp
sur la
machine cible dans le répertoire /Software/tools/temp
puis décompressée et
désarchivée avec les utilitaires gunzip
et tar
% cd /Software/tools/temp
% gunzip -c openldap-2.4.26.tar.gz | tar xvf -
Le code source est alors désarchivé avec la commande tar
dans le sous
répertoire ./openldap-2.4.26
.
Préparation de l’environnement pour la compilation d’OpenLDAP 2.4.26 avec SunStudio 64 bits
Environnement pour les compilateurs
La variable $PATH
est mise à jour avant la compilation pour référencer
/usr/ccs/bin
, répertoire qui contient les binaires ld
et ar
, indispensables
pour la génération des liens et les création des librairies *.a
.
% PATH=/usr/ccs/bin:$PATH
% export PATH
Si les liens de SunStudio n’ont pas été installés dans /usr/bin
lors de
l’installation, la variable $PATH
doit référencer également le répertoire
<répertoire de sunstudio 12.1>/bin
pour trouver les compilateurs.
% PATH=/opt/sunstudio12.1/bin:$PATH
% export PATH
Comme il s’agit d’une compilation en 64 bits, la variable d’environnement
$CFLAGS
est créée et mise à jour à -m64
:
% CFLAGS=-m64
% export CFLAGS
Environnement pour openSSL 0.9.8r
openSSL 0.9.8r est installé dans un répertoire personnalisé :
/Software/tools/misc
. Pour plus d’informations sur la compilation d’openSSL 0.9.8r sur Sun Solaris 10 X86 64 bits : OpenSSL 0.9.8r, compilation sur Sun Solaris 10 x86.
Durant cette compilation d’openSSL :
- Les fichiers entête
*.h
(ssl.h
…) pour openSSL sont installés dans le répertoire/Software/tools/misc/include/openssl
. - Les librairies d’openSSL sont installées dans le répertoire
/Software/tools/misc/lib
.
Par défaut, le script de configuration de la compilation d’OpenLDAP cherche
les fichiers d’entête *.h
pour OpenSSL dans un sous répertoire openssl
du
répertoire include
. La variable d’environnement $CPPFLAGS
est modifiée pour
référencer le répertoire /Software/tools/misc/include
% CPPFLAGS="-I/Software/tools/misc/include $CPPFLAGS"
% export CPPFLAGS
La variable $LDFLAGS
est également modifiée pour référencer le répertoire
/Software/tools/misc/lib
contenant les librairies openSSL :
% LDFLAGS="-L/Software/tools/misc/lib $LDFLAGS"
% export LDFLAGS
Sans la mise à jour de ces deux variables, la configuration tombe en échec
avec le message "Could not locate TLS/SSL package
" :
checking openssl/ssl.h usability... no
checking openssl/ssl.h presence... no
checking for openssl/ssl.h... no
configure: error: Could not locate TLS/SSL package
Environnement pour Oracle Berkeley DB 5.2
Comme pour OpenSSL, Oracle Berkeley DB 5.2 n’est pas installé dans son
répertoire par défaut (/usr/local
). La distribution Oracle Berkeley DB 5.2 est
installée dans le répertoire /Software/tools/berkeleydb/berkeleydb-5.2
. Pour
plus d’informations sur la compilation d’Oracle Berkeley DB 5.2 sur Sun Solaris 10 X86 64 bits : Compilation et installation d’Oracle
Berkeley DB 5.2 sur Sun Solaris 10 x86.
Lors de la compilation d’Oracle Berkeley DB 5.2 :
- Les fichiers entête
*.h
(db.h
…) pour Oracle Berkeley DB 5.2 sont installés dans le répertoire/Software/tools/berkeleydb/berkeleydb-5.2/include
. - Les librairies d’Oracle Berkeley DB 5.2 sont installées dans le répertoire
/Software/tools/berkeleydb/berkeleydb-5.2/lib
.
Les variables $CPPFLAGS
et $LDFLAGS
sont modifiées pour être conformes à
l’architecture :
% CPPFLAGS="-I/Software/tools/berkeleydb/berkeleydb-5.2/include $LDFLAGS"
% export CPPFLAGS
% LDFLAGS="-L/Software/tools/berkeleydb/berkeleydb-5.2/lib $LDFLAGS"
% export LDFLAGS
Sans la mise à jour de ces deux variables, la configuration tombe en échec avec le message "BerkeleyDB not available" :
checking db.h usability... no
checking db.h presence... no
checking for db.h... no
configure: error: BDB/HDB: BerkeleyDB not available
Un autre cas particulier peut également se présenter : lorsque le message d’erreur "Berkeley DB version mismatch" se produit à la configuration
checking db.h usability... yes
checking db.h presence... yes
checking for db.h... yes
checking for Berkeley DB major version in db.h... 5
checking for Berkeley DB minor version in db.h... 2
checking if Berkeley DB version supported by BDB/HDB backends... yes
checking for Berkeley DB link (-ldb-5.2)... yes
checking for Berkeley DB library and header version match... no
configure: error: Berkeley DB version mismatch
Vérifier que le répertoire des librairies d’Oracle Berkeley DB 5.2
(/Software/tools/berkeleydb/berkeleydb-5.2/lib
) est référencé en premier dans
la variable $LD_LIBRARY_PATH
. Le script de configuration peut éventuellement
détecter en premier une plus ancienne librairie Oracle Berkeley DB libdb.so*
dans les répertoires systèmes /usr
.
% LD_LIBRARY_PATH=/Software/tools/berkeleydb/berkeleydb-5.2/lib:$LD_LIBRARY_PATH
% export LD_LIBRARY_PATH
Environnement pour unixODBC 2.3.0
unixODBC 2.3.0 n’est pas installé dans son répertoire par défaut également.
La distribution unixODBC 2.3.0 est installée dans le répertoire
/Software/tools/unixodbc
. Pour plus d’informations sur la compilation
d’unixODBC 2.3.0 sur Sun Solaris 10 X86 64 bits : unixODBC 2.3.0, compilation et utilisation sous Sun Solaris 10 X86.
La variable $CPPFLAGS
est modifiée pour référencer le répertoire include
contentant les fichiers entête *.h
(sql.h
…) pour unixODBC :
% CPPFLAGS="-I/Software/tools/unixodbc/include:$CPPFLAGS"
% export CPPFLAGS
Sans ce référencement, la configuration tombe en échec avec le message
"could not locate SQL headers
" :
checking for sql.h... no
configure: error: could not locate SQL headers
Pour la compilation, la variable $LD_LIBRARY_PATH
doit contenir le
répertoire des librairies d’unixODBC (libodbcinst.so, libodbc.so
…) :
/Software/tools/unixodbc/lib
.
% LD_LIBRARY_PATH=/Software/tools/unixodbc/lib:$LD_LIBRARY_PATH
% export LD_LIBRARY_PATH
Sans le référencement du répertoire des librairies d’unixODBC dans la
variable $LD_LIBRARY_PATH
, la configuration tombe en échec avec le message
"could not locate suitable ODBC library
" :
checking for SQLDriverConnect in -lodbc... no
configure: error: could not locate suitable ODBC library
Configuration et compilation
Une fois l’environnement préparé (variables $PATH, $CFLAGS, $CPPFLAGS,
$LDFLAGS, $LD_LIBRARY_PATH
), la configuration de la compilation peut être
déclenchée avec le script configure
.
L’option --help
renvoie les options de configuration (la sortie de l’option
--help
est allégée pour la lisibilité, seules les options qui nous intéressent
sont consignées).
% cd /Software/tools/temp/openldap-2.4.26 % ./configure --help
`configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... ... Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc. You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'. ... SLAPD (Standalone LDAP Daemon) Options: --enable-slapd enable building slapd [yes] ... SLAPD Backend Options: --enable-backends enable all available backends no|yes|mod --enable-bdb enable Berkeley DB backend no|yes|mod [yes] --enable-dnssrv enable dnssrv backend no|yes|mod [no] --enable-hdb enable Hierarchical DB backend no|yes|mod [yes] ... --enable-sql enable sql backend no|yes|mod [no] ... SLAPD Overlay Options: ... --enable-syncprov Syncrepl Provider overlay no|yes|mod [yes] ... Optional Packages: ... --with-cyrus-sasl with Cyrus SASL support [auto] ... --with-tls with TLS/SSL support auto|openssl|gnutls|moznss [auto] ... --with-odbc with specific ODBC support iodbc|unixodbc|odbc32|auto [auto] ...
L’option --prefix
est spécifiée ici afin de délocaliser l’installation
d’OpenLDAP 2.4.26 en dehors des répertoires systèmes /usr
. L’installation est
réalisée dans le répertoire /Software/tools/openldap
:
--prefix=/Software/tools/openldap
(DIR).
Option | Commentaire |
---|---|
--enable-slapd |
Active la compilation de l’option Serveur LDAP. |
--enable-syncprov |
Active l’option pour la réplication. |
--enable-bdb |
Active l’option BerkeleyDB pour le stockage de l’annuaire LDAP. |
--enable-sql |
Active l’option des APIs SQL pour le stockage de l’annuaire LDAP dans un moteur de base de données via ODBC. |
--with-odbc=unixodbc |
Spécifie la couche unixODBC pour les connexions ODBC.
Les produits possibles sont unixodbc ou iodbc sous Unix. |
--with-tls=openssl |
Spécifie la couche openSSL pour la sécurité SSL/TLS.
Les produits possibles sont openssl, gnutls ou moznss . |
Par défaut, la configuration active la sécurité SSL/TLS. Lorsqu’aucune couche SSL/TLS n’est détectée à la configuration :
configure: error: MozNSS not found - please specify the location to
the NSPR and NSS header files in CPPFLAGS and the location to the
NSPR and NSS libraries in LDFLAGS (if not in the system location)
Pour désactiver la sécurité SSL/TLS, spécifier --without-tls
. De même si la
couche Cyrus SASL qui sécurise l’authentification entre un client et un serveur
LDAP n’est pas indispensable, spécifier --without-cyrus-sasl
.
La ligne de configuration de la compilation est donc la suivante dans cet exemple pratique :
% cd /Software/tools/temp/openldap-2.4.26
% ./configure --prefix=/Software/tools/openldap
--enable-slapd --enable-bdb --enable-sql
--with-tls=openssl --without-cyrus-sasl
--with-odbc=unixodbc
L’environnement étant bien préparé (variables $PATH, $CFLAGS, $CPPFLAGS,
$LDFLAGS, $LD_LIBRARY_PATH
), la configuration se déroule sans problème.
La compilation et l’installation d’OpenLDAP client/serveur 2.4.26 sont
réalisées avec les commandes make
et make install
qui s’exécutent également
sans problème :
% cd /Software/tools/temp/openldap-2.4.26
% make
% make install
Architecture OpenLDAP installée
Dans la suite de cet article, DIR
correspond au répertoire d’installation
d’OpenLDAP 2.4.26 (/Software/tools/openldap
). À la fin de la compilation,
l’arborescence créée pour OpenLDAP 2.4.26 est la suivante :
DIR/bin
DIR/etc
DIR/include
DIR/lib
DIR/libexec
DIR/sbin
DIR/share
DIR/var
Le répertoire DIR/include
contient tous les fichiers d’entête *.h
(headers)
pour OpenLDAP : ldap.h, lber.h
, etc. Ce répertoire doit être inclus dans les
options de compilation des programmes développés avec la couche OpenLDAP.
L’exécutable slapd
qui lance les démons serveurs LDAP est installé dans
DIR/libexec
.
Les répertoires DIR/bin
et DIR/sbin
contiennent respectivement les
utilitaires LDAP client (ldapadd, ldapsearch
…) et serveur (slapdn,
slapindex
…).
Les librairies LDAP sont classiquement installées dans le répertoire
DIR/lib
.
Test du client LDAP - ldapsearch
Les librairies clientes OpenLDAP peuvent dès lors être utilisées après avoir
référencé DIR/bin
(/Software/tools/openldap/bin
) dans la variable $PATH
et
DIR/lib
(/Software/tools/openldap/lib
) dans la variables $LD_LIBRARY_PATH
:
% export PATH=/Software/tools/openldap/bin:$PATH
% export LD_LIBRARY_PATH=/Software/tools/openldap/lib:$LD_LIBRARY_PATH
Plusieurs binaires sont installés dans le répertoire
/Software/tools/openldap/bin
, notamment des binaires d’administration
(ldapmodify
pour modifier des entrées LDAP, ldapdelete
pour supprimer des
entrées LDAP, ldapsearch
, etc.).
Voici un exemple d’appel de la commande ldapsearch
pour retrouver un compte
AD dans MS Active Directory :
% ldapsearch -h SRVDFR1DC1 -p 3268 -D "mycompany\smithj"
-b "DC=mycompany,DC=intranet" -w<mot_de_passe> "sAMAccountName=doej"
-h
spécifie le nom du serveur LDAP (SRVDFR1DC1)-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.
À 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 :
% ldapsearch -h SRVDFR1DC1 -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].