{{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