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&quot;

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 &quot;olcDatabase={1}hdb,cn=config&quot; olcDbIndex

qiu devrait vous retourner quelque chose comme :

# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b &quot;olcDatabase={1}hdb,cn=config&quot; 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 &quot;olcDatabase={1}hdb,cn=config&quot;
  • 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 &quot;olcDatabase={1}hdb,cn=config&quot;

^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 &quot;olcDatabase={1}hdb,cn=config&quot; 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

sysadmin/tips/ldap.txt · Dernière modification: 2016/02/04 18:05 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0