Vous êtes sur la page 1sur 16

Administration Linux Avancée

M. Jean DIOKH

Séquence 4 : Service d’annuaire


Table des matières
1 Les concepts de LDAP ...................................................................................................................... 3
1.1 Les annuaires ........................................................................................................................... 3
1.2 Structure d’un annuaire .......................................................................................................... 3
1.3 Schéma .................................................................................................................................... 3
1.4 Le protocole LDAP ................................................................................................................... 4
1.5 Le format LDIF ......................................................................................................................... 4
2 Mise en œuvre d’un annuaire avec OpenLDAP............................................................................... 5
1.6 Installation ............................................................................................................................... 5
1.7 Gestion du service ................................................................................................................... 5
1.8 Configuration ........................................................................................................................... 5
3 Outils en ligne de commande LDAP ................................................................................................ 7
3.1 Ajout de la racine......................................................................................................................... 7
3.2 Ajout d’unité organisationnelle ................................................................................................... 8
3.3 Ajout du groupe telecom............................................................................................................. 8
3.4 Ajout d’un l'utilisateur ................................................................................................................. 9
3.5 Recherche dans l'annuaire ........................................................................................................ 10
3.6 Les filtres ................................................................................................................................... 11
3.7 Modification d'une entrée avec la commande LDAPMODIFY ................................................... 12
3.8 Suppression d'un élément de l'annuaire avec la commande LDADELETE ................................ 14
4 Client WEB : phpldapadmin........................................................................................................... 16
1 Les concepts de LDAP

1.1 Les annuaires

LDAP (Lightweight Directory Access Protocol) est un protocole d'accès à un annuaire.

Un annuaire électronique est une base de donnée spécialisée, dont la fonction première est de
retourner un ou plusieurs attributs d'un objet grâce à des fonctions de recherche multicritères.

Contrairement à un SGBD, un annuaire est très performant en lecture mais l'est beaucoup moins en
écriture. Sa fonction peut être de servir d'entrepôt pour centraliser des informations et les rendre
disponibles, via le réseau à des applications, des systèmes d'exploitation ou des utilisateurs.

Lightweight Directory Access Protocol (LDAP) est né de la nécessaire adaptation du protocole DAP
(protocole d'accès au service d'annuaire X500 de l'OSI) à l'environnement TCP/IP. Initialement frontal
d'accès à des annuaires X500, LDAP est devenu en 1995, un annuaire natif (standalone LDAP)

1.2 Structure d’un annuaire

Les différents annuaires sont référencés par un système de nommage hiérarchique. Un annuaire est
structuré par une arborescence hiérarchique appelé le Directory Information Tree (DIT). Il est composé
d’entrées, eux même composés de classe d'objets possédant des attributs contenants les données.
L'organisation des classes d'objet est définit par un schéma.

1.3 Schéma

Le schéma représente la définition des classes d'objet, de leur dépendances, de leur attributs, la
syntaxe autorisé pour ces attributs, ainsi qu'une caractérisation de ces données pour faciliter les
opérations de recherche (chiffre, lettre, sensible à la casse, données binaires, etc ...)

Le schéma peut être défini à part dans un fichier texte ou dans l'annuaire lui-même dans les versions
récentes.
1.4 Le protocole LDAP

La norme X500 ne prévoyant pas à l’origine de protocole d’interrogation des annuaires, une
proposition de protocole a été faite en 1993 par l’université du Michigan pour un créer un protocole
qui, fonctionnant sur TCP/IP, assurerait des requêtes simples à un annuaire X500 : c’était la naissance
de LDAP (Leightweight Directory Access Protocol). Les annuaires X500 en place durent donc
implémenter une couche serveur pour le protocole LDAP afin de pouvoir répondre aux requêtes des
clients exploitant ce nouveau protocole.

Rapidement, le succès du protocole LDAP fut tel qu’on oublia le rôle fondateur de X500 pour ne plus
parler que d’annuaires LDAP. Et on parle aujourd’hui d’annuaire LDAP pour tout annuaire capable de
répondre à des requêtes LDAP. Les éléments de structure et de dénominations X500 ont néanmoins
perduré et on parle toujours d’objets, de conteneurs et de schéma.

1.5 Le format LDIF

LDIF (LDAP Data Interchange Format - Format d’échange des données LDAP) a pour objet de
permettre l’exportation ou l’importation des données depuis ou vers un annuaire LDAP. LDIF décrit un
format de fichier texte qui contient tout ou partie des données d’un annuaire LDAP. On peut y
mentionner l’intégralité des objets et de leurs attributs, ou seulement une sélection. Le format LDIF
est employé par de nombreux utilitaires LDAP.

Format type d’une entrée de fichier LDIF

dn: nom_distinctif

attribut1: valeur1

attribut2: valeur2

...

attributn: valeurn

Il est tentant de considérer LDIF comme un format privilégié pour échanger des données d’un annuaire
vers un autre, en cas de migration ou d’échanges de données. En fait, les fichiers LDIF décrivent les
objets d’un annuaire conformément à son schéma, et il est bien rare que deux annuaires différents
présentent rigoureusement le même schéma. Pour ces raisons, le format LDIF n’est en général utilisé
que pour manipuler les données d’un même annuaire, dans le cas d’une sauvegarde par exemple. Les
solutions de méta-annuaires qui permettent ce type de synchronisation exploitent généralement un
format plus ouvert comme le format XML.
2 Mise en œuvre d’un annuaire avec OpenLDAP

OpenLDAP est l’implémentation de serveur LDAP open source la plus courante sur les systèmes Linux.
Si elle manque cruellement de convivialité par rapport à ses équivalents commerciaux, elle n’en est
pas moins répandue dans toutes sortes d’implémentation qui vont de la centralisation de
l’authentification à la gestion de comptes et carnets d’adresses pour les messageries.

1.6 Installation

Sous ubuntu : apt-get install slapd

1.7 Gestion du service

Le service openldap est géré par un script normalisé dans le répertoire /etc/init.d. Son nom est
variable et dépend de la distribution. L’ambiguïté vient du fait que le protocole applicatif est LDAP,
alors que le nom de l’exécutable est slapd et le nom du produit applicatif openldap.

1.8 Configuration

 Modification des valeurs du suffixe

On se déplace dans de le dossier /etc/openldap et on fait appel à la commande sed, l’éditeur de flux.

sed -i s/"dc=my-domain,dc=com"/"dc=test,dc=sn"/ slapd.conf

 Génération d'un mot de passe crypter pour le compte de l’administrateur

[root@srv-diokh openldap]# slappasswd

New password:

Re-enter new password:

{SSHA}HAGynLYDPwej3WD41BfUcI0xP6jJvrzC

[root@srv-diokh openldap]#

Le mot de passe générer va être la valeur du paramètre rootpw.

Editer le fichier slapd.conf et mettre à jour les informations.

NB : dans le fichier slapd.conf, une ligne commençant par un espace est la continuité de la ligne
précédente.
rootdn "cn=Manager,dc=test,dc=sn"

rootpw {SSHA}HAGynLYDPwej3WD41BfUcI0xP6jJvrzC

access to *

by dn.exact="cn=Manager,dc=test,dc=sn" read

by * none

 Configuration du client LDAP

Dans le fichier de configuration du client: /etc/openldap/ldap.conf

URI ldap://192.168.1.20/

BASE dc=test,dc=sn
3 Outils en ligne de commande LDAP

3.1 Ajout de la racine

 Le fichier ldif de la racine:

dn: dc=test,dc=sn
objectclass: organization
objectclass: dcObject
o: test
dc: test

[root@srv-diokh openldap]# ldapadd -x -D "cn=Manager,dc=test,dc=sn" -W -f racine.ldif


Enter LDAP Password:
adding new entry "dc=test,dc=sn"
[root@srv-diokh openldap]#

 Requête simple:

[root@srv-diokh openldap]# ldapsearch -x


# extended LDIF
#
# LDAPv3
# base <dc=test,dc=sn> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# test.sn
dn: dc=test,dc=sn
objectClass: organization
objectClass: dcObject
o: test
dc: test

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@srv-diokh openldap]#
 Requête simple sans l'affichage des commentaires

[root@srv-diokh openldap]# ldapsearch -x -LLL


dn: dc=test,dc=sn
objectClass: organization
objectClass: dcObject
o: test
dc: test

3.2 Ajout d’unité organisationnelle


 le fichier contenant les entrées pour les unités organisationnelles

dn: ou=informatique,dc=test,dc=sn
objectclass: organizationalUnit
ou: informatique

dn: ou=telecoms,dc=test,dc=sn
objectclass: organizationalUnit
ou: telecoms

[root@srv-diokh openldap]# ldapadd -x -D "cn=Manager,dc=test,dc=sn" -W -f ou.ldif


Enter LDAP Password:
adding new entry "ou=informatique,dc=test,dc=sn"
adding new entry "ou=telecoms,dc=test,dc=sn"
[root@srv-diokh openldap]#

3.3 Ajout du groupe telecom

 le fichier pour l'ajout d'un groupe:

dn: cn=telecoms,dc=test,dc=sn
objectclass: posixGroup
cn: telecoms
gidNumber: 1000

[root@srv-diokh openldap]# ldapadd -x -D "cn=Manager,dc=test,dc=sn" -W -f group.ldif


Enter LDAP Password:
adding new entry "cn=telecoms,dc=test,dc=sn"
[root@srv-diokh openldap]#
3.4 Ajout d’un l'utilisateur
 le fichier LDIF contenant une entrée d'un compte système

dn: uid=jean,ou=telecoms,dc=test,dc=sn
objectclass: account
objectclass: posixAccount
objectclass: shadowAccount
uid: jean
userPassword: passer
uidNumber: 1000
gidNumber: 1000
cn: Jean DIOKH
homeDirectory: /home/jean
loginShell: /bin/bash

[root@srv-diokh openldap]# ldapadd -x -D "cn=Manager,dc=test,dc=sn" -W -f user.ldif


Enter LDAP Password:
adding new entry "uid=jean,ou=telecoms,dc=test,dc=sn"
[root@srv-diokh openldap]#

 Information au niveau du debug du démon

conn=12 fd=16 ACCEPT from IP=192.168.1.20:34074 (IP=0.0.0.0:389)


conn=12 op=0 BIND dn="cn=Manager,dc=test,dc=sn" method=128
conn=12 op=0 BIND dn="cn=Manager,dc=test,dc=sn" mech=SIMPLE ssf=0
conn=12 op=0 RESULT tag=97 err=0 text=
conn=12 op=1 ADD dn="uid=jean,ou=telecoms,dc=test,dc=sn"
conn=12 op=2 UNBIND
conn=12 op=1 RESULT tag=105 err=0 text=
conn=12 fd=16 closed
3.5 Recherche dans l'annuaire

La recherche se fait avec la commande ldapsearch du client. La commande utilise les mêmes
options que la commande ldapadd. Le résultat de la recherche est affiché au format LDIF avec
des détails. L’ajout de l’option -L affiche le résultat au format LDIFv1, une seconde option –L
élimine les commentaires et la troisième option -L pour omettre la version.
On a aussi l'option -s base, one, sub , children pour définir le niveau de la rechercher:

[root@srv-diokh openldap]# ldapsearch -x -s base -LLL


dn: dc=test,dc=sn
objectClass: organization
objectClass: dcObject
o: test
dc: test
[root@srv-diokh openldap]#

[root@srv-diokh openldap]# ldapsearch -x -s one -LLL


dn: ou=informatique,dc=test,dc=sn
objectClass: organizationalUnit
ou: informatique

dn: ou=telecoms,dc=test,dc=sn
objectClass: organizationalUnit
ou: telecom
ou: telecoms

dn: cn=telecoms,ou=telecoms,dc=test,dc=sn
objectClass: posixGroup
cn: telecoms
gidNumber: 1000
[root@srv-diokh openldap]#
3.6 Les filtres

Pour avoir des informations sur l'entrée qui a pour uid jean :

[root@srv-diokh openldap]# ldapsearch -x -LLL "(uid=jean)"

[root@srv-diokh ~]# ldapsearch -x -LLL "(uid=jean)"


dn: uid=jean,ou=telecoms,dc=test,dc=sn
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
uid: jean
userPassword:: cGFzc2Vy
uidNumber: 1000
gidNumber: 1000
cn: Jean DIOKH
homeDirectory: /home/jean
loginShell: /bin/bash

 pour afficher le uidNumber et gidNumbre seulement:

[root@srv-diokh ~]# ldapsearch -x -LLL "(uid=jean)" uidNumber gidNumber


dn: uid=jean,ou=telecoms,dc=test,dc=sn
uidNumber: 1000
gidNumber: 1000
[root@srv-diokh ~]#
3.7 Modification d'une entrée avec la commande LDAPMODIFY

La commande ldapmodify utiliser également comme argument un fichier au format LDIF.


Le fichier LDIF commence par une ligne qui indique le dn de l'entrée qu'on veut changer.

LDIF change records are used to represent directory change requests.


Each change record starts with line indicating the distinguished name
of the entry being changed:

dn: <distinguishedname>

changetype: <[modify|add|delete|modrdn]>

Or, for a replace modification:

replace: <attributetype>
<attrdesc>: <value1>

 Modification de la valeur d'un attribut: remplacer la valeur existante

[root@srv-diokh openldap]# ldapmodify -v -x -D "cn=Manager,dc=test,dc=sn" -W -f


modify.ldif
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
replace loginShell:
/bin/sh
modifying entry "uid=jean,ou=telecoms,dc=test,dc=sn"
modify complete
[root@srv-diokh openldap]#

[root@srv-diokh openldap]# ldapsearch -x -LLL "(uid=jean)" loginShell


dn: uid=jean,ou=telecoms,dc=test,dc=sn
loginShell: /bin/sh
[root@srv-diokh openldap]#

 Ajout d'un nouvel attribut:


dn: uid=jean,ou=telecoms,dc=test,dc=sn
changetype: modify
add: description
description: Cours Linux

[root@srv-diokh openldap]# ldapmodify -v -x -D "cn=Manager,dc=test,dc=sn" -W -f ajout.ldif


ldap_initialize( <DEFAULT> )
Enter LDAP Password:
add description:
Cours Linux
modifying entry "uid=jean,ou=telecoms,dc=test,dc=sn"
modify complete
[root@srv-diokh openldap]#

Vérification
[root@srv-diokh openldap]# ldapsearch -x -LLL "(uid=jean)" descriptiondn:
uid=jean,ou=telecoms,dc=test,dc=sn
description: Cours Linux
[root@srv-diokh openldap]#
 Suppression d'un attribut

dn: uid=jean,ou=telecoms,dc=test,dc=sn
changetype: modify
delete: description

[root@srv-diokh openldap]# ldapmodify -v -x -D "cn=Manager,dc=test,dc=sn" -W -f


suppression.ldif
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
delete description:
modifying entry "uid=jean,ou=telecoms,dc=test,dc=sn"
modify complete
[root@srv-diokh openldap]#

Vérification
[root@srv-diokh openldap]# ldapsearch -x -LLL "(uid=jean)" descriptiondn:
uid=jean,ou=telecoms,dc=test,dc=sn
[root@srv-diokh openldap]#

3.8 Suppression d'un élément de l'annuaire avec la commande LDADELETE

Les manipulations se feront dans l'unité organisationnelle informatique.

[root@srv-diokh openldap]# ldapsearch -x -LLL -b ou=informatique,dc=test,dc=sn uid


dn: ou=informatique,dc=test,dc=sn

dn: uid=user4,ou=informatique,dc=test,dc=sn
uid: user4

dn: uid=user1,ou=informatique,dc=test,dc=sn
uid: user1

dn: uid=user2,ou=informatique,dc=test,dc=sn
uid: user2

dn: uid=user3,ou=informatique,dc=test,dc=sn
uid: user3
[root@srv-diokh openldap]#

Il existe plusieurs manières pour supprimer un ou plusieurs éléments de l'annuaire.

 Suppression faisant appel à un fichier

delete.ldif:
uid=user2,ou=informatique,dc=test,dc=sn

[root@srv-diokh openldap]# ldapdelete -v -x -D cn=Manager,dc=test,dc=sn -W -f delete.ldif


ldap_initialize( <DEFAULT> )
Enter LDAP Password:
deleting entry "uid=user2,ou=informatique,dc=test,dc=sn"
[root@srv-diokh openldap]#

 Suppression d’une arborescence

[root@srv-diokh openldap]# ldapdelete -v -x -D cn=Manager,dc=test,dc=sn -r


ou=informatique,dc=test,dc=sn -W
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
deleting entry "ou=informatique,dc=test,dc=sn"
deleting children of: ou=informatique,dc=test,dc=sn
deleting children of: uid=user1,ou=informatique,dc=test,dc=sn
removing uid=user1,ou=informatique,dc=test,dc=sn
uid=user1,ou=informatique,dc=test,dc=sn removed
deleting children of: uid=user3,ou=informatique,dc=test,dc=sn
removing uid=user3,ou=informatique,dc=test,dc=sn
uid=user3,ou=informatique,dc=test,dc=sn removed
[root@srv-diokh openldap]#
4 Client WEB : phpldapadmin

Pour accéder à l'interface on tape l'url: http://127.0.0.1/phpldapadmin. On peut remplacer


l'adresse IP 127.0.0.1 par l'adresse IP du serveur qui héberge le client WEB mais il faudra au
préalable autoriser les requêtes HTTP venant des machines distantes car le serveur Web
n'accepte que les requêtes venant de la machine locale. Cette autorisation se fait dans le
fichier /etc/httpd/conf.d/phpldapadmin.conf.

Vous aimerez peut-être aussi