Table des matières
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
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.
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
Références
- Schémas et imports : http://www.zytrax.com/books/ldap/ch6/slapd-config.html#use-schemas