Installation d’OpenLDAP sous Ubuntu 9.10 ou 10.4

Note

Suite a de nombreuses frustration de votre part et de la mienne au sujet de OpenLDAP. OpenLDAP “is a pain in the a..”. Pour mon infrastructure j’ai migré vers OpenDS; necessite un peu plus de ressource (Java) par contre, la gestion et la syncronisation est un charme. Je vais publier bientôt des tutoriel au sujet de OpenDS.

Description

La configuration d’OpenLDAP c’est un peu compliquer. cn=config est toujours utilisé, par contre lors de l’installation du paquet, uniquement un squelette de la configuration est installé.

On ne vous demande plus de mot de passe lors de l’installation du paquet et “dpkg-reconfigure slapd” ne fait que restaurer le squelette de la configuration initial.  Vous devez utiliser le compte root (ou sudo) pour configurer la base de donnée, dn et acl.

Voici une procédure sur comment installer OpenLDAP sous Ubuntu 9.10 ou 10.4.

Le guide officiel sur help.ubuntu.com n’est pas à jour et ne spécifie pas comment installer OpenLDAP sous Karmic ou Lucid.

Dans ce tutoriel nous utiliserons dc=example,dc=com comme arbre LDAP.  Ajuster en conséquence.

Pré-requis

Avoir installé Ubuntu

Paquets à installer :

 apt-get -y install slapd ldap-utils

Configuration

Étape 1: Changer de répertoire pour /etc/ldap :

cd /etc/ldap

Étape 2: Ajouter les schéma que vous avez de besoin, car uniquement le schema core est ajouté par défaut :

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif

Note: Il faut entrer CHAQUE LIGNE, ce ne sont pas des commentaires.

Étape 3:  Ajouter le module de base de donnée et la créer.

Créer un fichier : db.ldif

vi db.ldif

et ajouter le text suivant :

# Load dynamic backend modules
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: {0}back_hdb
 
# Create the database
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: example
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq

ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif

Prendre note que olcRootPW: example spécifie le mot de passe. Remplacer example par le mot de passe désiré.

Étape 4: Créer le dn de base et ajouter le compte administrateur pour le serveur OpenLDAP.

Modifer le text suivant a vos besoins the text below to your needs and wants and generate a password for the admin account. La chaine MD5 présente dans l’exemple représente : example

Créer un mot de passe encrypter pour le compte administrateur, avec la commande suivante :

slappasswd -h

Entrer le mot de passe désiré 2 fois et copier le résultat dans le text plus bas.

Créer le fichier base.ldif:

vi base.ldif

Contenu du fichier base.ldif:

dn: dc=example,dc=com
objectClass: dcObject
objectclass: organization
o: example.com
dc: example
description: My LDAP Root
 
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword:{MD5}Gnmk1g3mcY6OWzJuM4rlMw==
description: LDAP administrator

Ajouter à la base de donnée avec la commande suivante :

ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif

Étape 5: Modifier le système d’acl (liste de contrôle d’accès)

Il y a quelques acl dans la configuration d’OpenLDAP qui prévient la connexion à partir d’un client ldap comme phpldapadmin ou Apache Directory Sudio, alors nous allons ajuster les droits pour cn=admin,cn=config. Après cette modification l’option -D cn=admin,cn=config sera nécessaire pour ce connecter au serveur LDAP.

Créer un fichier config.ldif

vi config.ldif

Contenu du fichier config.ldif:

dn: cn=config
changetype: modify
delete: olcAuthzRegexp
 
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcAccess
 
dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcRootDN
 
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=admin,cn=config
 
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {MD5}Gnmk1g3mcY6OWzJuM4rlMw==
 
dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess

Prendre note de ne pas oublier de changer la valeur de olcRootPW par le mot de passe en MD5 créé plutôt.

Intégrer dans OpenLDAP :

ldapadd -Y EXTERNAL -H ldapi:/// -f config.ldif

Étape 6: Ajuster les acl du LDAP

Maintenant nous devons ajouter quelques droits au LDAP, root possède les droits de lecture et d’écriture, parcontre l’acl suivant représente celui qui à toujours été livré avec OpenLDAP dans le passé.

Créer un fichier nommé acl.ldif :

vi acl.ldif

Contenu du fichier acl.ldif:

dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * readNow load the acl into the openldap server:

ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif

Voilà!  Un OpenLDAP fonctionnel.

Références

32 thoughts on “Installation d’OpenLDAP sous Ubuntu 9.10 ou 10.4

  1. Bonjour,
    Je viens de découvrir ce tutoriel et je suis arrivé à la même chose.
    J’ai juste une question, j’ai créé des utilisateurs et des groupes.
    Je souhaiterais forcer le changement de mot de passe à l’utilisateur lors de sa première connexion.
    Nous devons faire appel à ppolicy.schema.
    J’ai tenté de créer le fichier suivant :

    olcDatabase: {1}hdb
    olcSuffix: dc=local,dc=lan

    overlay ppolicy
    ppolicy_default “cn=default,dc=example,dc=com”

    dn: ou=policies,dc=example,dc=com
    objectClass: organizationalUnit
    objectClass: top
    ou: policies

    dn: cn=default,ou=policies,dc=example,dc=com
    cn: default
    objectClass: pwdPolicy
    objectClass: Person
    objectClass: top
    pwdAllowUserChange: TRUE
    pwdAttribute: 2.5.4.35
    pwdMustchange: TRUE

    Mais ce fichier est non fonctionnel.
    Je n’arrive pas à arriver à ce que je veux, j’ai une erreur sur les lignes
    overlay ppolicy
    ppolicy_default “cn=default,dc=example,dc=com”
    que je n’arrive pas à implémenter.
    Auriez-vous une idée?
    Merci.

  2. hello,

    Merci, vraiment pratique.
    juste une remarque, il y à une erreur de copier/coller à la fin des fichiers db.ldif et config.ldif avec un bout en trop …

  3. Malheureursement pas pour l’instant. Mais je doit configurer c’est configuration bientôt. Je vais vous tenir au courrant.

  4. Super cool ton tuto. ça marche à merveille. Il ya un truc qui me derange pourquoi l’on t’il rendu aussi compliquer ? Dans es anciennes versions comme sous debian 4.0 ubuntu 8 il suffisait que qq ligne et le serveur est debout.

    Merci

    Liquideshark.

  5. Merci, OpenLDAP a integré les config avec “cn=config” pour permettre la modification en temps réel des configurations, sans avoir à redémarrer le service. Ubuntu a intégré ce mode de configuration avec 9.10 (a mon souvenir), mais la version qui venais de Ubuntu ne fonctionnait pas et était non documenter. Je suis d’accord que c’est plus complexe, mais on fini par s’habituer.

  6. Salut et merci pour tes reponses. j’ai un petit souci c’est que j’ai essayer d’ajouter : core.ldif
    root@ldapserver:/home/jamal# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/core.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry “cn=core,cn=schema,cn=config”
    ldap_add: Insufficient access (50)

    Il ne me donne pas l’autharisation. Ta pas une idée ?

    Merci

  7. Bonjour,
    J’ai suivi votre tuto et j’ai une erreur
    Lorsque je lance le config.ldiff, j’obtiens :

    ldap_modify: No such attribute (16)
    additional info: modify/delete: olcAuthzRegexp: no such attribute
    Test fait sur ubuntu 10.04
    Dans votre tuto, vous n’expliquez pas comment repartir sur une config neuve.

  8. Ce tutoriel explique comment faire la configuration a partir d’un système vierge. L’idée de réinitialiser un serveur peut être le sujet d’un autre tutoriel.

  9. j’ai suivi votre tuto à la lettre sauf pour le mot de passe biensur ^^
    mais j’obtien deux erreurs

    Étape 5: Modifier le système d’acl (liste de contrôle d’accès)

    modifying entry “cn=config”
    ldap_modify: No such attribute (16)
    additional info: modify/delete: olcAuthzRegexp: no such attribute
    Étape 6: Ajuster les acl du LDAP

    root@Hasnae-laptop:/etc/ldap# ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif
    Enter LDAP Password:
    ldap_bind: Invalid credentials (49)

    j’étais ds le 9.10 et j’ai upgdr en 10.04

    mais tjrs les memes erreurs

    je desinstal et je réinstall ldap en vin si ya une commande qui réinitializ tt
    je vous serai reconnaissante si vs m’en faites part

    Ps j’utilise

    apt-get remove –purge ldap slapd-utils

    mercii d’avance , je galère ça fé une semaine et j’ai un mini netbook je boot sur clé ni debian ni ubuntu 8.04 ne marche s

  10. J’ai la meme erreur que mike:
    Lorsque je lance le config.ldiff, j’obtiens :

    ldap_modify: No such attribute (16)
    additional info: modify/delete: olcAuthzRegexp: no such attribute
    Test fait sur ubuntu 10.04

  11. Merci pour ce tuto, mais je bloque également (précision, je suis un linuxien débutant (c, et sous ubuntu 10.4).

    Déjà, je tombe sur la même erreur que Mike.

    Mais surtout, arrivé à la ligne :
    ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif

    J’ai inéxorablement droit au :
    ldap_bind: Invalid credentials (49)

    J’avais d’abord fait une install avec mon nom de domaine, mon mot de passe personnalisé (essai en clair, puis modification des fichiers pour le mettre en crypté) … et puis j’ai essayé en copiant directement les textes depuis ce tuto, sans rien changer.

    J’ai également utilisé le script de Keith Smith (dans les commentaires sur le lien howtoforge.com) … et exactement le même résultat. De même avec d’autres tutos approchant … vous avez une idée ?

  12. Bonjour,
    j’ai suivi le tuto jusqu’au niveau de la commande:”ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif”. j’ai cette erreur suivante:(SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry “dc=example,dc=com”
    ldap_add: Server is unwilling to perform (53)
    additional info: no global superior knowledge).
    Que faire svp, je suis coincé.
    merci

  13. bonjour tout le monde
    je suis un tout petit débutant dans le domaine de UBUNTU et j’aimerai bien savoir quelles sont les modif à prevoir pour un nom du domaine different que exemple .com ?
    Merci d’avance pour votre attention et votre aide

  14. Bonjour,

    comme mike suivi le tuto mais arrivé à l’étape 5 ca bug

    voila le log :

    /etc/ldap# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/config.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry “cn=config”
    ldap_modify: No such attribute (16)
    additional info: modify/delete: olcAuthzRegexp: no such attribut

    donc si quelqu’un connais la solution je suis preneur

    Merci d’avance pour votre aide

  15. pour l’étape 5 j’ai réussi en modifiant directement les fichier dans sldap.d

    maintenant il me reste la gestion des droit qui ne passe pas

    ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif
    Enter LDAP Password:
    modifying entry “olcDatabase={1}hdb,cn=config”
    ldap_modify: Other (e.g., implementation specific) error (80)
    additional info: handler exited with 1

    si vous avez des idées :)

  16. root@serverldap:/etc/ldap# ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif
    Enter LDAP Password:
    ldap
    bind: Invalid credentials (49)

    une idée?
    merci :)

  17. bjr,
    je suis débutant en openldap et j’ai un travail a rendre dans trois jours. une sorte d’un programme en perl qui interoge un annuaire ldap.
    j’ai suivé ces étapes pour crée un serveur ldpa et l’étape 5 : il m affiche ça
    root@fahem:/etc/ldap# ldapadd -Y EXTERNAL -H ldapi:/// -f config.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    ldapadd: invalid format (line 13) entry: “cn=config”
    ldapadd: wrong attributeType at line 4, entry “cn=config”

    ça vient d’ou svp

  18. voila mon fichier config.ldif

    dn: cn=config
    changetype: modify
    delete: olcAuthzRegexp

    dn: olcDatabase={-1}frontend,cn=config
    changetype: modify
    delete: olcAccess

    dn: olcDatabase={0}config,cn=config
    changetype: modify
    delete: olcRootDN

    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcRootDN
    olcRootPW::{SSHA}HWhjXI9VzWCeLCUI07Lr2ienC++4yiVa
    dn: olcDatabase={0}config,cn=config
    changetype: modify
    delete: olcAccess

  19. Bonjour,
    merci pour ce tuto assez pratique …
    j’ai juste un soucis avec la création du fichier db.ldif j’obtient l’erreur suivante :

    adding new entry “cn=module{0},cn=config”
    ldap_add: Invalid syntax (21)
    additional info: objectClass: value #2 invalid per syntax

    je n’ai aucune idée sur la cause puis-je avoir une soulution svp

  20. Merci,

    Pour répondre a ta question, je crois que le changement est pour permettre des modifications en “live” sans redémarrer le serveur OpenLDAP.

  21. Bonjour,

    J’ai suivi votre tuto tout a très bien marché jusqu’à la dernière commande :
    “ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif”
    qui me ressort l’erreur suivante :
    ldap_bind: Invalid credentials (49)
    Je ne comprend pas d’où peut venir mon erreur.
    Y a-t’il quelque chose d’autre à modifier ?

    Merci de votre aide

  22. bnjour;

    j’ai un problem; quelqu’un me aidé svp;

    lors que j’ai fai la commande: ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif

    j’ai reçu un erreur :

    ldapadd: attributeDescription “dn”: (possible missing newline after line 7, entry “cn=module{0},cn=config”?)
    adding new entry “cn=module{0},cn=config”
    ldap_add: Invalid syntax (21)
    additional info: objectClass: value #2 invalid per syntax

    merci d’avance .

  23. Bonjour,
    je rencontre des problèmes durant l’installation, j’ai des erreurs à chaque fois que je rentre une ligne de type ldapadd -Y EXTERNAL -H ldapi:/// -f *.ldif : ldap_add: Undefined attribute type (17)
    additional info: dn: attribute type undefined

    Je ne sais pas d’où ça vient et j’ai une erreur sur la dernière commande après la demande du mot de passe il m’affiche : ldap_bind: Invalid credentials (49)

    merci de d’avance de vos réponse

  24. bonjour tout le monde
    le tuto ca marche bien mé just j’ai rencontré un probleme lorsque j’execute la commande suivante

      ldapadd -Y EXTERNAL -H ldapi:/// -f config.ldif
    

    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    ldapadd: wrong attributeType at line 7, entry “olcDatabase={-1}frontend,cn=config”

    et je ne sais pa d’ou vient cette erreur merci d’avance

  25. bonjour, openldap marche correctement avec aprés un grand effort, j’utilise phpldapadmin pour le manipuler :)

  26. Salut,

    Tout d’abord merci à estheban pour cet excellent tuto. Ca permet d’avoir une bonne base mais j’ai aussi rencontré comme on peut voir sur la plupart des commentaires.

    Je donne les petites astuces qui m’ont permis de trouver les solutions à mes problèmes:
    - sur la partie du mot de passe (slappasswd -h) il faut taper sous console :
    slappasswd -h "{MD5}"
    les guillemets sont importants sinon elles sont interprétés par le shell.
    - pour ceux qui ont des erreurs du genre :
    ldapadd: Invalid syntax (21)
    additional info: objectClass: value #2 invalid per syntax

    Regardez bien votre fichier ldif, il doit avoir un espace en trop en fin de ligne (souvent sur les lignes vides, ça arrive avec les copier-coller).
    - pour ceux qui ont des erreurs du genre :
    ldapmodify: No such attribute (16)
    additional info: modify/delete: olcAuthzRegexp: no such attribute

    Dans cet exemple il ne trouve pas l’attribut ‘olcAuthzRegexp’ dans sa base, donc il ne peut pas le supprimer. Il suffit donc de modifier dans le fichier ldif et de commenter la ligne ‘delete: olcAuthzRegexp’ et de relancer la commande. Répétez l’opération si nécessaire.
    Bonne chance !

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">