2 OpenLDAP
OpenLDAP est un annuaire open-source qui implémente le protocole LDAP.
Pour récupérer les sources d'OpenLDAP ainsi que la documentation officielle,
une seule adresse : http://www.openldap.org .
2.1 Installation
OpenLDAP nécessite que BerkeleyDB (http://www.sleepycat.com ) soit installé, ce qui ne pose pas
de problème particulier, que ce soit une installation à partir d'un binaire
ou de sources.
En revanche, pour installer OpenLDAP à partir des sources (afin d'avoir la
dernière version disponible, la 2.2.5, qui nécessite d'ailleurs d'avoir la
version 4.2 de BerkeleyDB ), il faut procéder ainsi, une fois que l'on a
décompressé les sources et que l'on s'est placé dans le répertoire principal
des sources :
$ export CPPFLAGS='-I/usr/local/BerkeleyDB.4.2/include'
# adapter le chemin si celui-ci est incorrect : c'est le chemin d'installation de BerkeleyDB
$ export LDFLAGS='-L/usr/local/BerkeleyDB.4.2/lib'
$ ./configure --with-tls=no --with-cyrus-sasl=no
# les 2 paramètres permettent de désactiver le support tls et cyrus sasl
$ make depend
$ make
$ make test
$ su root -c "make install"
(consulter le fichier INSTALL dans le répertoire principal des sources
d'OpenLDAP , ainsi que le guide d'installation sur http://www.openldap.org pour plus d'informations,
et la section 5.1 pour voir comment utiliser OpenLDAP avec TLS)
2.2 Configuration
Pour configurer OpenLDAP , il faut modifier le fichier slapd.conf
(situé par défaut, si on a installé depuis les sources, dans le répertoire
/usr/local/etc/openldap).
Vers la fin de ce fichier, il faut avoir les lignes suivantes :
allow bind_v2
pour autoriser les clients qui utilisent le
protocole LDAPv2 (par défaut seuls ceux utilisant LDAPv3 sont autorisés).
En effet, squid_ldap_auth peut utiliser LDAPv2, donc dans ce cas
cette ligne devient indispensable (la version de squid_ldap_auth fournie
avec Squid à partir de la version 2.5.STABLE3 permet d'indiquer la version
de LDAP à utiliser à l'aide du paramètre -v ; la version la plus récente
de Squid existant en package RedHat au moment de la rédaction de ce
document est la 2.5.STABLE1).
database bdb
suffix "dc=example,dc=com"
à remplacer par le bon suffixe
rootdn "cn=Manager,dc=example,dc=com"
à adapter également
rootpw secret
mettre un vrai mot de passe, en clair (déconseillé), ou crypté (par exemple
le mot de passe crypté correspondant à "secret" est
{SSHA}qmWiSnPhgOfkfmU0JS1XGVgvfA/0GFKu).
On peut crypter un mot de passe par exemple avec
/usr/local/sbin/slappasswd.
Une fois que le fichier de configuration a été correctement écrit,
l'annuaire est prêt à être utilisé.
2.3 Utilisation
Pour utiliser l'annuaire OpenLDAP , il faut tout d'abord exécuter slapd
(situé par défaut dans /usr/local/libexec/).
Ensuite, on peut consulter l'annuaire, ajouter, modifier, ou retirer des entrées
au moyen de ldapsearch, ldapadd, ldapmodify,
ldapdelete (fournis avec OpenLDAP ) et de fichiers
LDIF (LDAP Data Interchange Format)...
ou bien à l'aide d'outils graphiques comme l'interface php
phpLDAPadmin (http://phpldapadmin.sourceforge.net ) ou l'outil java
LDAP Browser/Editor (http://www.iit.edu/~gawojar/ldap )...
2.4 Exemple
J'ai défini un annuaire d'exemple correspondant à l'arbre suivant :
Figure 1 : Arbre d'exemple
On a ainsi 4 utilisateurs situés dans l'Organizational Unit (ou) Users,
et 2 groupes situés dans l'ou Groups, 2 utilisateurs étant membres du
premier groupe, les 2 autres utilisateurs étant membres du deuxième groupe.
Le fichier LDIF correspondant est le suivant :
version: 1
# LDIF Export for: dc=example,dc=com
# Generated by phpLDAPadmin on February 17, 2004 2:52 pm
# Server: Serveur test (localhost)
# Search Scope: sub
# Total entries: 10
# Entry 1: dc=example,dc=com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
o: my organization
dc: example
# Entry 2: cn=Manager,dc=example,dc=com
dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
# Entry 3: ou=Groups,dc=example,dc=com
dn: ou=Groups,dc=example,dc=com
ou: Groups
objectClass: top
objectClass: organizationalUnit
# Entry 4: ou=Users,dc=example,dc=com
dn: ou=Users,dc=example,dc=com
ou: Users
objectClass: top
objectClass: organizationalUnit
# Entry 5: cn=bart,ou=Users,dc=example,dc=com
dn: cn=bart,ou=Users,dc=example,dc=com
cn: bart
sn: Bart Simpson
userPassword: azerty
objectClass: person
objectClass: top
# Entry 6: cn=homer,ou=Users,dc=example,dc=com
dn: cn=homer,ou=Users,dc=example,dc=com
cn: homer
objectClass: person
objectClass: top
userPassword: azerty
sn: Homer Simpson
# Entry 7: cn=lisa,ou=Users,dc=example,dc=com
dn: cn=lisa,ou=Users,dc=example,dc=com
cn: lisa
objectClass: person
objectClass: top
userPassword: azerty
sn: Lisa Simpson
# Entry 8: cn=marge,ou=Users,dc=example,dc=com
dn: cn=marge,ou=Users,dc=example,dc=com
cn: marge
objectClass: person
objectClass: top
userPassword: azerty
sn: Marge Simpson
# Entry 9: cn=Parents,ou=Groups,dc=example,dc=com
dn: cn=Parents,ou=Groups,dc=example,dc=com
cn: Parents
objectClass: groupOfNames
objectClass: top
description: groupe des parents
member: cn=homer,ou=Users,dc=example,dc=com
member: cn=marge,ou=Users,dc=example,dc=com
# Entry 10: cn=Enfants,ou=Groups,dc=example,dc=com
dn: cn=Enfants,ou=Groups,dc=example,dc=com
cn: Enfants
objectClass: groupOfNames
objectClass: top
description: groupe des enfants
member: cn=bart,ou=Users,dc=example,dc=com
member: cn=lisa,ou=Users,dc=example,dc=com
Cet annuaire d'exemple servira plus loin dans l'exemple d'authentification
par groupes de Squid .