Compilation et installation d’OpenLDAP 2.4.26 client et serveur sur Sun Solaris 10 x86

Logo

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].