Le système d'exploitation GNU-Linux/Les annuaires LDAP

Un livre de Wikilivres.
Aller à : navigation, rechercher


  1. Qu'est-ce qu'un système d'exploitation ?
  2. Unix et Linux
  3. Partitionnement du disque
  4. Installation
    1. Installer Debian via le réseau
  5. Utilisateur Unix, l'interface console
    1. Le login
    2. Commandes de base
    3. L'aide en ligne man
    4. L'éditeur de texte vi
    5. Les shells
    6. La complétion
    7. Les jokers
    8. Les répertoires importants
    9. Redirection des entrées/sorties
    10. Invoquer un programme en tâche de fond
    11. Propriétaires et droits d'accès
    12. Processus
    13. Locale
  6. Administration du système
    1. Configuration du réseau
    2. Les utilisateurs et groupes
    3. Le processus d'initialisation
    4. Les systèmes de fichiers
    5. Le système virtuel /proc
    6. Les périphériques /dev
    7. L'ordonnanceur de travaux cron
    8. Le backup : tar et gzip
    9. ghost avec partimage
    10. sauvegarde de fichiers avec rsync
    11. Les fichiers journaux syslog
    12. Installation de nouveaux logiciels
    13. Le noyau Linux et les modules
    14. Autres commandes utiles
    15. Installation RAID1 logiciel + LVM + XFS
    16. Scripts de surveillance
    17. Réseaux sans fil
  7. Administration des services réseaux
    1. Le serveur de noms BIND
    2. Le serveur de configuration réseau DHCP
    3. Le serveur de shell distant SSH
    4. Le partage de fichiers Samba
    5. Le partage de fichiers NFS
    6. Le serveur d'impression CUPS
    7. Le serveur de fichiers FTP
    8. Le serveur Web Apache
    9. La base de données MySQL
    10. Le serveur de mails Postfix
    11. Les annuaires LDAP
    12. L'outil d'administration Webmin
    13. La supervision
  8. Sécurisation d'un serveur Linux
    1. Installation d'un service en mode chroot
    2. Protection avec iptables
  9. Médiagraphie
  10. Auteurs

Configuration[modifier | modifier le wikicode]

Pour Debian Squeeze le fichier slapd.conf se situe dans /usr/share/doc/slapd/examples/slapd.conf. Il faut donc changer son emplacement avec cp /usr/share/doc/slapd/examples/slapd.conf /etc/ldap/. Puis modifier le fichier /etc/default/slapd et changer la ligne 'SLAPD_CONF=/etc/ldap/slapd.conf'.

La configuration de OpenLDAP se situe dans le fichier /etc/ldap/slapd.conf :

 # more /etc/ldap/slapd.conf
 
 # Les schémas à inclure à l'annuaire
 include         /etc/ldap/schema/core.schema
 include         /etc/ldap/schema/cosine.schema
 include         /etc/ldap/schema/nis.schema
 include         /etc/ldap/schema/inetorgperson.schema
 
 # le fichier contenant le PID du processus
 pidfile         /var/run/slapd/slapd.pid
 # Le fichier contenant les arguments
 argsfile        /var/run/slapd/slapd.args
 # La facilité utilisée avec syslog
 loglevel        none
 
 # Emplacement des modules
 modulepath     /usr/lib/ldap
 
 # Chargment de modules permettant d'étendre les fonctionnalités de OpenLDAP
 moduleload     back_hdb
 
 # Limites concernant les recherches
 sizelimit 500
 tool-threads 1
 
 ##################################
 # Définition du premier annuaire #
 ##################################
 # On utilise un stockage basé sur le format de fichier '''HDB'''
 backend         hdb
 database        hdb
 
 # On définit la ''racine'' de l'arbre (on parle de ''suffixe'' ou de ''basedn'')
 suffix          "dc=domaine,dc=fr"
 
 # Répertoire stockant les données de l'annuaire, dans notre cas, des fichiers au format '''HDB'''
 directory       "/var/lib/ldap"
 
 # L'administrateur de l'annuaire
 rootdn          "cn=admin,dc=domaine,dc=fr"
 rootpw          motdepasse        # en clair ou généré via la commande '''slappasswd'''
 
 # Des paramêtres d'optimisation du format HDB
 dbconfig set_cachesize 0 2097152 0
 dbconfig set_lk_max_objects 1500
 dbconfig set_lk_max_locks 1500
 dbconfig set_lk_max_lockers 1500
 
 # Les attributs à indexer en vue d'améliorer drastiquement les recherches
 index           objectClass eq
 
 # à commenter ...
 lastmod         on
 checkpoint      512 30
 
 # contrôle d'accès aux attributs sensibles
 access to attrs=userPassword,shadowLastChange
         by dn="cn=admin,dc=domaine,dc=fr" write
         by anonymous auth
         by self write
         by * none
 
 # Annuaire avec accès anonyme en lecture seule
 access to dn.base="" by * read
 access to *
         by dn="cn=admin,dc=domaine,dc=fr" write
         by * read

Après chaque modification de ce fichier, on relance OpenLDAP avec la commande suivante :

# /etc/init.d/slapd restart

Création de l'annuaire[modifier | modifier le wikicode]

On crée le fichier LDIF qui va initialiser le sommet de l'arbre :

# cat cree_arbre.ldif
dn: dc=domaine,dc=fr
objectClass: top
objectClass: dcObject
objectClass: organization
dc: domaine
o: domaine

On injecte le fichier LDIF dans l'annuaire via la commande ldapadd :

# ldapadd -x -h localhost -W -D "cn=admin,dc=domaine,dc=fr" -f cree_arbre.ldif
Enter LDAP Password: 
adding new entry "dc=domaine,dc=fr"

Pour créer les autres entrées, on peut désormais utiliser PhpLdapAdmin.

Les commandes d'administration OpenLDAP[modifier | modifier le wikicode]

link={{{link}}}À faire...

Parler des commandes : slapacl, slapcat, slapindex, slapadd, slappasswd, slapauth, slapdn te slaptest

Les programmes complémentaires[modifier | modifier le wikicode]

Les outils en ligne de commande[modifier | modifier le wikicode]

NB : les commandes suivantes sont fournies par le paquet Debian ldap-utils. Elles disposent des options génériques suivantes :

  • -h <adresse IP ou nom> : permet d'indiquer le serveur hébergeant l'annuaire LDAP
  • -x : on utilise l'authentification simple et non l'authentification TLS/SSL.
  • -b <basedn> : permet d'indiquer l'annuaire à consulter (le basedn ou suffix)
  • -D <dn d'un objet> : permet de s'authentifier avec le DN indiqué
  • -W : demande la saisie du mot de passe du DN précédement indiqué
  • -f <fichier LDIF> : permet d'indiquer un fichier LDIF


ldapadd[modifier | modifier le wikicode]

La commande ldapadd permet d'ajouter des entrées dans l'annuaire LDAP.

Prenons par exemple le fichier LDIF suivant qui crée le suffixe (le basedn) de notre annuaire :

# cat cree_arbre.ldif
dn: dc=domaine,dc=fr
objectClass: top
objectClass: dcObject
objectClass: organization
dc: domaine
o: domaine

Pour injecter ce fichier LDIF dans notre annuaire :

# ldapadd -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -f cree_arbre.ldif -W

Si tout se passe bien, vous devez voir des lignes :

adding new entry "dc=domaine,dc=fr"


ldapsearch[modifier | modifier le wikicode]

La commande ldapsearch permet d'interroger l'annuaire LDAP.

Affiche toutes les entrées de l'annuaire :

# ldapsearch -x -h localhost -b "dc=domaine,dc=fr"

Affiche les attributs de l'utilisateur bob via l'utilisation d'un filtre :

# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"

Affiche uniquement les attributs uid et homeDirectory de l'utilisateur bob :

# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)" uid homeDirectory


ldapdelete[modifier | modifier le wikicode]

La commande ldapdelete permet de supprimer une entrée de l'annuaire LDAP. On indique à cette commande le(s) dn(s) à supprimer.

Supprime l'utilisateur bob :

# ldapdelete -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -W "cn=bob,ou=People,dc=domaine,dc=fr"


ldapmodify[modifier | modifier le wikicode]

La commande ldapmodify permet de modifier une entrée de l'annuaire LDAP.

link={{{link}}}À faire...

rajouter un exemple de la commande ldapmodify


ldapmodrdn[modifier | modifier le wikicode]

La commande ldapmodrdn permet de renommer une entrée de l'annuaire LDAP. Cette opération revient à changer le dn (distinguished name) d'une entrée.

link={{{link}}}À faire...

rajouter un exemple de la commande ldapmodrdn


ldapcompare[modifier | modifier le wikicode]

La commande ldapcompare permet de comparer des entrées de l'annuaire LDAP.

link={{{link}}}À faire...

rajouter un exemple de la commande ldapcompare


ldappasswd[modifier | modifier le wikicode]

La commande ldappasswd permet de changer le mot de passe d'une entrée de l'annuaire LDAP.

link={{{link}}}À faire...

rajouter un exemple de la commande ldappasswd


ldapwhoami[modifier | modifier le wikicode]

La commande ldapwhoami permet de connaître avec quelle identité on est connecté à l'annuaire LDAP, c'est l'équivalent de la commande Unix whoami.

link={{{link}}}À faire...

rajouter un exemple de la commande ldapwhoami

slapadd est utilisé pour ajouter des entrées spécifiées dans le format LDAP Directory Interchange Format (LDIF) dans une base de données slapd.

slapcat est utilisé pour générer une sortie LDIF LDAP basé sur le contenu d'une base de données slapd.

slapd est un serveur LDAP autonome.

slapindex est utilisé pour regénérer les index de slapd suivant le contenu actuel d'une base de données.

slurpd est un serveur réplicat autoname pour LDAP.

PhpLdapAdmin[modifier | modifier le wikicode]

PhpLdapAdmin est un logiciel qui permet d'administrer un annuaire LDAP via une interface Web.

Installation :

# apt-get install phpldapadmin

Configuration :

PhpLdapAdmin s'est configuré avec l'annuaire définit par défaut dans OpenLDAP. Si on a changé ce dernier, il faut modifier les deux lignes suivantes dans la configuration de PhpLdapAdmin :

# vi /etc/phpldapadmin/config.php
...
$ldapservers->SetValue($i,'server','base',array('dc=domaine,dc=fr'));
$ldapservers->SetValue($i,'login','dn','cn=admin,dc=domaine,dc=fr');
...

À chaque modification de ce fichier, il est préférable de redémarrer apache :

# /etc/init.d/apache2 restart

Accès à PhpLdapAdmin : http://localhost/phpldapadmin/


La réplication LDAP[modifier | modifier le wikicode]

Configuration du provider LDAP[modifier | modifier le wikicode]

On modifie le fichier /etc/ldap/slapd.conf du provider LDAP pour indiquer l'annuaire à répliquer, on rajoute les lignes en gras dans la configuration de l'annuaire et on modifie les attributs à indexer :

# vi /etc/ldap/slapd.conf
       ...
       # On indique à OpenLDAP de charger le module
       # permettant la réplication
       moduleload syncprov.la
       ...
       database bdb
       suffix dc=domaine,dc=fr
       rootdn dc=domaine,dc=fr
       directory /var/ldap/db
       index objectclass,entryCSN,entryUUID eq
       overlay syncprov
       syncprov-checkpoint 100 10
       syncprov-sessionlog 100

Configuration du consumer LDAP[modifier | modifier le wikicode]

On modifie /etc/ldap/slapd.conf du second OpenLDAP (le consumer) pour lui indiquer l'annuaire à répliquer et l'adresse du premier OpenLDAP (le provider).

# vi /etc/ldap/slapd.conf
...
database hdb
suffix dc=domaine,dc=fr
rootdn dc=domaine,dc=fr
directory /var/lib/ldap2
index objectclass,entryCSN,entryUUID eq

syncrepl rid=123
         provider=ldap://<adresse IP ou nom du provider LDAP>:389
         type=refreshOnly
         interval=00:00:00:10
         searchbase="dc=domaine,dc=fr"
         filter="(objectClass=*)"
         scope=sub
         attrs="*"
         schemachecking=off
         bindmethod=simple
         binddn="cn=admin,dc=domaine,dc=fr"
         credentials=admin

Il faut ensuite créer le répertoire du nouvel annuaire et le donner à l'utilisateur et au groupe openldap :

# mkdir /var/lib/ldap2
# chown openldap.openldap /var/lib/ldap2

Il ne reste plus qu'à relancer OpenLDAP :

# /etc/init.d/slapd restart

Validation de la réplication[modifier | modifier le wikicode]

L'objectif est de constater la réplication des objets de l'annuaire.


Procédure n°1 : validation de l'ajout de données sur le réplicat[modifier | modifier le wikicode]

Coté Provider[modifier | modifier le wikicode]
  • on crée un fichier LDIF contenant l'utilisateur à rajouter
# cat bob.ldif
dn: cn=bob,ou=People,dc=domaine,dc=fr
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
givenName: Eponge
sn: Eponge
cn: bob
uid: bob
userPassword: {MD5}F7WfMlfPOGcecKZLEkmjTA==
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/bob
loginShell: /bin/sh
mail: bob@domaine.fr
  • on injecte ce fichier LDIF dans notre annuaire
# ldapadd -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -f bob.ldif -W
  • on vérifie que l'utilisateur a bien été crée
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"


Coté Consumer [modifier | modifier le wikicode]
  • on attend quelques secondes et on constate que l'utilisateur a bien été créé sur le réplicat
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"


Procédure n°2 : validation de la suppression de données sur le réplicat[modifier | modifier le wikicode]

Coté Provider[modifier | modifier le wikicode]
  • on supprime l'utilisateur de notre annuaire
# ldapdelete -x -h localhost -D "cn=admin,dc=domaine,dc=fr" -W "cn=bob,ou=People,dc=domaine,dc=fr"
  • on vérifie que l'utilisateur a bien été supprimé
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"


Coté Consumer[modifier | modifier le wikicode]
  • on attend quelques secondes et on constate que l'utilisateur a bien été supprimé sur le réplicat
# ldapsearch -LLL -x -h localhost -b "dc=domaine,dc=fr" "(cn=bob)"