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.
# 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.
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
Quelques explications :
Les directives :
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.
Ceci permet de ne pas stocker le mot de passe en clair dans le fichier de configuration.
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
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
# ldapadd -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f user.ldif
# ldapdelete -x -H ldap://localhost -W -D "cn=admin,dc=maison,dc=com" "uid=garfield,ou=users,dc=maison,dc=maison"
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
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*)"
# /etc/init.d/slapd stop
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
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
Temps total estimé : 10min :)
# 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.
# 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 :
account sufficient pam_ldap.so account required pam_unix.so try_first_pass
auth sufficient pam_ldap.so auth required pam_unix.so nullock_secure try_first_pass
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.