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
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 |
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 :
- la déclaration de chaque objet (ie class) de l'annuaire LDAP (déclaration anciennement dans slapd.oc.conf.): exemple la class person
- la syntaxe de chaque attribut composant les objets (déclaration anciennement dans slapd.at.conf.) : exemple l'attribut mail
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:
- Ajouter le fichier inetorgperson.schema dans slapd.conf par un include
- Modifier à la main le core.schema de manière à insérer dans une des classes existantes (exemple person) l'attribut mail. Comme dans le fichier suivant : /usr/local/etc/openldap/schema/core.schema
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 :
- http://www.alcove-labs.org/fr/documents/install_mail/comment_installer_un_serveur_multidomaine_avec_ldap.php3
- Configuration : http://www.commentcamarche.net/ldap/ldapconf.php3 (local)
- Construction et consultation : http://www.commentcamarche.net/ldap/ldapcons.php3 (local)
- http://www-sop.inria.fr/semir/personnel/Laurent.Mirtain/ldap-livre.html (local)
Astuces:
- Pour saisir plusieurs personnes dans le même fichier personne.txt, il suffit de séparer chaque définition par une ligne blanche.
- Pour réinitialiser complètement l'annuaire, il faut tout d'abord détruire la base existante puis relancer le serveur après avoir porté les modifications dans les fichiers de
configuration. Pour détruire l'ancienne base, il suffit de vider le répertoire /var/lib/ldap par la commande :
rm -fr /var/lib/ldap/*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.
- tar -xvzf openldap*
- ./configure --prefix=/usr/local
- make depend
- make
- make test
- 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
- avec son domaine o=SEPRO Robotique et c=Fr
- la description de son accés root (login et passwd) (cn=root, o=My Company, c=US", "secret") ou (cn=Manager, o=My Company, c=US "secret")
- et rajouter les lignes suivantes :
- include /usr/local/etc/openldap/schema/cosine.schema
- include /usr/local/etc/openldap/schema/inetorgperson.schema
- On rajoute inteorgperson car c'est d ans cette classe que son définit les attribus mail, uid, labeleduri, etc.
- Voir à ce sujet RFC2256 http://www.ietf.org/rfc/rfc2256.txt, et http://www-sop.inria.fr/semir/personnel/Laurent.Mirtain/ldap-livre.html
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
- Pour arreter la base kill -INT 'cat /usr/local/var/slapd.pid'
- Pour lancer la base /usr/local/libexec/slapd -f /usr/local/etc/openldap/slapd.conf
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:
- l'attribut mail n'est pas permis avec la base courante slapd.conf
- à 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:
- Lire le fichier lbe.sh, on voit la necessité de fixer la variable JAVA_HOME sur le binaire java.
- find / -name java -print
- export JAVA_HOME=/var/jdk1.3.0_02/jre
- echo $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.chou=users objectclass=top objectclass=domainusersou=dnsdata, domain=developer.ch, o=ispman domain=developer.ch ou=dnsdata objectclass=top objectclass=domainrelatedobjectou=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!)