Chapter 53. Installation d'un annuaire LDAP et utilisation du langage de commande

Table of Contents

Environnement
Configuration du fichier slapd.conf
Création de l'annuaire
Création de l'annuaire
Enrichissement de l'annuaire
Le langage de commande

Environnement

Relevez l'emplacement des fichiers des configuration et des schémas sur votre machine.

Le fichier ldap.conf et le fichier de configuration des applications clientes.

Le fichier slapd.conf et le fichier de configuration du serveur.

Le service serveur se nomme slapd.

Vérifier l'installation des schémas prédéfinis (généralement dans "/etc/shema" ou dans "/usr/share/openldap/schema/")

Faites une sauvegarde de tous vos fichiers de configuration.

Dans le répertoire "schema", sont référencés des définitions normalisées utilisables avec slapd. Les définitions, et ordre de définitions doivent respecter des règles (héritage des objets).

Notez de quels fichiers héritent les définitions données dans le fichiers inetorgperson.schema

Notez de quelles classes d'objets hérite la classe inetorgperson Identifier les propriétés des classes dont dépend la classe inetorgperson. Notez celles qui sont obligatoires.

Configuration du fichier slapd.conf

Modifier le fichier slapd.conf en adaptant l'exemple ci-dessous :

Include	/usr/share/openldap/schema/cosine.schema
include	/usr/share/openldap/schema/corba.schema 
include	/usr/share/openldap/schema/inetorgperson.schema
include	/usr/share/openldap/schema/java.schema 
include	/usr/share/openldap/schema/krb5-kdc.schema
include /usr/share/openldap/schema/kerberosobject.schema
include	/usr/share/openldap/schema/misc.schema
include	/usr/share/openldap/schema/nis.schema
include	/usr/share/openldap/schema/openldap.schema 
include /usr/share/openldap/schema/autofs.schema
include /usr/share/openldap/schema/samba.schema
include /usr/share/openldap/schema/kolab.schema

# Inclusion des schémas utilisateurs
include	/etc/openldap/schema/local.schema

# Définition des ACLs
include 	/etc/openldap/slapd.access.conf



pidfile		/var/run/ldap/slapd.pid

argsfile	/var/run/ldap/slapd.args

modulepath	/usr/lib/openldap

# Support de TLS, il faut créer un certificat dans /etc/ssl/openldap/ldap.pem
# et décommenter les lignes ci-dessous

#TLSCertificateFile      /etc/ssl/openldap/ldap.pem
#TLSCertificateKeyFile   /etc/ssl/openldap/ldap.pem
#TLSCACertificateFile    /etc/ssl/openldap/ldap.pem

# Journalisation
loglevel 256

###########################################################
# database definitions
###########################################################

database	bdb
suffix		"dc=foo,dc=org"
rootdn		"cn=Manager,dc=foo,dc=org"

# Mot de passe d'accès à la racine de l'arbre.
rootpw		secret
# rootpw	{crypt}ijFYNcSNctBYg

# Emplacement de la base de  la base de données
# The database directory MUST exist prior to running slapd AND 
# should only be accessable by the slapd/tools. Mode 700 recommended.
directory	/var/lib/ldap

# Création des index sur la base 
index	objectClass,uid,uidNumber,gidNumber	eq
index	cn,mail,surname,givenname		eq,subinitial

# Contrôle d'accès aux données
# Basic ACL (deprecated in favour of ACLs in /etc/openldap/slapd.access.conf)
access to attr=userPassword
        by self write
        by anonymous auth
        by dn="cn=Manager,dc=foo,dc=org" write
        by * none

access to *
        by dn="cn=manager,dc=foo,dc=org" write
        by * read


Lancement du serveur

# /etc/init.d/slapd start
Starting OpenLDAP: slapd.

# ps aux | grep slapd
root 17433 0.1 1.6 7780 2144 ?    S 12:54 0:00 /usr/sbin/slapd
root 17434 0.0 1.6 7780 2144 ?    S 12:54 0:00 /usr/sbin/slapd
root 17435 0.0 1.6 7780 2144 ?    S 12:54 0:00 /usr/sbin/slapd
root 17437 0.0 0.5 1716 716 pts/3 R 12:54 0:00 grep slapd

# netstat -natup | grep LISTEN
tcp 0  0 0.0.0.0:389  0.0.0.0:*  LISTEN 17433/slapd
tcp 0  0 0.0.0.0:22   0.0.0.0:*  LISTEN   290/sshd

Le serveur fonctionne bien.

Identifiez à l'aide de la commande netstat, le port sur lequel « écoute » par défaut le service ldap.

Création de l'annuaire

Vous allez utiliser un fichier au format ldif afin de créer l'arbre initial et déclarer l'administrateur. La base de données sera créée dans /var/lib/ldap. En cas d'erreur d'interprétation du fichier ldif, vous devrez relancer la commande. Pour cela :

- arrêtez le serveur ldap,
- supprimez la base de données 
  (pas le répertoire, mais le contenu du répertoire),
- relancez le serveur, puis le script corrigé.
[ #] /etc/init.d/slapd stop
[ #] rm -rf /var/lib/ldap/* 
[ #] /etc/init.d/slapd start

Pour le fichier LDIF, vous pouvez voir ou utiliser les annexes pour l'exemple de fichier LDIF utilisable.

Création de l'annuaire

Créer un fichier "base.ldiff" basé sur celui ci :

dn: dc=foo, dc=org
objectClass: organization
dc: foo
o: foo
telephoneNumber: 05 05 05 05 05
street: cours du General de Gaulle
postalCode: 87000
postalAddress: Limoges
l: Limoges
st: Haute-Vienne

dn: cn=manager, dc=foo, dc=org
objectClass: top
objectClass: person
userPassword: secret
cn: admin
sn: Administrateur

La création de l'annuaire et l'ajout peut se faire, sous le compte root, avec les commandes :

slapadd < leFICHIER.diff 

Vérifiez que le serveur a bien enregistré les premières informations à l'aide la commande "slapcat".

Note : il faut parfois redémarrer le service serveur pour qu'il tienne compte des modifications (ajouts).

Enrichissement de l'annuaire

Récupérez le jeu d'essai et ajoutez les entrées dans l'annuaire.

slapadd < le_FICHIER_LDIFF

Vérifier le résultat à l'aide de la commande slapcat.

Le langage de commande

OpenLDAP fournit un langage et des API pour accéder à la base de données à partir de tous les langages (perl, php, python, c...) mais aussi du shell.

Vous allez utiliser les commandes ldapsearch, ldapadd, ldapmodify

Modifier le fichier ldap.conf de façon à ne pas avoir à préciser à chaque fois les paramètres sur la ligne de commande (machine, et base de l'annuaire)

BASE    dc=foo, dc=org
HOST    127.0.0.1
Ainsi une ligne de commande :
ldapsearch -x -h localhost -b 'dc=foo, dc=org'   'objectclass=person' sn cn
devient 
ldapsearch  -x 'objectclass=person' sn cn

Exemple d'utilisation de la commande ldapsearch

ldapsearch  -x  'objectclass=*' # On veut tous les objets
ldapsearch  -x  'objectclass=person' sn cn # On récupère les cn et sn
ldapsearch -x  'uid=mlx' mail # On veut le mail de la personnes d'uid mlx

Trouver les numéros de téléphone de toutes les personnes.

Donner les caractéristiques de la personne faisant partie de l'ou "user" et ayant pour uid "mlx".

Ajout d'un objet (mode interactif) avec ldapadd.

Il faut créer un fichier au format LDIF pour chaque objet que l'on souhaite ajouter. Voici un exemple :

dn: cn=be good, ou=user, dc=foo,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: posixAccount
cn: be good
sn: Bourg
givenName: good
uid: begood
uidNumber:1010
gidNumber:1010
homedirectory:/home/begood
loginshell:/bin/bash
userpassword:{crypt}2/yajBmqc3tYw
mail: begood@foo.org
telephoneNumber: 00-00-00-00-00
street: none
postalCode: 87400
postaladdress: Chabant
preferredLanguage: fr


Seul un compte ayant le droit d'écrire "write"  peut ajouter des occurrences. Ici vous n'utiliserez ces commandes avec un compte système standard (pas le compte root)

$ ldapadd -x -D "cn=manager,dc=foo,dc=org" -w secret -f  leFICHIER.ldif
ou alors 
$ ldapadd -x -D "cn=manager, dc=foo, dc=org" -W -f le_FICHIER_ldiff

mais vous devrez saisir le mot de passe.