{{tag>ldap serveur lister suffixes ldapsearch namingContexts ldapi slapd index auth EXTERNAL bdb_equality_candidates cn=config}}
====== LDAP ======
===== Obtenir la liste des suffixes disponibles sur un serveur LDAP =====
Pour btenir la liste des suffixes disponibles sur un serveur LDAP :ldapsearch -xLL -h ldap.mondomaine.com -b "" -s base "objectclass=*" "cn=SubSchema" +
qui devrait vous renvoyer un résultat similaire à : ...
namingContexts: dc=local
...
===== Utiliser ses credentials UNIX(Linux) pour effectuer une recherche LDAP =====
Pour ne pas avoir à retaper ses credentials, on peut se connecter au serveur LDAP via le socket UNIX :
* déjà pour vérifier que votre serveur LDAP ecoute sur un socket UNIX :# ps aux | grep ldapi
* si vous voyez une ligne similaire à celle qui suit c'est gagné :openldap 10773 0.0 0.2 101128 5616 ? Ssl févr.13 0:36 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d
* sinon il faut dire a slapd d’écouter sur un socket, pour se faire sous debian/ubuntu cela se passe dans le fichier /etc/default/slapd : chercher la définition de SLAPD_SERVICES et ajoutez y **%%ldapi:///%%** pour obtenir une ligne similaire à : SLAPD_SERVICES="ldap:/// ldapi:///"
* Un restart du service slapd plus tard ca devrait être bon : service slapd restart
* Il ne reste plus qu'à effectuer votre recherche (l'emplacement du socket peut être différent si vous n'utilisez pas la même distribution/version : adaptez à votre cas ) :
* trouver quel socket utiliser grâce a netstat : # netstat -nlp | grep slap
qui doit renvoyer quelque chose comme : # netstat -nlp | grep slap
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 4319/slapd
tcp6 0 0 :::389 :::* LISTEN 4319/slapd
unix 2 [ ACC ] STREAM LISTENING 9727856 4319/slapd /var/run/slapd/ldapi
tadaaaa voila notre socket :-)
* faire enfin notre ldapsearch (authentification EXTERNAL en passant le socket en paramètre) :ldapsearch -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "cn=config" "(objectclass=*)" dn
L’intérêt de cette méthode est par exemple d'effectuer des modifications sur le cn=config sans avoir défini d'utilisateur ni ACLs pour y accéder : il suffit alors d'être root sur la machine locale en lançant les commandes de modification : on est alors root sur le LDAP :-)
===== Jouer avec les index de son LDAP =====
On va utiliser l’authentification par socket ci dessus pour jour avec les index de son annuaire LDAP.
Noter bien sur que comme tout index de base plus on en à plus l'utilisation mémoire est forte et plus les requêtes d'update sont coûteuses : a vous d'estimer quel(s) index sont utiles/nécessaires car tout de même les requêtes en lecture utilisant les index seront bien plus rapides :-)
On pourra ainsi se débarrasser des messages de warning type : slapd[1482]: <= bdb_equality_candidates: (uidNumber) not indexed"
==== Lister les index actuels ====
On va utilise rla commande ldapsearch en se connectant en root sur le socket qui-va-bien :
# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "olcDatabase={1}hdb,cn=config" olcDbIndex
qiu devrait vous retourner quelque chose comme :
# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "olcDatabase={1}hdb,cn=config" olcDbIndex
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}hdb,cn=config
olcDbIndex: objectClass eq
olcDbIndex: entryUUID eq
olcDbIndex: entryCSN eq
olcDbIndex: cn eq
olcDbIndex: uid eq
Si vous estimez qu'il en manque on peut en rajouter : je vais par exemple rajouter des index d'egalité sur uidNumber et gidNumber
==== Ajouter de nouveaux index ====
on va utiliser ldapmodify en root qui nous donne un shell :# ldapmodify -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi
la syntaxe ldapmodify est la suivante :
* tout d'abord entrer le dn a modifier : dn: olcDatabase={1}hdb,cn=config
* ensuite le changement à effecteur : dans notre cas ajouter un/des champs "olcDbIndex" :add: olcDbIndex
* ensuite les valeurs que l'on souhaite ajouter, une par ligne :olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
* ensuite valider ce changement par une ligne vide, ce qui devrait vous afficher quelque chose comme :modifying entry "olcDatabase={1}hdb,cn=config"
* vous pouvez quitter ce shell avec Ctrl C si vous le souhaitez ou repartir pour un nouveau changement en spécifiant un nouveau dn a modifier, et ainsi de suite.
Voici donc la transcription complète de cet ajout d'index :
# ldapmodify -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
modifying entry "olcDatabase={1}hdb,cn=config"
^C
La requête de listage des index ci dessus devrait donc nous montrer cet ajout, il suffit de le vérifier :-)
# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "olcDatabase={1}hdb,cn=config" olcDbIndex
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}hdb,cn=config
olcDbIndex: objectClass eq
olcDbIndex: entryUUID eq
olcDbIndex: entryCSN eq
olcDbIndex: cn eq
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
===== recuperation de bases dbd =====
Si votre serveur LDAP ne demarre pas avec une erreur "id2entry.bdb: unexpected file type or format ", il est possible d'essayer de réparer.
Bien sur avant faites des sauvegardes ;p :
Deja on s'assure que rien ne tourne a grands coups de ps aux , et au besoin :
# /etc/init.d/nslcd stop
# /etc/init.d/slapd stop
L'idee est de dumper les données correctes puis de les reimporter dans un nouveau fichier
# cd /var/lib/ldap/example.com/
# db4.2_dump id2entry.bdb > /root/id2entry.bdb.dump
# rm id2entry.bdb
# db4.2_load id2entry.bdb < /root/id2entry.bdb.dump
Ne pas oublier de faire un chown pour faire appartenir ce(s) noveau(x) fichiers a l'utilisateur faisant tourner slapd
Le fichier ".dump" est un fichier texte a plat qui peut rapidement comporter un nombre certain de lignes tres longues, donc prendre de la place ;-)
===== Références =====
* Schémas et imports : http://www.zytrax.com/books/ldap/ch6/slapd-config.html#use-schemas