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/01/09 11:21]
james ajout tags
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 ======
  
-Obtenir la liste des suffixes disponibles sur un serveur LDAP :<​code>​ldapsearch -xLL -h ldap.mondomaine.com -b ""​ -s base "​objectclass=*"​ "​cn=SubSchema"​ +</​code>​+===== Obtenir ​la liste des suffixes disponibles sur un serveur LDAP ===== 
 + 
 +Pour btenir ​la liste des suffixes disponibles sur un serveur LDAP :<​code>​ldapsearch -xLL -h ldap.mondomaine.com -b ""​ -s base "​objectclass=*"​ "​cn=SubSchema"​ +</​code>​
  
 qui devrait vous renvoyer un résultat similaire à : <​code>​... qui devrait vous renvoyer un résultat similaire à : <​code>​...
 namingContexts:​ dc=local namingContexts:​ dc=local
 ...</​code>​ ...</​code>​
 +
 +===== 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 :<​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>​
 +    * 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>​
 +  * 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 : <​code>#​ netstat -nlp | grep slap</​code>​ qui doit renvoyer quelque chose comme : <​code>#​ 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
 +</​code>​ tadaaaa voila notre socket :-)
 +    * 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é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.1420798868.txt.gz · Dernière modification: 2015/01/09 11:21 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0