Groupe Linagora - OBM Online - Planète - Blogs
Logo Linagora.org
Piste: » Guide d'installation d'OpenLDAP

Guide d'installation d'OpenLDAP

Ce document n'étant pas à jour, il est en cours de réécriture.

Memo pour l'installation d'un annuaire openldap sur distribution GNU/Linux Debian Sarge.

Installation des paquets

# apt-get install slapd ldap-utils db4.2-util

Une fenêtre de dialogue demande un mot de passe a associé l'annuaire que vous mettez en place, indiquez ce que vous voulez nous changerons par la suite.

Initialisation

Configuration

Le fichier de configuration /etc/ldap/slapd.conf :

# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.

#######################################################################
# Global Directives:

# Features to permit
#allow bind_v2

# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema

# Schema check allows for forcing entries to
# match schemas for their objectClasses's
schemacheck     on

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile         /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile        /var/run/slapd.args

# Read slapd.conf(5) for possible values
loglevel        0

# Where the dynamically loaded modules are stored
modulepath    /usr/lib/ldap
moduleload    back_bdb

#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend        bdb
checkpoint 512 30


#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database        bdb

# The base of your directory in database #1
suffix          "dc=maison,dc=com"

rootdn        "cn=admin,dc=maison,dc=com"
#rootpw        "secret"
rootpw        "{CRYPT}q9NNPiXL8AK1."

# Where the database file are physically stored for database #1
directory       "/var/lib/ldap"

# Indexing options for database #1
index           objectClass eq

# Save the time that the entry gets modified, for database #1
lastmod         on

# Where to store the replica logs for database #1
# replogfile    /var/lib/ldap/replog

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword
        by dn="cn=admin,dc=maison,dc=com" write
        by anonymous auth
        by self write
        by * none

# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
access to dn.base="" by * read

# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="cn=admin,dc=maison,dc=com" write
        by * read

# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
#        by dn="cn=admin,dc=maison" write
#        by dnattr=owner write

Il est préférable désormais d'utiliser le backend HDB comme support BerkeleyDB, dù à des limitations remontées par les testeurs/développeurs d'OpenLDAP.

Quelques explications :

  • La directive loglevel 0 est le niveau de journalisation du serveur, le niveau 0 correspond à aucun enregistrement ;
  • La directive backend bdb est le choix du type de base de données où sera stocker l'annuaire ;
  • La directive suffix “dc=maison,dc=com” permet de définir la racine de l'annuaire.

Les directives :

  • rootdn : DN de connexion de l'administrateur LDAP ;
  • rootpw : Le mot de passe associé, par défaut en clair. Il est possible de le hasher grâce à la commande administrateur slappasswd.

Premier démarrage

Pour vérifier la syntaxe du fichier de configuration vous devez utilisé slaptest, la réponse doit être “config file testing succeeded” et/ou un code de retour à 0.

# slaptest -f /etc/ldap/slapd.conf

Aprés une modification du fichier de configuration du serveur slapd.conf, vous devez le redémarrer :

# /etc/init.d/slapd restart

Pour crypter le mot de passe administrateur :

# slappasswd -s "secret" -h {CRYPT}
{CRYPT}q9NNPiXL8AK1. 

Éviter {CRYPT}, préférer plutôt une méthode hashage sécurisée de type SSHA ou SMD5.

Ceci permet de ne pas stocker le mot de passe en clair dans le fichier de configuration.

Création de la structure de l'annuaire

Le DIT, pour Directory Information Tree :

		dc=maison,dc=com
			|
			|
	---------------------------------
	|				|
	|				|
	ou=users,dc=maison,dc=com	ou=groups,dc=maison,dc=com
		|					|
		|					|
		|_uid=garfield,ou=users,...	|_cn=utilisateurs,ou=groups,...
		|
		|
		|_uid=odie,ou=users,...
		

Le fichier structure.ldif au format LDIF contient :

 
dn: dc=maison,dc=com
objectClass: dcObject
objectClass: organization
dc: maison
o: maison
description: la maison

dn: ou=users,dc=maison,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=maison,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: cn=utilisateurs,ou=groups,dc=maison,dc=com
objectClass: posixGroup
cn: utilisateurs
gidNumber: 2000

Vous devez utilisé la commande suivante :

# ldapadd -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f structure.ldif

Manipulation de base

Ajout d'un utilisateur

Le fichier user.ldif au format LDIF contient :

dn: uid=garfield,ou=users,dc=maison,dc=com
objectClass: account
objectClass: posixAccount
cn: garfield
uid: garfield
uidNumber: 10001
gidNumber: 2000
homeDirectory: /home/garfield
userPassword: chat
loginShell: /bin/sh
gecos: garfield
description: garfield le chat

Pour ajouter un utilisateur à l'annuaire

# ldapadd -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f user.ldif

Suppression d'un utilisateur

# ldapdelete -x -H ldap://localhost -W -D "cn=admin,dc=maison,dc=com" "uid=garfield,ou=users,dc=maison,dc=maison"

Modificiation d'une entrée avec ldapmodify

Pour modifier un attribut, le “changetype” à employer est “modify”. Basiquement, l'attribut supplémentaire à ajouter est l'attribut “replace” qui va préciser quel attribut remplacer. Et nous spécifions la nouvelle valeur de l'attribut.

Le fichier modif.ldif :

dn: uid=garfield,ou=users,dc=maison,dc=com
changetype: modify
replace; description
description : gros chat

La commande :

# ldapmodify -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f modif.ldif

Pour rechercher un utilisateur

On recherche tous les uid commençant par “garf” à partir de la racine de l'annuaire :

# ldapsearch -x -H ldap://localhost -b "dc=maison,dc=com" "(uid=garf*)"

Manipulation de la base BerkeleyDB

Important : Avant toute manipulation des outils ci dessous vous devez impérativement arrêter le serveur openldap pour éviter les accès concurrent à la base de données.

# /etc/init.d/slapd stop

L'outil slapindex

Nous avons configuré notre serveur pour qu'il utilise des index ; la première chose à effectuer avant d'utiliser notre serveur est donc de les générer. Il faut en effet initialiser les index pour qu'OpenLDAP puisse ensuite les utiliser et les maintenir. L'opération de génération n'est à effectuer qu'une seule fois et ceci se fait par le biais de la commande slapindex.

# slapindex

L'outil slapcat

Slapcat est une commande trés utile au quotidien. Elle effectue un dump de la base de données au format ldif.

# slapcat > sauvegarde.ldif
L'outil slapadd

slapadd est l'inverse de slapcat. Cette commande permet de peupler notre annuaire en utilisant un fichier au format ldif.

# slapadd < sauvegarde.ldif 

Aprés toutes ses manipulations vous devez redémarrer le serveur openldap.

# /etc/init.d/openldap start

Authentification des clients linux

Temps total estimé : 10min :)

Installation de libnss-ldap

# apt-get install libnss-ldap

Répondez aux questions…

Modification du fichier /etc/nsswitch.conf :

passwd:        compta ldap
group:        compta ldap
shadow:        compta ldap

Testez que les modifications fonctionnent :

# getent passwd

Si vous avez les comptes ldap dans les résultats de la commande, ca marche.

Installation de libpam-ldap

# apt-get install libpam-ldap

Modification du fichier /etc/pam_ldap.conf. Dans /etc/pam.d/ il y a tous les fichiers d'authentification du système :

  • Dans /etc/pam.d/common-account ajouter :
account sufficient      pam_ldap.so
account required        pam_unix.so try_first_pass
  • Dans /etc/pam.d/common-auth ajouter :
auth    sufficient      pam_ldap.so
auth    required        pam_unix.so     nullock_secure  try_first_pass
  • Dans /etc/pam.d/common-password ajouter :
password        sufficient      pam_ldap.so
password        required        pam_unix.so nullok obscure min=4 max=8 md5 try_first_pass

Vous pouvez être authentifier grâce à l'annuaire ldap.

Contributeurs : David HANNEQUIN, Thomas CHEMINEAU