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 :
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 :
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 :
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 :
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 »
Attribut | Description |
---|---|
businessCategory | Activité professionnelle d’une entreprise ou d’une personne |
c | Code du pays en deux lettres (respectant le standard ISO 3166) |
cn | Nom de l’objet (common name) |
description | Description de l’objet |
distinguishedName | Nom distingué (utilisé par d’autres attributs par héritage) |
facsimileTelephoneNumber | Numéro de fax |
givenName | Prénom de la personne |
houseIdentifier | Identifiant d’un batiment |
initials | Initiales d’une personne |
internationalSDNNumber | Numéro ISDN |
l | localité de l’objet (géographique) |
member | Distinguished Name des membres |
name | Nom (utilisé par d’autres attributs par héritage) |
o | Nom de l’organisation |
objectClass | Classe d’objets |
ou | Unité organisationnelle (branche de l’organisation) |
owner | Nom du propriétaire de l’objet |
postalAddress | Adresse postale (sans le code postal) |
postalCode | Code postal |
postalOfficeBox | Boîte aux lettres (postale) |
presentationAddress | Adresse réseau de la présentation de l’objet (généralement une URL vers la présentation en ligne) |
protocolInformation | Attribut complémentaire à presentationAddress pour définir le protocole à utiliser |
registeredAddress | Adresse postale pour des envois de courriers recommandés et de colis |
seeAlso | DN d’objets complémentaires |
serialNumber | Numéro de série de l’objet |
sn | Nom de famille de la personne (surname) |
st | Etat ou région (state) |
streetAddress | Nom de la rue et assimiilé (boulevard, ...) |
telephoneNumber | Numéro de téléphone |
title | Titre de la personne (différent de fonction) |
uid | Identifiant unique de l’objet |
userPassword | Mot de passe de l’utilisateur |
Liste partielle des attributs de la classe « inetOrgPerson »
Nom | Sémantique | Mono | Obl | Lecture | Utilisation |
---|---|---|---|---|---|
cn | nom(s) complet(s) (d’usage) sans accent | O | RI | Ordre : Nom, Prénom. Attention : pas d’accent pour simplifier les recherches. Voir aussi displayName. Exemple : "Bugale Jerome" | |
displayName | nom complet avec accents | Version accentuée de la valeur principale de cn. Exemple : "Bugalé Jérôme" | |||
employeeType | type de personnel | D ? | RI ? | Définir les grandes familles ? | |
facsimileTelephoneNumber | Numéro de fax | RI | Format E 123 (cf Références) | ||
givenName | Prénom | M | D | RI | idem sn. Exemple : "Jérôme" |
l | localité de l’objet (géographique) | ||||
labeledURI | Page personnelle | RI | |||
adresse mel canonique | M | RI ? | |||
mobile | numéro de téléphone mobile | RI | Format E 123 (cf Références) | ||
o | Nom de l’organisation | ||||
ou | Unité organisationnelle (branche de l’organisation) | ||||
postalAddress | Adresse postale | RI | Adresse complète. Attention au format ("$" séparateur, voir RFC2256) | ||
postalCode | Code postal | ||||
preferredLanguage | langue préférée | M | RI | cf RFC2068 | |
sn | Nom | O | RI | Contient 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) | ||||
telephoneNumber | numéro de téléphone fixe | RI | Format E 123 (cf Références) | ||
title | titre | RI | Responsabilité ; président, directeur, ... (cf Harpège ?). Code ou intitulé complet ? | ||
uid | identifiant unique | M | D | R | utilisé comme rdn, contenu indifférent mais aussi court que possible |
userCertificate | certificat 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
Version | Date | Commentaire |
---|---|---|
0.1 | 18/11/04 | Création par Tony GALMICHE |
0.2 | 03/12/04 | MAJ suite à installation serveur Pentium Pro 2000 |
0.3 | 17/12/04 | MAJ suite à présentation atelier Coagul |
0.4 | 15/03/07 | Ajout « Problème rencontré » |
Commentaires
Installation et Utilisation de OpenLDAP sous Debian
si tu veux plus d’info sur l’erreur lance ldap en mode debug comme indiqué dans ton message ;)
# slapd -d 16383
> Installation et Utilisation de OpenLDAP sous Debian
Bonjour, j’ai eu un message d’erreur quand j’ai voulu redémarrer slap.conf, ca concernait le paquet db4.2-util, je l’ai installé mais j’ai un problème avec les paquets suivants :
gforge-db-postgresql
Paquet gforge-db.
Quand j’essaye d’installer le premier paquet, j’ai les erreurs suivantes :
cp : cannot stat `/etc/postgresql/pg_hba.conf’ : No such file or directory
dpkg : erreur de traitement de gforge-db-postgresql (—configure) :
le sous-processus post-installation script a retourné une erreur de sortie d’état 1
dpkg : des problèmes de dépendances empêchent la configuration de gforge-ldap-openldap :
gforge-ldap-openldap dépend de gforge-db-postgresql | gforge-db ; cependant :
Paquet gforge-db-postgresql n’est pas encore configuré.
Paquet gforge-db n’est pas installé.
Paquet gforge-db-postgresql qui fournit gforge-db n’est pas encore configuré.
dpkg : erreur de traitement de gforge-ldap-openldap (—configure) :
problèmes de dépendances - laissé non configuré
Des erreurs ont été rencontrées pendant l’exécution :
gforge-db-postgresql
gforge-ldap-openldap
E : Sub-process /usr/bin/dpkg returned an error code (1).
Est-ce que quelqu’un peut m’aider ?
Merci d’avance !
Installation et Utilisation de OpenLDAP sous Debian
c’est normal il faut taper non pas "admin"
mais toute la ligne comme
cn=admin,dc=example,dc=com
et la ca marchera ;-)
Installation et Utilisation de OpenLDAP sous Debian
J’ai un problème lorsque je veux demarrer les serveur ldap il me met
"Starting OpenLDAP : running BDB recovery, slapd - failed.
The operation failed but no output was produced. For hints on what went
wrong please refer to the system’s logfiles (e.g. /var/log/syslog) or
try running the daemon in Debug mode like via "slapd -d 16383" (warning :
this will create copious output).
"
je ne comprend pas ce que cela veut dire, merci
Installation et Utilisation de OpenLDAP sous Debian
Bonjour,
J’ai bien suivi le tuto à la lettre, mais j’ai toujours un problème avec admin. Je n’arrive pas à me connecter à mon annu avec admin. J’ai essayé avec phpLDAPAdmin et Luma, mais j’ai pas accès. Pourtant l’anonymous marche bien :P
Voici l’erreur phpLDAPAdmin
Could not bind to the LDAP server.
LDAP said : Undefined attribute type
Error number : 0x11 (LDAP_UNDEFINED_TYPE)
Description : The attribute type specified is invalid.
Merci
Installation et Utilisation de OpenLDAP sous Debian
j’ai un grave problème lorsque je desarchive mon fichier tar et que je l’installe dans /usr/local/src/ il ne me génère aucun fichier de configuration je suis obligé de le faire en mode graphique et de plus le serveur ne se trouve pas dans /etc/init.d/ et les fichiers qu’ils me génére ne sont pas complets et il manque même le ldap.conf
comment je fais c’est mon sujet de memoire et je soutiens dessus dans un mois
> Installation et Utilisation de OpenLDAP sous Ubuntu
salut moi je suis novice et g installé ldap sur debian. j’ai plein de question qui prouve que je suis débutant :
Une fois mon fichier slapd.con édité comme dans le tuto je quitte mon editeur vim pour ajouter une entré en ligne de commande ou cherche (#ldapsearch ) g comme réponse "commande not found".
Faut-il lancer mon ldap (comment) ?
Quel DIT dervai-je avoir si mon entrepirse (toto.fr), veut permette à ses client de créer des comptes, d’héberger des noms de nomaines, de créer des adresses emails ? un peu comme Free.
Merci d’avance
> Installation et Utilisation de OpenLDAP sous Debian
essaye d’installer ce paquet : db4.2-util
> Installation et Utilisation de OpenLDAP sous Debian
essaye : apt-get install db4.2-util
> Installation et Utilisation de OpenLDAP sous Ubuntu
Merci pour ce tuto. J’ai pu installer mon premier serveur ldap sur ubuntu avec votre aide :
Dans Synaptic choisir libldap, ldap-utils et slapd.
Editer les fichiers de conf
/etc/ldap/slapd.conf
et
/etc/ldap/ldap.conf
Juste un commentaire sur le fait que ce serait plus lisible si tous les exemples utilisaient un même système de nommage personalisé. Ainsi pour créer la racine, il faut répéter le dc :
AjoutRacine.ldif
dn : dc=humaniste,dc=info
objectClass : dcObject
objectClass : organization
o : Mouvement révolutionnaire
dc : humaniste