Dernière mise à jour : 16/08/2004
Cela faisait un petit moment que je devais documenter ce type d'installation. Nous verrons dans cet article comment installer un serveur LDAP sur une Debian testing/unstable en utilisant pour cela les certificats d'autorité afin d'éviter tout échange non crypté. Les clients sont aussi des Debian, mais tout autre type de Linux devrait marcher sans aucun souci.
Commencez donc par installer votre serveur Debian puis téléchargez les bon paquets, j'ai nommé : apt-get install slapd ldap-utils openssl. Il devrait vous prendre toutes les dependances nécessaires. Le dernier paquet est celui contenant de quoi générer des certificats, dont vous aurez également besoin. A noter que lors de l'installation de slapd, Debian vous pose quelques questions sur votre arborescence et le domaine que vous possédez, prenons l'exemple du domaine toto.org, dans LDAP, cela donnera : dc=toto, dc=org. Je vous invite à lire la section documentation d'OpenLDAP si vous ne comprenez pas tout ce que je viens d'écrire. On commence donc par générer un petit certificat et des clés pour le serveur, faites donc :
-
cd /etc/ldap/cert
/usr/lib/ssl/misc/CA.sh -newca
openssl req -new -nodes -keyout newreq.pem -out newreq.pem
/usr/lib/ssl/misc/CA.sh -sign
cp demoCA/cacert.pem .
mv newcert.pem servercrt.pem
mv newreq.pem serverkey.pem
chmod 600 serverkey.pem
chmod 700 /etc/ldap/DemoCA
On modifie à présent la ligne du service slapd dans /etc/default/slapd pour n'écouter que sur des ports spécifiques. J'ai choisi de restreindre le trafique non crypté au serveur local et d'utiliser les échanges cryptés pour le reste du réseau, cela nous donne :
-
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
Nous allons à présent paramétrer le fichier /etc/ldap/ldap.conf qui va contenir la configuration de votre serveur. Les lignes qui suivent renseignent les outils LDAP sur la méthode de connexion ainsi que sur l'utilisation de certificats. Ainsi, on lui indique que notre arborescence est toto.org, qu'il faut se connecter sur le serveur ldap.toto.org par connexion cryptée et qu'il est obligé d'utiliser le certificat disponible dans /etc/ldap/cert/cacert.pem, voici le fichier en entier :
-
BASE dc=toto, dc=org
URI ldaps://ldap.toto.org:636/
TLS_CACERT /etc/ldap/cert/cacert.pem
TLS_REQCERT demand
Editez ensuite le fichier /etc/ldap/slapd.conf. Ce fichier contient les paramètres LDAP du serveur. Vous pouvez y définir tous les droits d'accès et le type de base de données utilisé par le serveur. Il vous permet aussi de définir le type d'accès utilisé par le certificat, allez à la fin de ce fichier puis ajoutez les lignes ci-dessous. Les deux premières lignes indiquent à slapd comment se connecter à votre arborescence. Les 3 dernières spécifient au serveur d'utiliser TLS, et le pointent vers les bons fichiers concernant le certificat d'autorité, le fichier de certificat et la clé. Pour obtenir un mot de passe MD5 crypté comme vous pouvez le voir à la ligne rootpw, il suffit de taper ceci en ligne de commande puis de coller le résultat dans votre fichier : slappasswd -h {MD5}
-
rootdn "cn=Manager,dc=toto,dc=org"
rootpw {MD5}xxxXXXXxxXXXxXXX==
directory /var/lib/ldap
# password hash algorithm
password-hash {MD5}
TLSCACertificateFile /etc/ldap/cert/cacert.pem
TLSCertificateFile /etc/ldap/cert/servercrt.pem
TLSCertificateKeyFile /etc/ldap/cert/serverkey.pem
Il ne vous reste plus qu'à démarrer le serveur par cette commande : /etc/init.d/slapd restart. Je fais un restart des fois que le serveur serait déjà démarré. Si vous prenez une erreur ici, c'est probablement une erreur de syntaxe. Vérifiez les logs (/var/log/daemon.log) et tentez un démarrage en mode verbose comme l'indique le message. On peut à présent tester le serveur et voir s'il accepte de nous parler. Tapez pour ceci la commande :
-
ldapsearch -x -D "cn=Manager,dc=toto,dc=org" -W -b '' -s base '(objectClass=*)' namingContexts
Pour ceux ayant régardés le manuel de ldapsearch, vous noterez que nous n'utilisons pas -ZZ pour crypter le trafique, la raison en est simple. Comme nous obligeons l'utilisation de TLS dans le fichier de configuration, la connexion cryptée est déjà active lors du test. Vous devriez donc obtenir :
-
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (objectClass=*)
# requesting: namingContexts
#
#
dn:
namingContexts: dc=toto,dc=org
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Félicitations ! Vous avez la première partie du serveur installé. Il peut en effet communiquer des informations. Il reste à présent à importer des utilisateurs. Il y a pour se faire deux possibilités. Soit vous créez vos fichiers à l'aide d'un langage/interpréteur quelconque (bash, perl, python, php, etc ...), soit vous utilisez les outils de migration écris en perl disponibles dans le paquet apt-get install migrationtools. Ces outils LDAP ont été développés par une compagnie du nom de PADL Software Pty Ltd qui fait bien évidemment des déployements LDAP sur toutes plateformes y compris Solaris (qui est une bonne prise de tête, croyez-moi sur parole ...). Il vous suffit alors d'importer les comptes utilisateurs, vous aurez donc besoin du fichier des utilisateurs du serveur d'autentification qui sont : /etc/{passwd,shadow}. Pour importer les données vers le serveur, tapez :
-
saslpasswd2 -c Manager
cd /usr/share/migrationtools
./migrate_base.pl > /tmp/base.ldif
ldapadd -x -v -D "cn=Manager,dc=toto,dc=org" -W -f /tmp/base.ldif
./migrate_passwd.pl /etc/passwd /tmp/pass.ldif
ldapadd -x -v -D "cn=Manager,dc=toto,dc=org" -W -f /tmp/passwd.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
ldapadd -x -v -D "cn=Manager,dc=toto,dc=org" -W -f /tmp/group.ldif
Voilà pour la partie serveur. Vous pouvez installer un gestionnaire web genre LAM. C'est facilement réalisable par : apt-get install ldap-account-manager. Assurez-vous d'avoir également apache-ssl afin de ne passer les données qu'en mode crypté. L'autre outil extrêmement pratique est GQ qui utilise Gnome. Il vous permet d'administrer un serveur LDAP facilement depuis n'importe quelle station.
La partie cliente est un peu plus facile. On utilise pour ceci trois paquets : apt-get install libnss-ldap libpam-ldap nscd. Ils permettront dans l'ordre de crypter le trafique entre la station et le serveur, le second permet l'autentification d'un utilisateur par pam et LDAP et le dernier limite le nombre de requêtes vers le serveur en gardant en cache les crédentiels. Editez-donc /etc/libnss-ldap.conf pour y entrer les informations ci-dessous. Ces lignes devraient être relativement claires vu l'installation que vous avez faite sur le serveur :
-
host ldap.toto.org
base ou=People,dc=toto,dc=org
uri ldaps://toto.toto.org/
ldap_version 3
nss_base_passwd ou=People,dc=toto,dc=org
nss_base_group ou=Group,dc=toto,dc=org
Il vous faut à présent modifier le fichier /etc/pam_ldap.conf qui va contenir les informations d'autentification.
-
host ldap.toto.org
base dc=toto,dc=org
uri ldaps://ldap.toto.org/
ldap_version 3
pam_password md5
Enfin, éditez les fichiers /etc/pam.d/common-* afin d'y inclure la ligne permettant à PAM de savoir qu'il aura besoin de LDAP :
-
service sufficient pam_ldap.so
Il faut ensuite éditer le fichier /etc/nsswitch.conf. Ce fichier est capital car il définit ce que vous utilisez dans l'ordre sur un système. Ce qui nous intéresse dans ce fichier sont les premières lignes, modifiez-les afin que cela ressemble à ceci :
-
passwd: ldap compat
group: ldap compat
shadow: ldap compat
Recopier ensuite le fichier ldap.conf du serveur et placez-le dans /etc/ldap/ ainsi que les certificats nécessaires. Vous pouvez également démarrer le service nscd /etc/init.d/nscd restart
Vous devriez à présent être capable d'utiliser l'autentification LDAP sur le client. Si le mot de passe pose problème, il est possible de changer le mot de passe d'un utilisateur soit par l'interface GQ, soit directement sur le serveur LDAP avec la commande ci-dessous. Elle vous demandera d'abord deux fois le nouveau mot de passe de l'utilisateur puis une fois celui de l'administrateur LDAP.
-
ldappasswd -S -x -D "cn=Manager,dc=toto,dc=org" -W "uid=username,ou=People,dc=toto,dc=org"
Eh bien voilà pour le moment. Ce guide devrait vous permettre d'utiliser LDAP dans sa forme la plus simple. Il est possible d'autoriser l'utilisateur à changer son mot de passe directement sur sa station et d'intégrer LDAP avec vos carnets d'adresses et bien plus encore, je couvrirais ceci dans un prochain article.