LDAP signifie Lightweight Directory Access Protocol, c'est une version simplifiée du protocole normalisé X500. La configuration de l'annuaire dans cette partie sera utilisée pour faire de l'authentification. Quoiqu'il en soit, un annuaire LDAP peut-être utilisé de différentes façons : authentification, annuaire partagé (pour les clients de messagerie), dans toutes sortes d'applications. LDAP est un standard largement utilisé.
Pour décrire brièvement un annuaire LDAP, toutes les informations sont stockées dans une structure arborescente (l'arbre d'informations de l'annuaire, le DIT). Nous commencerons avec un arbre simple avec deux nœuds au-dessus de la racine :
Le nœud « Personnes » dans lequel seront représentés vos utilisateurs
Le nœud « Groupes » dans lequel vous définirez vos groupes.
Vous devez d'abord déterminer qu'elle sera la racine de votre annuaire LDAP. Par défaut, votre arbre sera déterminé par votre domaine Internet. Par exemple, si votre domaine est example.com (ce que nous assumerons dans l'exemple qui suit), votre racine sera dc=example,dc=com.
Tout d'abord, installez le démon du serveur ldap (ldapd) sur la machine serveur ; installez les paquets suivants : slapd
et ldap-utils
.
Saisissez votre domaine et le mot de passe pour le compte administrateur de l'annuaire.
Seules quelques modifications seront apportées à la configuration par défaut. Tout d'abord, définissez le mot de passe de l'administrateur dans le fichier de configuration (au lieu de le faire dans l'annuaire) en éditant le fichier/etc/ldap/slapd.conf
.
N'utilisez pas un mot de passe en clair. Pour générer un mot de passe crypté, utilisez au préalable la commande : slappasswd votremotdepasse
$ slappasswd New password: Re-enter password: {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
Cet exemple montre ce qu'il se passe quand on utilise la chaîne de caractère « secret » comme mot de passe. (De par la nature du processus de cryptage SSHA, votre résultat variera).
Maintenant, éditez le fichier /etc/ldap/slapd.conf
et copier/coller la chaîne générée.
# Assurez-vous d'éditer ou bien de rajouter ces directives après la première directive 'database'. suffix "dc=example,dc=com" directory "/var/lib/ldap" rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
L'annuaire a été créé au cours de l'installation. Il faut maintenant le peupler, avec des entrées « classiques » qui seront compatibles avec un annuaire (par exemple pour un annuaire partagé), avec des comptes classiques (pour une application web) ainsi qu'avec des comptes Unix (posix).
Un annuaire LDAP peut-être renseigné à l'aide d'un fichier ldif (ldif signifie ldap directory interchange format). Pour prendre un exemple, créer le fichier texte init.ldif suivant dans votre système :
dn: dc=example,dc=com objectClass: dcObject objectClass: organizationalUnit dc: example ou: Example Dot Com dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups dn: uid=john,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 1000 gidNumber: 10000 userPassword: password gecos: John Doe loginShell: /bin/bash homeDirectory: /home/john shadowExpire: -1 shadowFlag: 0 shadowWarning: 7 shadowMin: 8 shadowMax: 999999 shadowLastChange: 10877 mail: john.doe@example.com postalCode: 31000 l: Toulouse o: Example mobile: +33 (0)6 xx xx xx xx homePhone: +33 (0)5 xx xx xx xx title: System Administrator postalAddress: initials: JD dn: cn=example,ou=groups,dc=example,dc=com objectClass: posixGroup cn: example gidNumber: 10000
Dans l'exemple ci-dessus, on a défini un utilisateur, un groupe et la structure de l'annuaire. Dans un autre exemple, vous auriez pu voir l'attribut objectClass: top ajouté dans chaque entrée, mais comme il s'agit d'une valeur par défaut, il n'est pas nécessaire de l'indiquer explicitement.
Maintenant, ajoutez vos entrées dans l'annuaire LDAP :
arrêtez le démon LDAP : sudo /etc/init.d/slapd stop
supprimez le contenu ajouté automatiquement lors de l'installation : sudo rm -rf /var/lib/ldap/*
ajouter le contenu de fichier d'exemple ci-dessus : sudo slapadd -l init.ldif
redémarrez le démon LDAP : sudo /etc/init.d/slapd start
Nous pouvons maintenant vérifier que le contenu de notre fichier a bien été ajouté correctement, à l'aide des outils du paquet ldap-utils
. Afin de faire une recherche dans un annuaire LDAP :
ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn dn: uid=john,ou=people,dc=example,dc=com cn: John Doe sn: Doe givenName: John
Une petite explication rapide :
-x : parce que nous n'utilisons pas la méthode d'authentification SASL (utilisée par défaut)
-LLL : n'affiche pas les informations LDIF
L'authentification nécessite l'accès au champ du mot de passe, qui ne devrait pas être accessible par défaut. Un autre problème vient du fait qu'au cours du changement de mot de passe à l'aide de « passwd », shadowLastChange doit également être accessible. Le code suivant montre un exemple de paramétrage d'ACL qui autorise l'accès à shadowLastChange :
access to attr=shadowLastChange by dn="cn=manager,dc=example,dc=com" write by self write by * read
Le service d'annuaire LDAP devient souvent rapidement un service hautement critique dans un système d'information : tout dépend de LDAP : l'authentification, les autorisations, la messagerie, etc. Configurer un système redondant est donc une bonne idée que l'on peut de surcroit facilement mettre en œuvre comme le montre la petite explication suivante.
La réplication sera basée ici sur une relation maître-esclave. Avant de mettre en œuvre la réplication LDAP, vérifiez les étapes suivantes :
Arrêter le démon slapd du serveur maître.
Reconfigurer le fichier slapd.conf du serveur maître afin de permettre la réplication sur le nouveau serveur esclave.
Exporter la base de données du serveur maître.
Configurer le fichier slapd.conf
du serveur réplica.
Importer la base de données du serveur maître sur le serveur esclave.
(Re)démarrer le processus slapd du serveur réplica
Redémarrer le processus slapd du serveur maître
Vous devez vous rappeler que les modifications doivent TOUJOURS être apportées sur le serveur maître. Si par mégarde vous modifiez le serveur esclave, vos modifications seront perdues.
Sur le serveur maître, vous devez modifier la section base de données du fichier /etc/ldap/slapd.conf
pour ajouter une instruction de réplication. L'exemple suivant permet une réplication sur ldap-2.example.com avec l'utilisateur « Manager » et le mot de passe « secret ». Le journal de réplication contient les modifications effectuées avant qu'elles ne soient envoyées au serveur LDAP esclave.
replica uri=ldap://ldap-2.example.com:389 binddn="cn=Manager,dc=example,dc=com" bindmethod=simple credentials=secret replogfile /var/lib/ldap/replog
Exportez la base de données du maître à l'aide de slapcat. Puis copiez master.ldif sur l'esclave à l'aide de scp ou d'autres outils.
user@master:~$ sudo slapcat -l master.ldif
Sur l'esclave, vous devez autoriser votre maître à mettre à jour la base de données LDAP. Ajoutez les lignes suivantes à votre fichier /etc/ldap/slapd.conf
dans la section 'database' :
updatedn cn=Manager,dc=example,dc=com updateref ldap://ldap-1.example.com
Importez le fichier master.ldif
à l'aide de slapadd.
user@slave:~$ sudo slapadd -c -l master.ldif
Redémarrer le serveur maître.
user@master:~$ sudo /etc/init.d/slapd start
Rédémarrer le serveur esclave.
user@slave:~$ sudo /etc/init.d/slapd start