Skip to Content

Installation et Utilisation de OpenLDAP sous Debian

But de ce document

Ce document me sert de mémo sur l’installation et l’utilisation d’OpenLDAP sous Debian. Je le diffuse en espérant qu’il puisse servir à d’autres personnes.

Pré-requis

Avoir installé une Debian de Base :

  •  cf mon autre document sur ce sujet : http://www.coagul.org/article.php3 ?id_article=158

    Présentation rapide

    Une base LDAP est une base de données où les informations sont enregistrées de manière hiérarchique sous forme d’arbre et non sous forme tabulaire.

    Une base LDAP est optimisée pour la lecture d’un nombre important de petits enregistrements et convient donc parfaitement pour stocker des annuaires ou des profils utilisateurs.

    Le système LDAP utilise des schémas (/etc/ldap/schema) pour décrire des objets.

    Chaque objet contient plusieurs attributs (obligatoire ou facultatifs). Et chaque objet peut hériter des attributs d’un autre objet. Exemple :

  •  L’objet « person » a comme attributs : commonName, surname,..
  •  L’objet fils « organizationalPerson » dérivé de l’objet « person » ajoute les attributs : title, PostalAddress,...

    Les objets et les attributs sont normalisés pour assurer les échanges entre les logiciels.

    Il est possible de modifier un schéma en rajoutant des attributs à un objet (déconseillé) ou en créant un nouvel objet (mieux), mais le mieux est de faire valider cette modification par l’IANA.

    Chaque donnée enregistrée dans la base est identifiée par son DN (Distinguished Name). Ce DN est comparable au chemin complet d’un fichier. Exemple : dc=mondomaine,dc=fr

    Pour ajouter ou modifier des données dans la base, il est possible d’utiliser le format LDIF.

    Installation

    Paquets à installer :

    # apt-get install ldap-server ldap-client

    Ce qui installera en fait :

    # apt-get install slapd ldap-utils

    Écran (Titre en rouge) Message Réponse
    Configuration de slapd Enter your DNS domain mondomaine.com
    Enter the name of organisation mondomaine.com
    Admin password xxxx
    Allow LDAPv2 protocol Oui *

    * J’ai été obligé d’autoriser la norme v2 pour les clients Win 2000. Avec les clients Win NT, il n’y avait pas de problème.

    Configuration

    Le fichier de configuration est :

    /etc/ldap/slapd.conf

    La ligne suivante permet d’autoriser l’utilisation de la norme V2 de LDAP.

    allow bind_v2

    La ligne suivante donne la racine de la base LDAP :

    suffix "dc=mondomaine,dc=com"

    La ligne suivante qu’il faut ajouter manuellement donne le login de l’administrateur (admin avec le rappel de la racine). Cette ligne et la suivante sont obligatoires pour avoir un accès root sur la base depuis un programme externe (ex : PHP)

    rootdn "cn=admin,dc=mondomaine ,dc=com"

    La ligne suivante qu’il faut ajouter manuellement donne le mot de passe en clair :

    rootpw admin

    Pour plus de sécurité, il est préférable de générer un mot de passe crypté en utilisant la commande :

    # slappasswd
    New password:
    Re-enter new password:
    {SSHA}5y67xJ/t7esuGKUD7TQPcgykd8xiYMO2

    Ensuite, il faut copier la chaîne cryptée à la place du mot de passe en clair

    Paramétrage de l’accès en écriture de la base. Il faut indiquer le bon login et la racine de la base :

    access to attribute=userPassword
           by dn="cn=admin,dc=test,dc=com" write
           by anonymous auth
           by self write
           by * none

    Paramétrage de l’accès en lecture seule de la base. Il faut indiquer le bon login et la racine de la base :

    access to *
           by dn="cn=admin,dc=test,dc=com" write
           by * read

    Démarrage du serveur (slapd)

    Le serveur slapd se démarre d’une manière classique avec la commande :

    # /etc/init.d/slapd restart

    Le format de fichier LDIF

    Ce format de fichier est utilisé pour faire des imports / exports entre plusieurs bases ou pour modifier ou ajouter des données dans une base.

    ATTENTION : Il est obligatoire de coder les données en UTF-8. Si lors de l’importation une erreur est rencontrée, celle-ci est abandonnée à l’endroit où elle en était.

    Fichier LDIF pour ajouter des enregistrements

    Voici la structure d’un fichier LDIF

    dn:    objectClass:    objectClass:    ...
               ...

    Voici un exemple de fichier LDIF (AjoutRacine.ldif) pour créer la racine de l’arbre LDAP :

    dn: dc=mondomaine,dc=com
    objectClass: dcObject
    objectClass: organization
    o: Votre Societe
    dc: mondomaine

    Commande pour ajouter la racine :

    ldapadd -x -D "cn=admin,dc=mondomaine,dc=com" -w admin -f AjoutRacine.ldif

    Voici un exemple de fichier LDIF (AjoutFiche.ldif) pour créer une nouvelle fiche :

    dn: cn=Tony GALMICHE,dc=mondomaine,dc=com
    objectClass: inetOrgPerson
    cn: Tony GALMICHE
    givenName: Tony
    sn: GALMICHE

    Commande pour ajouter la fiche :

    ldapadd -x -D "cn=admin,dc=mondomaine,dc=com" -w admin -f AjoutFiche.ldif

    Fichier LDIF pour modifier des enregistrements

    Les commandes de modification ont la syntaxe suivante :

      dn: distinguished name
       changetype  {{TYPE}}
       change operation identifier
       list of attributes...
       ...
      -
       change operation identifier
       list of attributes
       ...

    TYPE peu avoir l’une des valeurs suivantes :

  •  add (ajout d’une entrée),
  •  delete (suppression),
  •  modrdn (modification du RDN),
  •  modify (modification : add, replace, delete d’un attribut)

    Le fichier « ModifFiche.ldif » ci-dessous permet d’ajouter le numéro de téléphone :

    dn: cn=Tony GALMICHE,dc=mondomaine,dc=com
    changetype: modify
    add: telephonenumber
    telephonenumber: 03 80 97 98 99

    Commande pour modifier la fiche :

    ldapadd -x -D "cn=admin,dc=mondomaine,dc=com" -w admin -f ModifFiche.ldif

    Fichier LDIF pour supprimer des enregistrements

    Le fichier « SuppFiche.ldif » ci-dessous permet de supprimer une fiche :

    dn: cn=Tony GALMICHE,dc=mondomaine,dc=com
    changetype: delete

    Commande pour supprimer la fiche :

    ldapadd -x -D "cn=admin,dc=mondomaine,dc=com" -w admin -f SuppFiche.ldif

    Commande pour rechercher des enregistrements

    Rechercher les enregistrements contenant un attribut objectclass (donc tous) depuis la racine :

    ldapsearch -x -b "dc=mondomaine,dc=com" "objectclass=*"

    Rechercher les enregistrements contenant un attribut cn dans la branche Eloyes :

    ldapsearch -x -b "o=Eloyes,dc=mondomaine,dc=com" "cn=*"

    Rechercher les enregistrements donc l’attribut dc se termine par gray depuis la racine :

    ldapsearch -x -b "dc=mondomaine,dc=com" "dc=*gray"

    Sauvegarde et Restauration d’une base de données LDAP

    La commande suivante permet de générer un fichier .LDIF contenant la base complète :

    slapcat -l DumpLDAP.ldif -b "dc=mondomaine,dc=com"

    LDAP Browser

    LDAP Browser est un programme en Java, permettant de consulter et de modifier une base LDAP :

  •  http://www-unix.mcs.anl.gov/ gawor/ldap/

    Exemples de scripts PHP

    Exemple de script PHP pour se connecter au serveur LDAP

    $server="localhost";
    $port="389";
    $dn="dc=mondomaine,dc=com";
    $rootdn="cn=admin,$dn";
    $rootpw="admin";

    $ds=ldap_connect($server,$port);
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    $r=ldap_bind($ds,$rootdn,$rootpw)
            or die ("Impossible de se connecter au serveur ! \n");
    echo "Authentification sur le serveur OpenLDAP -> OK \n\n";

    Exemple de script PHP pour rechercher des enregistrements

    $sr=ldap_search($ds,$dn,"(objectclass=*)");
    if ($sr) {
            $info=ldap_get_entries($ds,$sr);
            echo $info["count"]." enregistrements dans OpenLDAP \n";
            for ($i=0;$i<=$info["count"];$i++) {
                    echo "$i - ".$info[$i]["dn"]." \n";
            }
    }

    Liste partielle des attributs de la classe « organization »

    AttributDescription
    businessCategoryActivité professionnelle d’une entreprise ou d’une personne
    cCode du pays en deux lettres (respectant le standard ISO 3166)
    cnNom de l’objet (common name)
    descriptionDescription de l’objet
    distinguishedNameNom distingué (utilisé par d’autres attributs par héritage)
    facsimileTelephoneNumberNuméro de fax
    givenNamePrénom de la personne
    houseIdentifierIdentifiant d’un batiment
    initialsInitiales d’une personne
    internationalSDNNumberNuméro ISDN
    llocalité de l’objet (géographique)
    memberDistinguished Name des membres
    nameNom (utilisé par d’autres attributs par héritage)
    oNom de l’organisation
    objectClassClasse d’objets
    ouUnité organisationnelle (branche de l’organisation)
    ownerNom du propriétaire de l’objet
    postalAddressAdresse postale (sans le code postal)
    postalCodeCode postal
    postalOfficeBoxBoîte aux lettres (postale)
    presentationAddressAdresse réseau de la présentation de l’objet (généralement une URL vers la présentation en ligne)
    protocolInformationAttribut complémentaire à presentationAddress pour définir le protocole à utiliser
    registeredAddressAdresse postale pour des envois de courriers recommandés et de colis
    seeAlsoDN d’objets complémentaires
    serialNumberNuméro de série de l’objet
    snNom de famille de la personne (surname)
    stEtat ou région (state)
    streetAddressNom de la rue et assimiilé (boulevard, ...)
    telephoneNumberNuméro de téléphone
    titleTitre de la personne (différent de fonction)
    uidIdentifiant unique de l’objet
    userPasswordMot de passe de l’utilisateur

    Liste partielle des attributs de la classe « inetOrgPerson »

    NomSémantiqueMonoOblLectureUtilisation
    cnnom(s) complet(s) (d’usage) sans accent ORIOrdre : Nom, Prénom. Attention : pas d’accent pour simplifier les recherches. Voir aussi displayName. Exemple : "Bugale Jerome"
    displayNamenom complet avec accents Version accentuée de la valeur principale de cn. Exemple : "Bugalé Jérôme"
    employeeTypetype de personnel D ?RI ?Définir les grandes familles ?
    facsimileTelephoneNumberNuméro de fax RIFormat E 123 (cf Références)
    givenNamePrénomMDRIidem sn. Exemple : "Jérôme"
    l localité de l’objet (géographique)
    labeledURIPage personnelle RI
    mailadresse mel canoniqueM RI ?
    mobilenuméro de téléphone mobile RIFormat E 123 (cf Références)
    o Nom de l’organisation
    ou Unité organisationnelle (branche de l’organisation)
    postalAddressAdresse postale RIAdresse complète. Attention au format ("$" séparateur, voir RFC2256)
    postalCodeCode postal
    preferredLanguagelangue préféréeM RIcf RFC2068
    snNom ORIContient le nom d’usage. Il est possible d’ajouter le nom de famille (nom patronymique) en seconde valeur. Tout caractère diacritique. Première lettre en majuscule. Voir aussi cn. Exemple : "Bugalé".
    st Etat ou région (state)
    telephoneNumbernuméro de téléphone fixe RIFormat E 123 (cf Références)
    titletitre RIResponsabilité ; président, directeur, ... (cf Harpège ?). Code ou intitulé complet ?
    uididentifiant uniqueMDRutilisé comme rdn, contenu indifférent mais aussi court que possible
    userCertificatecertificat X509 A ?

    Problème rencontré

    Suite à une coupure brutale du serveur, le serveur ldap n’est pas reparti. Voici le message que j’avais au démarrage en mode débugage :

    # slapd -d 1
    bdb_db_open: dbenv_open(/var/lib/ldap)
    bdb(dc=mondomaine,dc=com): operation not permitted during recovery
    bdb_db_open: db_open(/var/lib/ldap) failed: Invalid argument (22)
    backend_startup: bi_db_open failed! (22)
    bdb_db_destroy: close failed: Invalid argument (22)
    slapd stopped.

    En fait, c’était la base ldap qui était corrompue et pour régler ce problème, je l’ai simplement ré-indexée avec ces commandes :

    # /etc/init.d/slapd stop
    # slapindex
    # /etc/init.d/slapd start

    Historique des modifications

    VersionDateCommentaire
    0.118/11/04Création par Tony GALMICHE
    0.203/12/04MAJ suite à installation serveur Pentium Pro 2000
    0.317/12/04MAJ suite à présentation atelier Coagul
    0.415/03/07Ajout « Problème rencontré »
  • Commentaires

    Impossible de mémarrer slapd sous ubuntu server 7.10

    Bonjour,

    J’ai bien pu installer et utiliser ldap avec samba mais en voulant le reconfigurer je ne peux plus le demarrer avec le message suivant :

    samba.schema line 485 AttributeType not found : DisplayName

    j’ai vérifier la ligne 485 du fichier samba.schema et je n’ai rien trouvé

    Merci

    Installation et Utilisation de OpenLDAP sous Debian

    Bonjour,
    Tout d’abord merci pour ce tuto.

    J’ai un petit problème avec le deamon slapd.
    Celui-ci ne démarre pas automatiquement, pourtant il me dit le contraire pendant le boot.
    (Je suis sous une Debian Etch)
    Il ne démarre pas non plus avec la commande :
    /etc/init.d/slapd start
    Est-ce un problème de droit ?
    Et si oui, que dois-je faire ?
    Merci d’avance.

    > Installation et Utilisation de OpenLDAP sous Debian

    bonjour j’ai installer mon openldap tout marchait bien aprés un certain temps je n’arive plus à me connecter et j’ai ce message en faisant :

    remi3 : # tail -l /var/log/syslog

    Nov 23 18:09:59 remi3 slapd[2960] : @(#) $OpenLDAP : slapd 2.3.30 (Mar 9 2007 05:43:02) $ ^Iroot@windlord :/tmp/bu
    ildd/openldap2.3-2.3.30/debian/build/servers/slapd
    Nov 23 18:10:01 remi3 slapd[2961] : bdb_db_open : Database cannot be opened, err 13. Restore from backup !
    Nov 23 18:10:01 remi3 slapd[2961] : bdb(dc=remi,dc=bf) : DB_ENV->lock_id_free interface requires an environment configured for the locking subsystem
    Nov 23 18:10:01 remi3 slapd[2961] : bdb(dc=remi,dc=bf) : txn_checkpoint interface requires an environment configured for the transaction subsystem
    Nov 23 18:10:01 remi3 slapd[2961] : bdb_db_close : txn_checkpoint failed : Invalid argument (22)
    Nov 23 18:10:01 remi3 slapd[2961] : backend_startup_one : bi_db_open failed ! (13)
    Nov 23 18:10:01 remi3 slapd[2961] : bdb_db_close : alock_close failed
    Nov 23 18:10:01 remi3 slapd[2961] : slapd stopped.
    Nov 23 18:10:01 remi3 slapd[2961] : connections_destroy : nothing to destroy.

    merci je compte beaucoup sur l’aide de tout le monde
    merci d’avance

    > Installation et Utilisation de OpenLDAP sous Debian

    Lors de l’installation du paquet slapd, le domaine à gérer (ex : mondomaine.net) et le mot de passe de l’administrateur sont demandés. Ce dernier est stocké directement dans la base LDAP. Il est possible (mais pas obligatoire) également de stocker le mot de passe dans le fichier « /etc/ldap/slapd.conf ». Pour cela, il faut ajouter les deux lignes suivantes permettant de définir le nom de l’administrateur et le mot de passe :
    rootdn          "cn=admin,dc=mondomaine,dc=net"
    rootpw          monmotdepasse

    Il est possible également de reconfigurer le paquet slapd pour changer le mot de passe :
    dpkg-reconfigure slapd

    Mais dans ce cas, il faut supprimer les lignes "roodn" et rootpw" ci dessus

    > Installation et Utilisation de OpenLDAP sous Debian

    Bonjour. J’ai exactement le même problème. J’ai bien vérifié mes lignes rootdn et rootpw dans le fichier de configuration mais tout semble correcte. J’ai également installé phpldapadmin, j’arrive à me connecter mais en anonymous, pas avec le compte admin. Il semblerait que l’entrée admin dans le serveur LDAP ne contienne pas de champs userPassword. J’ai peut être une piste : je n’ai pas de fichier /etc/ldap/ldap.secret
    Est-ce que ça vient de là ?
    Quelqu’un a une idée ?

    Merci d’avance

    > Installation et Utilisation de OpenLDAP sous Debian

    Ce message indique au mauvais mot de passe. Il faut vérifier les lignes "rootdn" et "rootpw" dans la confiugration

    > Installation et Utilisation de OpenLDAP sous Debian

    salut j ai rencontrer un prb j ai suivie le tuto a la lettre mais lorsque j utilise la commande suivante :
    ldapadd -x -D "cn=admin,dc=mondomaine,dc=com" -w admin -f ModifFiche.ldif
    j ai cette erreur :
    ldap_bind : Invalid credentials (49)
    je suis bloquer et je sait pa qoi faire j ai passer deux journé la dessus sans effet merci de me repondre car je suis a court d idee

    > Installation et Utilisation de OpenLDAP sous Debian

    Tu peux essayer avec ADMT

    > Installation et Utilisation de OpenLDAP sous Debian

    N’ayant jamais utilisé active directory, je n’ai pas d’infos à ce sujet.

    > Installation et Utilisation de OpenLDAP sous Debian

    Bonjour,
    Est ce que vous seriez parvenus à récupérer les mots de passe active directory pour les réinjecter dans openldap ?

    Merci d’avance de votre aide.