====== 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, [[::info::authors::tchemineau]]