Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sysadmin:tips:ldap [2015/02/19 13:03]
james ajout recherche via socket
sysadmin:tips:ldap [2016/02/04 18:05] (Version actuelle)
james [recuperation de bases dbd]
Ligne 1: Ligne 1:
-{{tag>​ldap serveur lister suffixes ldapsearch namingContexts}}+{{tag>​ldap serveur lister suffixes ldapsearch namingContexts ​ldapi slapd index auth EXTERNAL bdb_equality_candidates cn=config}}
 ====== LDAP ====== ====== LDAP ======
  
Ligne 12: Ligne 12:
 ===== Utiliser ses credentials UNIX(Linux) pour effectuer une recherche LDAP ===== ===== 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 : Pour ne pas avoir à retaper ses credentials,​ on peut se connecter au serveur LDAP via le socket UNIX :
-  * deja pour verifier ​que votre serveur LDAP ecoute sur un socket UNIX :<​code>#​ ps aux | grep ldapi</​code>​+  * déjà ​pour vérifier ​que votre serveur LDAP ecoute sur un socket UNIX :<​code>#​ ps aux | grep ldapi</​code>​
     * si vous voyez une ligne similaire à celle qui suit c'est gagné :<​code>​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</​code>​     * si vous voyez une ligne similaire à celle qui suit c'est gagné :<​code>​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</​code>​
-    * sinon il faut dire a slapd d'​ecouter ​sur un socket, pour se faire sous debian/​ubuntu cela se passe dans le fichier /​etc/​default/​slapd : chercher la definition ​de SLAPD_SERVICES et ajoutez y **%%ldapi:///​%%** pour obtenir une ligne similaire à : <​code>​SLAPD_SERVICES="​ldap:///​ ldapi:///"</​code>​+    * 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 à : <​code>​SLAPD_SERVICES="​ldap:///​ ldapi:///"</​code>​
     * Un restart du service slapd plus tard ca devrait être bon : <​code>​service slapd restart</​code>​     * Un restart du service slapd plus tard ca devrait être bon : <​code>​service slapd restart</​code>​
   * 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 ) :   * 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 ) :
Ligne 22: Ligne 22:
 unix  2      [ ACC ]     ​STREAM ​    ​LISTENING ​    ​9727856 ​ 4319/​slapd ​         /​var/​run/​slapd/​ldapi unix  2      [ ACC ]     ​STREAM ​    ​LISTENING ​    ​9727856 ​ 4319/​slapd ​         /​var/​run/​slapd/​ldapi
 </​code>​ tadaaaa voila notre socket :-) </​code>​ tadaaaa voila notre socket :-)
-    * faire enfin notre ldapsearch (autentification ​EXTERNAL en passant le socket en paramètre) :<​code>​ldapsearch -Y EXTERNAL -H ldapi://​%2fvar%2frun%2fslapd%2fldapi -b "​cn=config"​ "​(objectclass=*)"​ dn</​code>​ +    * faire enfin notre ldapsearch (authentification ​EXTERNAL en passant le socket en paramètre) :<​code>​ldapsearch -Y EXTERNAL -H ldapi://​%2fvar%2frun%2fslapd%2fldapi -b "​cn=config"​ "​(objectclass=*)"​ dn</​code>​ 
-<note tip>L'​intéret ​de cette méthode est par exemple d'effetuer ​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 :​-)</​note>​+<note tip>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 :​-)</​note>​ 
 + 
 +===== 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. 
 +<note tip>​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 :​-)</​note>​ 
 +On pourra ainsi se débarrasser des messages de warning type : <​code>​slapd[1482]:​ <= bdb_equality_candidates:​ (uidNumber) not indexed"</​code>​ 
 +==== Lister les index actuels ==== 
 +On va utilise rla commande ldapsearch en se connectant en root sur le socket qui-va-bien : 
 +<​code>#​ ldapsearch -LLL -Y EXTERNAL -H ldapi://​%2fvar%2frun%2fslapd%2fldapi -b "​olcDatabase={1}hdb,​cn=config"​ olcDbIndex</​code>​ 
 +qiu devrait vous retourner quelque chose comme : <​code>​ 
 +# 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</​code>​ 
 +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 :<​code>#​ ldapmodify -Y EXTERNAL -H ldapi://​%2fvar%2frun%2fslapd%2fldapi </​code>​ 
 +la syntaxe ldapmodify est la suivante : 
 +  * tout d'​abord entrer le dn a modifier : <​code>​dn:​ olcDatabase={1}hdb,​cn=config</​code>​ 
 +  * ensuite le changement à effecteur : dans notre cas ajouter un/des champs "​olcDbIndex"​ :<​code>​add:​ olcDbIndex</​code>​ 
 +  * ensuite les valeurs que l'on souhaite ajouter, une par ligne :<​code>​olcDbIndex:​ uidNumber eq 
 +olcDbIndex: gidNumber eq</​code>​ 
 +  * ensuite valider ce changement par une ligne vide, ce qui devrait vous afficher quelque chose comme :<​code>​modifying entry "​olcDatabase={1}hdb,​cn=config"</​code>​ 
 +  * 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 :<​code>​ 
 +# 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 
 +</​code>​ 
 +La requête de listage des index ci dessus devrait donc nous montrer cet ajout, il suffit de le vérifier :-) <​code>​ 
 +# 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 
 +</​code>​ 
 + 
 +===== 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 :<​code>​ 
 +# /​etc/​init.d/​nslcd stop 
 +# /​etc/​init.d/​slapd stop 
 +</​code>​ 
 +L'idee est de dumper les données correctes puis de les reimporter dans un nouveau fichier<​code>​ 
 +# 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 
 +</​code>​ 
 +<note important>​Ne pas oublier de faire un chown pour faire appartenir ce(s) noveau(x) fichiers a l'​utilisateur faisant tourner slapd</​note>​ 
 +<​note>​ 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 ;​-)</​note>​ 
 + 
 +===== Références ===== 
 +  * Schémas et imports : http://​www.zytrax.com/​books/​ldap/​ch6/​slapd-config.html#​use-schemas
sysadmin/tips/ldap.1424347418.txt.gz · Dernière modification: 2015/02/19 13:03 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0