====== Que faire quand le service LDAP ne marche pas ====== ===== Points à vérifier ===== Liste non-exhaustive des points à vérifier : * redémarrer le service client : apache, samba, .... * vérifier que le service client fonctionne : voir les logs, les messages à l'écran, l'erreur peut venir d'ailleurs. * vérifier quel serveur (serveur maître ou serveur(s) esclave(s)) est interrogé dans la configuration du service et qu'il est accessible. * lancer un interrogation en ligne de commande pour tester si la connexion au LDAP fonctionne, si la réponse est correcte alors le LDAP fonctionne : (On utilise pour cela le client ldapsearch installé par le paquet ldap-utils). # -ZZ force l'utilisation de TLS, vous pouvez l'enlever pour tester en clair ldapsearch -LLL -ZZ -x -h ldap-maitre.guim.info -b "dc=guim,dc=info" uid=mathieu uid sn ldapsearch -LLL -ZZ -x -h replica.guim.info -b "dc=guim,dc=info" uid=mathieu uid sn * la connexion est-elle en TLS ? Si oui, est-ce que le certificat est bien référencé dans la configuration ? * Peut-on se connecter en web/ssh/ping sur le serveur ldap concerné ? Si non, c'est sûrement la configuration réseau du client qui est problématique. ===== Script utile ===== Voici un script bash qui permet de tester la connectivité au service LDAP, il interroge le serveur désigné, puis vérifie s'il le nom d'hote est un alias DNS auquel cas il interroge les //vrais// serveurs : #!/bin/bash # check-ldap.sh - test la connexion au ldap function connect { ip_addr=$1 tls=${2:+"-ZZ"} cmd=$(ldapsearch -LLL -x -h ${ip_addr} ${tls} -b "dc=guim,dc=info" uid=mathieu uid 2> /dev/null) if [ $? -eq 0 ]; then echo " Connexion en ${2:-clair} : OK" else echo " Connexion en ${2:-clair} : ERREUR" fi } host=${1:-'ldap.guim.info'} echo "Serveur : ${host}" connect ${host} connect ${host} "tls" ping -c 1 ${host} | awk '/icmp_seq/ {print " Ping "$8" "$9}' if [ $(host ${host} | grep 'address' | wc -l) -gt 1 ]; then nslookup ${host} | awk '/Address/ && !/#/ {print $2}' | while read ip; do echo " " fqdn=$(nslookup ${ip} | awk '/name =/ {print $4}') echo "=> $ip = ${fqdn}" connect ${ip} connect ${fqdn%.} "tls" ping -c 1 ${fqdn%.} | awk '/icmp_seq/ {print " Ping "$8" "$9}' done fi ===== Trop de fichiers ouverts ===== En vérifiant le fichier /var/log/slapd.log, on voit apparaître l'erreur suivante à plusieurs reprise : Jan 24 15:05:12 ldap slapd[2102]: daemon: accept(7) failed errno=24 (Too many open files) La commande "ulimit -a" retourne : core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited La commande suivante donne le nombre de fichiers ouvert par slapd : ls -1 /proc/`pidof slapd`/fd | wc -l 40 ===== Modification d'un mot de passe ===== Création d'un ldif pour la modification d'un attribut : dn: uid=toto,ou=people,dc=guim,dc=info changetype: modify replace: userpassword userpassword: {SSHA}60aL/VKV1/5jOIBErjLvrY+rRY8ilo2n - Utilisation de ldapmodify pour modifier : sudo ldapmodify -x -W -D "cn=admin,dc=guim,dc=info" -h localhost -f fichier.ldif * -x : authentification sans SASL * -W : prompt du mot de passe * -D "dn" : compte pour se connecter au ldap