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 nameexample.com (détermine le suffixe dc=example,dc=com)
  • Organization nameexample
  • 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 :

  1. 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.
  2. 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).
  3. Dans l’onglet Account types, pointez les utilisateurs sur ou=people,dc=example,dc=com et les groupes sur ou=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 config cn=config se pilote via ldapmodify -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 userPassword n’est lisible que par son propriétaire et l’admin ; vérifiez vos olcAccess avant d’ouvrir des accès applicatifs.
  • Sauvegardes : exportez régulièrement l’annuaire avec slapcat (données) et la config, pour pouvoir restaurer via slapadd.

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.