[LDAP] Probleme de connexion

Résolu
Bonjour les Amis !
J'ai fait la config de mon serveur OPEN LDAP et tout marchait bien j'usqu'a ces deux jours.

A la commande :
ldapsearch -b « dc=cnce, dc=ci» « dc=cnce »

Il me repond :
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)

Pouvez vous m'aider ??
Configuration: LINUX CENTOS

26 réponses

Résumé de la discussion

Le problème porte sur une impossibilité de contacter le serveur LDAP après une configuration OpenLDAP sur CentOS, avec l’erreur ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1) et des tentatives de ldapsearch. Des pistes sont explorées: vérification des ports 389 et 636, tests réseau et firewall, ajustements ldap.conf et hosts, et conseils sur ldapsearch avec -x. Finalement, la cause signalée est une erreur de syntaxe dans slapd.conf: un espace séparant rootpw de sa valeur remplacé par une tabulation et une recréation du répertoire /var/lib/ldap. Après rectification des espaces, redémarrage et vérifications, le diagnostic montre une amélioration et les logs indiquent des échanges LDAP plus cohérents, avec une reprise possible des opérations d’authentification et de recherche.

Bobot (l’IA à votre service)
  1. Contributeur
    C'est très bizarre que tu n'obtiennes pas une réponse avec telnet.

    Et :

    netstat -ltnp | grep :389
    netstat -ltnp | grep :636


    Celà donne quoi ?

    Sinon, tu peux aussi essayer celà :

    - commente tout le contenu de ton ldap.conf
    - dans /etc/hosts (ton fichier hosts me semble mélanger localhost et l'adresse de ton interface réseau) mets :
    127.0.0.1 localhost.localdomain localhost
    10.1.50.244 dedev.cnce.ci dedev


    Après retente :

    telnet localhost 389

    et retente un ldapsearch

    ldapsearch -x -b 'dc=cnce, dc=ci' '(dc=cnce)'

    Si celà ne marche toujours pas, remet ton ldap.conf en place, mais mets une directive URI la place de HOST

    URI ldap://adresse.renvoyée.par.netstat-en-port-389

    Sinon, là.. je suis un peu à court d'idées :)

    Dal
    2
    1. Contributeur
      Salut,

      Essaye en utilisant cette option avec ldapsearch :
      -x     Use simple authentication instead of SASL.

      Dal
      1
      1. Ah sacré Dal , toujours à aider les autres

        ldapsearch -b -x « dc=cnce, dc=ci» « dc=cnce »
        ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)

        Ouf j'ai bien tenté cela aussi, mais cè la meme reponse. Le plus drole cè que ça marchait bien avant
        0
    2. Contributeur
      Re :)

      Le -b sert à spécifier la "searchbase", du coup ton -x n'est pas pris en compte correctement car le client ldap comprend que c'est ta "searchbase".

      Essaye comme çà :

      ldapsearch -x -b 'dc=cnce, dc=ci' '(dc=cnce)'

      Tes guillemets sont bizarres aussi (mais je ne crois pas que ce soit lié à ton problème, ni que tu utilises vraiment ces guillements là).

      Dal
      1
      1. Contributeur
        Salut,

        Le niveau de verbosité de mode de débogage doit être indiqué à la suite de l'argument -d. Comme indiqué dans la page de manuel, celui-ci est spécifié dans ldap.h.

        Si tu as la flemme d'aller voir cet entête, tu peux accéder à la même information en consultant man slapd.conf et la détermination des niveaux "loglevel" qui suit les mêmes principes :
        Log levels are additive, and available levels are:
                             1      trace function calls
                             2      debug packet handling
                             4      heavy trace debugging
                             8      connection management
                             16     print out packets sent and received
                             32     search filter processing
                             64     configuration file processing
                             128    access control list processing
                             256    stats log connections/operations/results
                             512    stats log entries sent
                             1024   print communication with shell backends
                             2048   entry parsing
        

        Si tu veux avoir *toutes* les informations de débogage, l'argument à associer à -d est la somme de tous ces nombres, soit 4095.

        Là tu devrais avoir une floppée d'informations (trop). Retire ce qui te semble superflu si nécessaire.

        Sinon, le message d'erreur est instructif. Il est différent de celui apparaîssant lorsque tu tentes l'authentification par défaut SASL.

        Dans ton ldap.conf essaye de spécifier une directive "HOST" désignant l'hôte sur lequel se trouve le serveur LDAP.

        Vérifie que ton /etc/hosts.deny n'interdit pas l'accès à cet hôte, ou ajoute l'hôte en question à /etc/hosts.allow, ou mets y les lignes suivantes :

        ldapd: ALL
        slapd: ALL

        Vérifie que les firewalls concernés n'interdisent pas l'accès au port 389 (essayes de faire un telnet sur le port 389).

        Dal
        1
        1. Contributeur
          Arrives-tu à te connecter au serveur LDAP depuis une autre machine que le serveur lui-même ?

          Dal
          1
          1. Non impossible je cherche toujours le pb
            1
            1. [root@dedev ~]# netstat -ltnp | grep :389
              [root@dedev ~]#

              J'ai modifié les fichiers comme ta demandé.

              Netsat ne me donne rien du tout . Sait pas; cè com si impossible d'ouvrir ce port. Je pense que si d'ici demain je trouve rien, je vais tout recomencer à 0

              Merci pour l'aide en tt cas

              Si j'avance je te le dirai
              1
              1. Très cher Dal !

                Je viens à l'instant même de trouver la faille.

                J'ai viré l'ancienne base de données en effaçant carément le rep /var/lib/ldap.

                J'ai recréé le rep /var/lib/ldap , proprietaire (ldap mode 777). 755 devrait suffire.

                J'ai lu dans les docs sur le net k'1 caractère espace " " peut entrainer des dysfonctinnements graves. C'est ainsi que j'ai parcourru le /etc/openldap/slapd.conf en vérifiant tous les caractères à la recherche d'espace.

                j'ai constaté que le paramètre rootpw étè séparé de sa valeur(secret) par un espace au lieu d'une tabulation.

                J'ai corrigé en effaçant l'espace et insérant une tabulation, reconstruit la base de données avec les fichiers LDIF que j'avais pris soin de sauvegarder .

                Tout marche pour le mieux maintenant. Voici mes logs que j'ai dirigé dans un fichier:

                Oct 12 10:52:36 dedev slapd[6149]: conn=45 op=35 SRCH attr=dn
                Oct 12 10:52:36 dedev slapd[6149]: conn=45 op=35 SEARCH RESULT tag=101 err=0 nentries
                

                0 text

                Oct 12 10:52:36 dedev slapd[6149]: conn=45 op=36 UNBIND Oct 12 10:52:36 dedev slapd[6149]: conn=45 fd=11 closed </pre>

                En tout cas merci pour l'aide, tu m'a jamais lâché. J'essayerai d'aider d'autres utilisateurs à mon tour.
                1
                1. Ta peut être raison mais lorsque je fais les commandes ldapadd ou ldapsearch sans argument c'est le meme résultat.

                  Je pense qu'il y a un autre problème quelque part.

                  [root@dedev ~]#ldapadd
                  ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
                  [root@dedev ~]# ldapsearch
                  ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
                  0
                  1. Contributeur
                    Bonjour,

                    Ce n'est pas ce que je t'ai demandé de faire.

                    Si tu pouvais copier-coller et exécuter la ligne proposée en <3> ci-dessus, et poster ici le résultat du message d'erreur éventuel (que ce soit le même ou un message différent), celà ferait avancer les choses.

                    Là, tu persistes à tenter d'utiliser l'authentification SASL par défaut de ton serveur LDAP, qui visiblement ne fonctionne pas comme tu l'attends.

                    Ce que je te propose, c'est de tenter une connexion simple, pour tenter de localiser le problème, qui peut être lié à un mauvais paramétrage de ton authentification SASL, à un certificat SSL mal formé, à un problème de firewall,...

                    Tu peux aussi démarrer slapd dans une console avec les informations de débogage (option -d - vois man slapd), afin d'avoir plus d'informations sur les messages d'erreur, qui devraient s'afficher dans le terminal dès lors que tu tentes d'intéragir avec le serveur LDAP (à partir d'un autre terminal ou d'un client quelconque).

                    Dal
                    0
                    1. Salut Dal, merci de suivre le problème !

                      Voici les resultats du test

                      [root@dedev ~]# ldapsearch -x -b 'dc=cnce, dc=ci' '(dc=cnce)'
                      ldap_bind: Can't contact LDAP server (-1)

                      Je suis en train de tenter pour le mode debug

                      A tt de suite
                      0
                    2. J'ai activé le mode debug !!

                      Mais il est pas si bavard ke ça. Lorsque je lance la commande plus haut, il n'affiche rien de plus. Je creuse toujours
                      0
                  2. J'ai activé le mode debug .

                    slapd -d 4095

                    rien ne se passe kan je tente la recherche. Sans doute parceque les instructions ne sont pas envoyées au serveur LDAP,. En effet je fais

                    telnet 10.1.50.244 389 et ça échoue:

                    telnet: connect to address 10.1.50.244: Connection refused
                    telnet: Unable to connect to remote host: Connection refused

                    J'ai pas configuré de firewall non plus. En tt cas je pense pas.

                    Dans mon fichier /etc/openldap/ldap.conf j'ai inscrit l'adresse du serveur, mais rien à faire.

                    vois toi même :

                    HOST 10.1.50.244
                    BASE dc=cnce,dc=ci

                    Alors je continue de chercher pourquoi le port 389 n'est pas ouvert alors que le serveur est lancé.

                    Merci pour le suivi en tt cas
                    0
                    1. Contributeur
                      Le démon est-il bien lancé ?

                      ps aux | grep slapd

                      Si c'est le cas, que tu es sur la même machine que le serveur et que tu as inclus les lignes indiquées à /etc/hosts.allow, et que ton firewall ne te joue pas des tours, peut-être est-il lancé sur un autre port que le port par défaut ?

                      Quelles sont les options de lancement de slapd (je ne suis pas sûr que celà soit géré par slapd.conf, car il y a des arguments de ligne de commande pour affecter le port d'écoute - vois donc aussi le script de lancement).

                      Sinon, ton message n'est pas clair sur ce que restitue exactement l'usage de l'option de débogage.

                      Chez moi, un démarrage de slapd avec cette option affiche plusieurs pages d'informations de débogage avant même que le serveur n'indique être démarré et qu'il soit à l'écoute des connexions.

                      Si tu n'as *aucune* information de débogage *du tout* qui s'affiche, il se peut que tu aies un problème avec l'exécutable slapd lui-même, ou une librairie qu'il utilise. Mais c'est étonnant que tu n'aies pas de message d'erreur.

                      Pour commencer, tu pourrais faire :

                      whereis sladp
                      ls -al /le/resultat/de/la/commande/whereis
                      ldd /le/resultat/de/la/commande/whereis


                      Dal
                      0
                      1. Mon ps :
                        ldap     21549  0.0  0.6  8776 3192 ?        Ss   13:33   0:00 /usr/sbin/slapd -u ldap -h ldap:///


                        Je vois bien le PID (21549)

                        J'ai remarqué quelque chose, D'après le fichier slapd.conf, les fichiers/var/run/slapd.pid et /var/run/slapd.args devraient exister au lancement. Ce n'est pas le cas en pratique.

                        Le mode debug me donne plein d'infos, mais pas de message d'erreur en particulier. Je pense qu'il m'indique qu'il a ouvert la base:
                        bdb_db_open: dc=cnce,dc=ci
                        bdb_db_open: dbenv_open(/var/lib/ldap)


                        Mon fichier /etc/openldap/slapd.conf :

                        include         /etc/openldap/schema/core.schema
                        include         /etc/openldap/schema/cosine.schema
                        include         /etc/openldap/schema/nis.schema
                        include         /etc/openldap/schema/inetorgperson.schema
                        include         /etc/openldap/schema/samba.schema
                        
                        
                        
                        
                        allow bind_v2
                        
                        
                        
                        pidfile         /var/run/slapd.pid
                        argsfile        /var/run/slapd.args
                        
                                by anonymous auth
                                by dn="cn=admin,dc=cnce,dc=ci" write
                                by * none
                        
                        access to *
                                by dn="cn=admin,dc=cnce,dc=ci" write
                                by * read
                        
                        
                        
                        #######################################################################
                        # ldbm and/or bdb database definitions
                        #######################################################################
                        
                        database        bdb
                        suffix          "dc=cnce,dc=ci"
                        rootdn "cn=admin,dc=cnce,dc=ci"
                        
                        #rootpw JqNpwdSaoVPQnOSBuvfa1rAHTMyVd3b9
                        rootpw secret
                        #rootpw {SSHA}+pdZNlNjb3NxgXfe8Ov0d0fQWrUJh/GA
                        
                        directory       /var/lib/ldap
                        
                        
                        index objectClass                       eq,pres
                        index ou,cn,mail,surname,givenname      eq,pres,sub
                        index uidNumber,gidNumber,loginShell    eq,pres
                        index uid,memberUid                     eq,pres,sub
                        index nisMapName,nisMapEntry            eq,pres,sub


                        Mon fichier /etc/hosts.allow :
                        127.0.0.1
                        10.1.50.244
                        ldapd: ALL
                        slapd: ALL
                        


                        Mon fichier /etc/hosts
                        10.1.50.244     dedev.cnce.ci   dedev   localhost.localdomain   localhost
                        


                        Franchement j'aurais désinstallé et réinstallé ce truc, mais sais pas si ça va aider. Je creuse un peu encore.
                        0
                        1. Contributeur
                          hmm :)

                          Si on se résume, le démon semble bien lancé, il ouvre apparemment la base que tu as paramétrée, et il attend des connexions qui semblent ne jamais lui parvenir.

                          Les connexions vers l'hôte sont permises (en fait elles paraissent locales selon le contexte de ton /etc/hosts) et tu penses que tu n'as pas de firewall (vérifie quand même).

                          Tu n'as pas indiqué si tu avais vérifié le port sur lequel slapd démarre.

                          Vois celà dans les scripts de démarrage de ta machine (dans /etc/init.d/slapd je suppose sur CentOS).

                          Peut-être démarres-tu sur le port SSL/TLS de LDAP (qui serait 636) ou un autre port, alors que ldapsearch s'obstine à essayer d'utiliser le port par défaut 389.

                          Dal
                          0
                          1. Merci pour le suivi

                            Vérifié le pare feu, il est désactivé.

                            Le fichier de lancement en fait /etc/init.d/ldap (sur la CENTOS 4 ke j'utilise) lance le serveur avec la commande :

                            ${slapd} -u ldap -h '"ldap:/// ldaps:///"'


                            D'apres le man (voir man slapd) , l'option -h '"ldap:/// ldaps:///"' doit lancer le serveur sur les ports par defaut que sont 389 et 636 .

                            Bien sure, la variable slapd est définie auparavant avec slapd=/usr/sbin/slapd

                            Le fichier de configuration qui va rechercher est le bon, j'ai vérifié.

                            Le plus triste dans tout cela, le serveur marchait avant. Je sais pas ce qui a bien pu se passer.

                            J'ai vu sur une page Web http://www.bo.infn.it/alice/introgrd/edg1-4/node8.html

                            Certains éléments que j'utilise actu pour mes recherches. Bon je continue de chercher. Si t'a quelque chose n'hesites pas car la, suis ds la m....
                            0
                            1. Le réinstallation me donne le meme problème. Sais pas d'ou l'erreur peut venir. Je cherche toujours.

                              A bientôt
                              0
                              1. Contributeur
                                Essaye de démarrer en slapd -d 9 et poste le résultat ici.

                                Celà devrait réduire le volume d'informations de débogage à des informations plus pertinentes. Il y a peut être une erreur signalée quelque part que tu n'as pas vue.

                                Sinon, au cas où, en dehors de ton ldap.conf, tu n'as pas de .ldaprc dans ton répertoire home ?

                                Dal
                                0
                                1. Contributeur
                                  Bravo :)

                                  Le coup de l'espace m'était arrivé également il y a longtemps, mais je ne rappelais pas que celà donnait ce type de message d'erreur (et il me semblait que le problème survenait quand l'espace se situe avant la directive).

                                  Par curiosité, j'aurai bien voulu savoir si le démarrage manuel slapd -d donnait un message d'erreur plus explicite.

                                  Sinon, tu devrais sans doutes changer le mot de passe (qui est le mot de passe par défaut) et le crypter avec slappasswd, comme celà :

                                  slappasswd -s monnouveaumotdepassetresdur

                                  ... et tu copies le résultat dans ton slapd.conf.

                                  Bonne continuation !

                                  Dal
                                  0
                                  1. Non, en lançant le mode debug, il n'y a pas de message d'erreur qui s'affiche. Le serveur montre les initialisations, ... et dit que la BD est démarrée et initialisée.

                                    C'est vrai qu'on aurrait pu s'attendre à un truc genre "invalid credential..." pour le mot de passe......mais boff.. Peut être aussi que la BD a été corrompue.

                                    Pour le pwd, je le changerai, t'inkiète cè plus simple pke je teste l'annuaire. Il me sera utile pour mes developpements (système SSO) en interrogeant l'annuaire.

                                    Merci pour tout DAL
                                    0
                                  2. Salut Dal, Si t'es encore la, j'ai eu le même problème par deux fois encore. J'ai juste regénéré l'annuaire à l'aide de copies du fichier LDIF.

                                    ldapadd -D "cn=admin,dc=cnce,dc=ci" -x -W -f /home/wamoikon/Ldif_complet.txt

                                    En fait cela se passe chaque fois que la machine est arrêtée brutalement. La base de données est immédiatement corrompue.

                                    Voila, encore merci pr l'autre fois
                                    0
                                  3. @WillyBonsoir Willy,

                                    Tu devrais peut-être changer de disque ;-) simple joke... désolé

                                    Maintenant, sans blaque (d'autant qu'elle était mauvaise):
                                    - Quel SF as-tu sur /var , journalisé ou pas?
                                    - Y a-t-il de la place sur la partie associée à /var
                                    j'ai eu le sale tour de bourrer le disque ou était /var à cause d'un log aérophagique, du coup lorsque j'ai ajouté des comptes, la base de donnée ldap était un peu moisie (carrément niquée quoi...). Remède, poser soigneusement l'annuaire dans un coin peinard avec plein d'espace et pas de risque, et faire quand même qqs "df" régulièrement ou encore mieux ajouter un outils de contrôle de charge des disques.

                                    Christian

                                    PS.
                                    Côté espace, le caractère ' ' cette fois, c'est aussi dans le LDIF qu'ils sont rigolos, en fin de ligne, ils impliquent de continuer l'affectation du champ avec le contenu de la ligne suivante, un truc de bleu of course, mais après de un peu de temps de speed, ça tue!!!
                                    Pour ma part j'en veux à plus finir aux développeurs qui ont spécifiés LDIF ... là encore je blague ;-)), mais quand même, quèque chose qui s'voit, c'est ben mieux qu'un :
                                    grep " $" toto.ldif
                                    !!!
                                    0
                                2. j'ai rencontré ce probléme hier le syntaxe est
                                  ldapsearch -x -b « dc=cnce, dc=ci» « dc=cnce »
                                  0
                                  1. lol pour moi fonctionne la commande search mais toujour a la meme reponse
                                    0
                                    • 1
                                    • 2