Le système d'exploitation GNU-Linux/Les annuaires LDAP
Sections |
[modifier] Les concepts fondamentaux LDAP
En attendant que cette partie soit écrite, nous invitons le lecteur à se référer à ce tutoriel très complet :
Tutoriel LDAP de Laurent Mirtain
[modifier] Mise en pratique : OpenLDAP
[modifier] Installation
# apt-get install slapd ldap-utils
[modifier] Configuration
Pour Debian Squeeze le fichier slapd.conf se situe dans /usr/share/doc/slapd/examples/slapd.conf. Il faut donc changer son emplacement avec cp /usr/share/doc/slapd/examples/slapd.conf /etc/ldap/. Puis modifier le fichier /etc/default/slap et changer la ligne 'SLAPD_CONF=/etc/ldap/sldap.conf'.
La configuration de OpenLDAP se situe dans le fichier /etc/ldap/slapd.conf :
# more /etc/ldap/slapd.conf
# Les schémas à inclure à l'annuaire
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
# le fichier contenant le PID du processus
pidfile /var/run/slapd/slapd.pid
# Le fichier contenant les arguments
argsfile /var/run/slapd/slapd.args
# La facilité utilisée avec syslog
loglevel none
# Emplacement des modules
modulepath /usr/lib/ldap
# Chargment de modules permettant d'étendre les fonctionnalités de OpenLDAP
moduleload back_hdb
# Limites concernant les recherches
sizelimit 500
tool-threads 1
##################################
# Définition du premier annuaire #
##################################
# On utilise un stockage basé sur le format de fichier HDB
backend hdb
database hdb
# On définit la racine de l'arbre (on parle de suffixe ou de basedn)
suffix "dc=domaine,dc=fr"
# Répertoire stockant les données de l'annuaire, dans notre cas, des fichiers au format HDB
directory "/var/lib/ldap"
# L'administrateur de l'annuaire
rootdn "cn=admin,dc=domaine,dc=fr"
rootpw motdepasse # en clair ou généré via la commande slappasswd
# Des paramêtres d'optimisation du format HDB
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
# Les attributs à indexer en vue d'améliorer drastiquement les recherches
index objectClass eq
# à commenter ...
lastmod on
checkpoint 512 30
# contrôle d'accès aux attributs sensibles
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=domaine,dc=fr" write
by anonymous auth
by self write
by * none
# Annuaire avec accès anonyme en lecture seule
access to dn.base="" by * read
access to *
by dn="cn=admin,dc=domaine,dc=fr" write
by * read
Après chaque modification de ce fichier, on relance OpenLDAP avec la commande suivante :
# /etc/init.d/slapd restart
[modifier] Création de l'annuaire
On crée le fichier LDIF qui va initialiser le sommet de l'arbre :
# cat cree_arbre.ldif dn: dc=domaine,dc=fr objectClass: top objectClass: dcObject objectClass: organization dc: domaine o: domaine
On injecte le fichier LDIF dans l'annuaire via la commande ldapadd :
# ldapadd -x -h localhost -W -D "cn=admin,dc=domaine,dc=fr" -f cree_arbre.ldif Enter LDAP Password: adding new entry "dc=domaine,dc=fr"
Pour créer les autres entrées, on peut désormais utiliser PhpLdapAdmin.
[modifier] Les commandes d'administration OpenLDAP
[modifier] Les programmes complémentaires
[modifier] Les outils en ligne de commande
NB : les commandes suivantes sont fournies par le paquet Debian ldap-utils. Elles disposent des options génériques suivantes :
- -h <adresse IP ou nom> : permet d'indiquer le serveur hébergeant l'annuaire LDAP
- -x : on utilise l'authentification simple et non l'authentification TLS/SSL.
- -b <basedn> : permet d'indiquer l'annuaire à consulter (le basedn ou suffix)
- -D <dn d'un objet> : permet de s'authentifier avec le DN indiqué
- -W : demande la saisie du mot de passe du DN précédement indiqué
- -f <fichier LDIF> : permet d'indiquer un fichier LDIF
[modifier] ldapadd
La commande ldapadd permet d'ajouter des entrées dans l'annuaire LDAP.
Prenons par exemple le fichier LDIF suivant qui crée le suffixe (le basedn) de notre annuaire :
# cat cree_arbre.ldif dn: dc=domaine,dc=fr objectClass: top objectClass: dcObject objectClass: organization dc: domaine o: domaine
Pour injecter ce fichier LDIF dans notre annuaire :
# ldapadd -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -f cree_arbre.ldif -W
Si tout se passe bien, vous devez voir des lignes :
adding new entry "dc=domaine,dc=fr"
[modifier] ldapsearch
La commande ldapsearch permet d'interroger l'annuaire LDAP.
Affiche toutes les entrées de l'annuaire :
# ldapsearch -x -h localhost -b "dc=domaine,dc=fr"
Affiche les attributs de l'utilisateur bob via l'utilisation d'un filtre :
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"
Affiche uniquement les attributs uid et homeDirectory de l'utilisateur bob :
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)" uid homeDirectory
[modifier] ldapdelete
La commande ldapdelete permet de supprimer une entrée de l'annuaire LDAP. On indique à cette commande le(s) dn(s) à supprimer.
Supprime l'utilisateur bob :
# ldapdelete -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -W "cn=bob,ou=People,dc=domaine,dc=fr"
[modifier] ldapmodify
La commande ldapmodify permet de modifier une entrée de l'annuaire LDAP.
[modifier] ldapmodrdn
La commande ldapmodrdn permet de renommer une entrée de l'annuaire LDAP. Cette opération revient à changer le dn (distinguished name) d'une entrée.
[modifier] ldapcompare
La commande ldapcompare permet de comparer des entrées de l'annuaire LDAP.
[modifier] ldappasswd
La commande ldappasswd permet de changer le mot de passe d'une entrée de l'annuaire LDAP.
[modifier] ldapwhoami
La commande ldapwhoami permet de connaître avec quelle identité on est connecté à l'annuaire LDAP, c'est l'équivalent de la commande Unix whoami.
[modifier] PhpLdapAdmin
PhpLdapAdmin est un logiciel qui permet d'administrer un annuaire LDAP via une interface Web.
Installation :
# apt-get install phpldapadmin
Configuration :
PhpLdapAdmin s'est configuré avec l'annuaire définit par défaut dans OpenLDAP. Si on a changé ce dernier, il faut modifier les deux suivantes dans la configuration de PhpLdapAdmin :
# vi /etc/phpldapadmin/config.php
...
$ldapservers->SetValue($i,'server','base',array('dc=domaine,dc=fr'));
$ldapservers->SetValue($i,'login','dn','cn=admin,dc=domaine,dc=fr');
...
À chaque modification de ce fichier, il est préférable de redémarrer apache :
# /etc/init.d/apache2 restart
Accès à PhpLdapAdmin : http://localhost/phpldapadmin/
[modifier] La réplication LDAP
[modifier] Configuration du provider LDAP
On modifie le fichier /etc/ldap/slapd.conf du provider LDAP pour indiquer l'annuaire à répliquer, on rajoute les lignes en gras dans la configuration de l'annuaire et on modifie les attributs à indexer :
# vi /etc/ldap/slapd.conf
...
# On indique à OpenLDAP de charger le module
# permettant la réplication
moduleload syncprov.la
...
database bdb
suffix dc=domaine,dc=fr
rootdn dc=domaine,dc=fr
directory /var/ldap/db
index objectclass,entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
[modifier] Configuration du consumer LDAP
On modifie /etc/ldap/slapd.conf du second OpenLDAP (le consumer) pour lui indiquer l'annuaire à répliquer et l'adresse du premier OpenLDAP (le provider).
# vi /etc/ldap/slapd.conf
...
database hdb
suffix dc=domaine,dc=fr
rootdn dc=domaine,dc=fr
directory /var/lib/ldap2
index objectclass,entryCSN,entryUUID eq
syncrepl rid=123
provider=ldap://<adresse IP ou nom du provider LDAP>:389
type=refreshOnly
interval=00:00:00:10
searchbase="dc=domaine,dc=fr"
filter="(objectClass=*)"
scope=sub
attrs="*"
schemachecking=off
bindmethod=simple
binddn="cn=admin,dc=domaine,dc=fr"
credentials=admin
Il faut ensuite créer le répertoire du nouvel annuaire et le donner à l'utilisateur et au groupe openldap :
# mkdir /var/lib/ldap2 # chown openldap.openldap /var/lib/ldap2
Il ne reste plus qu'à relancer OpenLDAP :
# /etc/init.d/slapd restart
[modifier] Validation de la réplication
L'objectif est de constater la réplication des objets de l'annuaire.
[modifier] Procédure n°1 : validation de l'ajout de données sur le réplicat
[modifier] Coté Provider
- on crée un fichier LDIF contenant l'utilisateur à rajouter
# cat bob.ldif
dn: cn=bob,ou=People,dc=domaine,dc=fr
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
givenName: Eponge
sn: Eponge
cn: bob
uid: bob
userPassword: {MD5}F7WfMlfPOGcecKZLEkmjTA==
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/bob
loginShell: /bin/sh
mail: bob@domaine.fr
- on injecte ce fichier LDIF dans notre annuaire
# ldapadd -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -f bob.ldif -W
- on vérifie que l'utilisateur a bien été crée
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"
[modifier] Coté Consumer
- on attend quelques secondes et on constate que l'utilisateur a bien été créé sur le réplicat
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"
[modifier] Procédure n°2 : validation de la suppression de données sur le réplicat
[modifier] Coté Provider
- on supprime l'utilisateur de notre annuaire
# ldapdelete -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -W "cn=bob,ou=People,dc=domaine,dc=fr"
- on vérifie que l'utilisateur a bien été supprimé
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"
[modifier] Coté Consumer
- on attend quelques secondes et on constate que l'utilisateur a bien été supprimé sur le réplicat
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"