OpenLDAP est le serveur d’annuaire LDAP libre de référence : il centralise comptes, groupes et attributs pour l’authentification (Linux/PAM, SSH, applications web, Keycloak, Samba…). Dans cet article, on met en place OpenLDAP sur Debian 13 (Trixie) de bout en bout, on apprend à tout gérer en ligne de commande (ajout d’unités d’organisation, d’utilisateurs, de groupes, mots de passe, modifications, recherches, suppressions), on active TLS/LDAPS, et — en option — on ajoute une interface web avec LDAP Account Manager (LAM) pour ceux qui préfèrent le clic.
Concepts essentiels
Sur Debian, le paquet slapd installe le démon OpenLDAP. Deux arborescences coexistent :
- cn=config (OLC, on-line configuration) : la configuration du serveur elle-même (backends, ACL, TLS), modifiable à chaud via LDAP.
- Le DIT de données (ex.
dc=example,dc=com) : vos utilisateurs, groupes et unités d’organisation.
On administre l’annuaire avec les outils clients (ldapsearch, ldapadd, ldapmodify, ldappasswd, ldapdelete) fournis par ldap-utils, en décrivant les entrées au format LDIF.
Prérequis : une Debian 13 à jour, un accès root/sudo, et un nom de domaine logique pour l’annuaire (ici example.com, soit un suffixe dc=example,dc=com).
Étape 1 — Installer OpenLDAP
On installe le serveur et les outils clients :
apt update apt install -y slapd ldap-utils
L’installeur demande un mot de passe pour l’administrateur de l’annuaire (cn=admin). On affine ensuite la configuration de base :
dpkg-reconfigure slapd
Répondez aux questions ainsi :
- Omit OpenLDAP server configuration ? → No
- DNS domain name →
example.com(détermine le suffixedc=example,dc=com) - Organization name →
example - Mot de passe administrateur → un secret robuste
- Remove database when purged ? → No
Étape 2 — Vérifier l’installation
On interroge d’abord la configuration cn=config via la socket locale (authentification SASL EXTERNAL, en root) :
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn
Puis le DIT de données, pour confirmer le suffixe :
ldapsearch -x -b dc=example,dc=com
Une entrée racine dc=example,dc=com et l’entrée cn=admin doivent apparaître : l’annuaire répond.
Étape 3 — Créer la structure (unités d’organisation)
On organise l’annuaire avec deux unités d’organisation (OU) : people pour les comptes, groups pour les groupes. On décrit ces entrées dans un fichier LDIF base.ldif :
dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups
On injecte ce LDIF en s’authentifiant comme administrateur (-W demande le mot de passe de façon interactive) :
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
Étape 4 — Ajouter un utilisateur
On crée un utilisateur POSIX complet (utilisable pour une connexion Linux) en combinant les classes inetOrgPerson, posixAccount et shadowAccount. Fichier jdoe.ldif :
dn: uid=jdoe,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: jdoe cn: John Doe sn: Doe givenName: John mail: jdoe@example.com loginShell: /bin/bash uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/jdoe
On ajoute l’entrée :
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f jdoe.ldif
Étape 5 — Définir le mot de passe d’un utilisateur
Plutôt que de stocker un hash en clair dans le LDIF, on définit le mot de passe avec ldappasswd. L’option -S demande le nouveau mot de passe de manière interactive et OpenLDAP le stocke haché (SSHA) :
ldappasswd -x -D "cn=admin,dc=example,dc=com" -W -S "uid=jdoe,ou=people,dc=example,dc=com"
On peut ensuite vérifier que l’utilisateur arrive à s’authentifier (un bind réussi ne renvoie pas d’erreur) :
ldapwhoami -x -D "uid=jdoe,ou=people,dc=example,dc=com" -W
Étape 6 — Créer un groupe
On crée un groupe POSIX developers et on y place jdoe. Fichier group.ldif :
dn: cn=developers,ou=groups,dc=example,dc=com objectClass: posixGroup cn: developers gidNumber: 10001 memberUid: jdoe
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f group.ldif
Étape 7 — Modifier une entrée
Les modifications passent aussi par un LDIF, avec changetype: modify. Exemple : remplacer l’adresse mail de jdoe et ajouter un numéro de téléphone. Fichier modify.ldif :
dn: uid=jdoe,ou=people,dc=example,dc=com changetype: modify replace: mail mail: john.doe@example.com - add: telephoneNumber telephoneNumber: +33 1 23 45 67 89
ldapmodify -x -D "cn=admin,dc=example,dc=com" -W -f modify.ldif
Étape 8 — Rechercher et supprimer
Une recherche ciblée sur un filtre (ici tous les objets dont l’uid vaut jdoe) :
ldapsearch -x -b "ou=people,dc=example,dc=com" "(uid=jdoe)"
Et la suppression d’une entrée par son DN :
ldapdelete -x -D "cn=admin,dc=example,dc=com" -W "uid=jdoe,ou=people,dc=example,dc=com"
Étape 9 — Activer TLS / LDAPS
En production, on chiffre les échanges. On génère une paire clé/certificat (ici auto-signée pour l’exemple ; en réel, utilisez une CA interne ou Let’s Encrypt), on donne les droits à l’utilisateur openldap :
mkdir -p /etc/ldap/certs openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ldap/certs/ldap.key -out /etc/ldap/certs/ldap.crt -subj "/CN=ldap.example.com" chown -R openldap:openldap /etc/ldap/certs chmod 600 /etc/ldap/certs/ldap.key
On déclare ces fichiers dans cn=config via un LDIF tls.ldif :
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/certs/ldap.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/certs/ldap.key
ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif
On active enfin l’écouteur ldaps:// en éditant /etc/default/slapd pour que la ligne SLAPD_SERVICES ressemble à ceci :
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Puis on redémarre et on teste une requête chiffrée :
systemctl restart slapd ldapsearch -x -H ldaps://ldap.example.com -b dc=example,dc=com -LLL dn
Option — Interface web avec LDAP Account Manager (LAM)
Pour gérer l’annuaire au clic, LDAP Account Manager offre une WebUI claire pour créer utilisateurs et groupes. On l’installe (il tire Apache et PHP) :
apt install -y ldap-account-manager
L’interface est alors accessible sur http://IP_DU_SERVEUR/lam. La configuration se fait en deux temps :
- Cliquez sur LAM configuration (en haut à droite) puis Edit server profiles. Le mot de passe par défaut du profil est
lam— changez-le immédiatement. - Renseignez le Server address (
ldap://localhost:389), le Tree suffix (dc=example,dc=com) et la liste des administrateurs (cn=admin,dc=example,dc=com). - Dans l’onglet Account types, pointez les utilisateurs sur
ou=people,dc=example,dc=comet les groupes surou=groups,dc=example,dc=com.
Connectez-vous ensuite avec le DN cn=admin et son mot de passe : vous gérez comptes et groupes depuis le navigateur. Important : n’exposez jamais LAM en HTTP clair sur Internet — placez-le derrière un reverse proxy HTTPS (voir un précédent article) et restreignez l’accès par IP ou VPN.
Points de vigilance
- Ne jamais éditer les fichiers à la main dans
/etc/ldap/slapd.d: toute la configcn=configse pilote vialdapmodify -Y EXTERNAL. - uidNumber / gidNumber : gardez une plage cohérente (ex. ≥ 10000) pour ne pas entrer en collision avec les comptes système locaux.
- TLS obligatoire dès qu’une authentification circule sur le réseau : sans lui, les binds passent en clair.
- ACL : par défaut, l’attribut
userPasswordn’est lisible que par son propriétaire et l’admin ; vérifiez vosolcAccessavant d’ouvrir des accès applicatifs. - Sauvegardes : exportez régulièrement l’annuaire avec
slapcat(données) et la config, pour pouvoir restaurer viaslapadd.
Récapitulatif des commandes
# Installation apt install -y slapd ldap-utils dpkg-reconfigure slapd # Verification ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn ldapsearch -x -b dc=example,dc=com # Structure + comptes (fichiers LDIF prepares au prealable) ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f jdoe.ldif ldappasswd -x -D "cn=admin,dc=example,dc=com" -W -S "uid=jdoe,ou=people,dc=example,dc=com" ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f group.ldif # Modifier / rechercher / supprimer ldapmodify -x -D "cn=admin,dc=example,dc=com" -W -f modify.ldif ldapsearch -x -b "ou=people,dc=example,dc=com" "(uid=jdoe)" ldapdelete -x -D "cn=admin,dc=example,dc=com" -W "uid=jdoe,ou=people,dc=example,dc=com" # Sauvegarde slapcat -n 1 -l /root/backup-data.ldif # WebUI (option) apt install -y ldap-account-manager
Voir aussi
Pour transformer cet annuaire en fournisseur d’identité SSO (OpenID Connect, SAML) et fédérer LDAP, consultez l’article Installation complète et détaillée de Keycloak 26 sur Debian 13 (PostgreSQL, Nginx, HTTPS).
Conclusion
Vous avez désormais un annuaire OpenLDAP fonctionnel sur Debian 13, administrable entièrement en ligne de commande (LDIF + outils ldap*) et, si vous le souhaitez, via l’interface web LDAP Account Manager. C’est le socle idéal pour centraliser l’authentification : connexion Linux via SSSD/PAM, partages Samba, ou fournisseur d’identité fédéré derrière un Keycloak. Prochaine étape logique : brancher vos postes et services sur l’annuaire, et durcir les ACL selon vos besoins.
