openldap
14 Novembre 2001
prolland

LDAP est l'acronyme de Lightweight Directory Access Protocol, c'est à dire Protocole Léger d'Accès aux Dossiers. C'est
un protocole utilisé pour accéder à des "serveurs de dossiers", des serveurs qui gèrent les informations de manière
hiérarchique.
Le concept est similaire à la structure de votre disque dur, hormis le fait que la racine s'appelle ici : "The world" (le monde),
et que les dossiers du premier niveau sont assimilés à des pays. Les niveaux inférieurs de la structure contiennent des
entrées de sociétés, d'organisations ou de lieux tandis que les niveaux encore inférieurs sont des gens, voire des
équipements ou des documents.
Pour accéder à un fichier sur votre disque, vous devez utiliser la syntaxe suivante : /usr/local/myapp/docs

Le slash indique une division de la référence, et la séquence est lue de gauche à droite.
Avec tous les détails, une référence LDAP s'appelle un "nom distingué" ("distinguished name"), appelé aussi "nd" ("dn"
en anglais). Par exemple : cn=Jean Dupont,ou=Comptes,o=Ma Société,c=Fr

La virgule marque une division de la référénce, et la séquence est lue de droite à gauche. Vous pouvez la lire comme
ceci :

country = Fr
organization = Ma Société
organizationalUnit = Comptes
commonName = Jean Dupont

De la même façon qu'il n'y a pas de règle universelle d'organisation d'un disque dur, un serveur de dossier peut
supporter n'importe quelle structure du moment qu'elle a un sens pour ce qu'on en fait. Cependant, il existe quelques
conventions : il est impossible d'écrire un code d'accès à un dossier sans en connaître sa structure, de la même façon que
vous ne pouvez pas utiliser une base de données sans en connaître les tables.

Démarrer, insérer une base LDAP

Notes:

Sur openldap 2.0.18 dans /usr/local/etc/openldap/slapd.conf par défaut il y a un seul include celui de /usr/local/etc/openldap/schema/core.schema.default. Dans ce fichier il y a :

Pour avoir l'attribut mail il faut faire hériter un dn de la classe inetOrgPerson. Cette classe contient l'attribut mail. Mais cette classe n'est pas définit dans le fichier core.shema. Il y a 2 solutions:

Sur cet exemple on voit que sur une classe existante ou pas (ie que l'on crČe attention au numéro) on peut ajouter ajouter les attributs que l'on veut, (ie on peut en crČer attention au numéro).

qmail et openldap : Il existe un patch voir http://www.nrg4u.com/(doc local)

Cours :

Astuces:

Attention à faire coincider la version des librairies ldap (apache/php et le serveur openldap)

Télécharger openldap en tar gz sur www.openldap.org

A lire, Installation, démarage, arrêt, insertion et admin : http://www.openldap.org/doc/admin/ [Run et Stop slapd]

Php-ldap : http://www.php.net, et http://www.php.net/manual/fr/ref.ldap.php

Installation: En suivant la doc http://www.openldap.org/doc/admin/quickstart.html (local)il n'y a aucun probleme.

  1. tar -xvzf openldap*
  2. ./configure --prefix=/usr/local
  3. make depend
  4. make
  5. make test
  6. make install

un repertoire etc, libexec et bin est crée dans /usr/local contenant des fichier de conf et des binaires.

faire le fichier de configuration de slapd.conf

lancer le process /usr/local/libexec/slapd -f /usr/local/etc/openldap/slapd.conf

puis faire une insertion d'un fichier ldif comme celui-ci final1b.ldif avec la commande

ldap -f ./finalb1.ldif -x -D "cn=Manager, o=SEPRO Robotique, c=Fr" -w secret

 

Lire, Ecrire dans une base LDAP

Avec un browser, netscape par exemple, aller dans adresse book, ajouter un server ldap, placer le monde SEPRO Robotique, puis chercher je. C'est ok ?

Avec une interface quelconque java , perl ou php les data y sont.... connect.php

Pour insérer de manière automayique par scripts. par exemple par php: j'utilise le script suivant : write.php

ATTENTION j'ai eu 2 problèmes:

  1. l'attribut mail n'est pas permis avec la base courante slapd.conf
  2. à partir d'un couple serveur phpapache avec des librairies ldap1.3 attaquer un serveur openldap 2.0 coince en ecriture...

Exemple de base ldif de 300 personnes : exportPure.ldif.

Pour la seconde solution d'incrémentation de la base ldap, ie via un script ou une appli.Conseil: lire la doc ci-dessus, elle est sans aucun probleme.

Pour lire, ecrire dans une base ldap, il existe un client ldap ldap broser editor : http://www.iit.edu/~gawojar/ldap/ en java. Il require un Java 1.2. or greater. Une fois installer fixer la variable JAVA_HOME:

Pour la configuration de ce ldap browser, en lecture juste preciser le host :ip et le monde o=SEPRO Robotique et c=Fr

Pour l'écriture, retirer l'anonymous bind et placer le user dn (ie rootdn de openldap): cn=Manager, dc=SEPRO Robotique, dc=Fr et passwd = secret (si pas changer depuis l'install...)

 

Administration

http://www.openldap.org/doc/admin/ (local)

http://www.enderunix.org/qldapadmin/

Un document pour FAI: http://www.linuxfocus.org/Francais/September2000/article173.shtml

Autres

   o=ispman
   objectclass=top
   objectclass=organisation
   o=ispman

   domain=developer.ch, o=ispman
   domain=developer.ch
   objectclass=top
   objectclass=dnsdomain
   objectclass=posixAccount
   uid: developer.ch
   uidNumber: 2000
   gidNumber: 1000
   homeDirectory: /home/developer.ch
   userPassword: {crypt}XXffGGHH
   loginShell: /bin/bash
   ou=users, domain=developer.ch, o=ispman
   domain=developer.ch

   ou=users
   objectclass=top
   objectclass=domainusers

   ou=dnsdata, domain=developer.ch, o=ispman
   domain=developer.ch
   ou=dnsdata
   objectclass=top
   objectclass=domainrelatedobject

   ou=httpdata, domain=developer.ch, o=ispman
   ou=httpdata
   objectclass=top
   objectclass=httpdata
   serverroot=/home/httpd/virtual/developer.ch


Ici, nous avons défini une branche du domaine "developer.ch", cette branche possède des sous-branches pour les utilisateurs, les données DNS et les données http.
Dans cet exemple, nous avons défini les uid, gid, répertoire home, etc pour le domaine, puisque nous voulons que seul l'utilisateur "domain.tld" accède via ftp.
Par exemple, si la cliente qui détient developer.ch veut charger des fichiers dans son répertoire, elle devra se loger en tant qu'utilisateur "developer.ch" avec le mot de passe
approprié pour se loger sur le serveur ftp qui en principe permettra de passer root sur le répertoire home.. etc .. etc.. nous y reviendrons.
Pour les autres utilisateurs, nous n'attribuons pas d'uid, gid, etc puisque nous ne voulons pas qu'ils se logent via ftp.
Vous trouverez un fichier exemple LDIF complet ici (ce fichier est peut-être périmé puisqu'il vient d'une machine de service, et que j'ai ajouté des fonctionnalités dans la
nouvelle version) ou bien, utilisez ce lien si vous voulez le montrer à votre patron (un peu périmé lui aussi...NDT: non pas le patron!)