ajout de openldap: 2026-02-22 09:50:34
This commit is contained in:
299
articles/2026/openldap install sous debian 13.md
Normal file
299
articles/2026/openldap install sous debian 13.md
Normal file
@@ -0,0 +1,299 @@
|
||||
---
|
||||
title: "OpenLDAP : Installer et configurer sous Debian 13 (Trixie)"
|
||||
description: OpenLDAP est le "répertoire téléphonique" haute performance du monde informatique. C'est une implémentation libre et open source du protocole LDAP (Lightweight Directory Access Protocol).
|
||||
tags: [ldap, openldap, Debian_13]
|
||||
date: 2026-02-22 09:21
|
||||
lastmod: 2026-02-22 09:50
|
||||
type:
|
||||
- article
|
||||
category:
|
||||
- "[[Guide]]"
|
||||
- "[[Logiciels et Outils]]"
|
||||
status: brouillon
|
||||
---
|
||||
|
||||
# OpenLDAP : Installer et configurer sous Debian 13 (Trixie)
|
||||
|
||||
Bonjour, je suis [Cédrix](Cédrix.md). Dans ce guide, nous allons déployer **OpenLDAP**, la solution de référence pour l'unification des identités en environnement Linux.
|
||||
|
||||
L'objectif est simple : en finir avec la gestion manuelle des comptes sur chaque machine. Nous allons mettre en place un **annuaire centralisé** qui servira de "source de vérité" unique pour tous les services de votre réseau (serveurs, VPN, applications web, etc.).
|
||||
|
||||
## Introduction
|
||||
|
||||
Au lieu de créer un compte utilisateur sur chaque serveur, chaque application (VPN, Wi-Fi, Nextcloud, GitLab, serveurs Linux) interroge OpenLDAP pour savoir :
|
||||
|
||||
1. "Est-ce que cet utilisateur existe ?"
|
||||
|
||||
2. "Son mot de passe est-il correct ?"
|
||||
|
||||
3. "A-t-il le droit d'accéder à cette ressource ?"
|
||||
|
||||
|
||||
> [!INFO] Le saviez-vous ?
|
||||
> Microsoft Active Directory (AD) repose en grande partie sur les mêmes concepts que LDAP, mais OpenLDAP est sa version libre, plus légère et extrêmement flexible.
|
||||
|
||||
Contrairement à une base de données relationnelle (comme MySQL ou PostgreSQL) qui est optimisée pour l'écriture et les relations complexes, OpenLDAP est une **base de données hiérarchique** optimisée pour la **lecture rapide** et la **recherche**.
|
||||
|
||||
- **Lecture (90%) :** Consulter une fiche utilisateur, vérifier un mot de passe.
|
||||
|
||||
- **Écriture (10%) :** Modifier un numéro de téléphone ou créer un nouveau compte.
|
||||
|
||||
Pour définir OpenLDAP, il faut comprendre ces trois éléments :
|
||||
|
||||
- **Le Modèle d'Information :** Tout est objet (un utilisateur, une imprimante, un groupe). Chaque objet appartient à une `objectClass` qui définit ses attributs (nom, email, mot de passe).
|
||||
|
||||
- **Le Modèle de Nommage (DIT) :** Les données sont organisées en arbre (_Directory Information Tree_). On identifie un objet par son **DN** (_Distinguished Name_), son adresse unique dans l'arbre (ex: `cn=jean,ou=users,dc=acegrp,dc=lan`).
|
||||
|
||||
- **Le Protocole de Communication :** Il définit comment un client (une application) "parle" au serveur pour extraire ou modifier des informations.
|
||||
|
||||
Même à l'ère du Cloud, OpenLDAP reste indispensable pour :
|
||||
|
||||
- **L'indépendance :** Vous gardez le contrôle total de vos identités sans dépendre d'un fournisseur tiers (SaaS).
|
||||
|
||||
- **L'interopérabilité :** Quasiment tous les logiciels professionnels au monde savent "parler" LDAP.
|
||||
|
||||
- **La performance :** Capable de gérer des millions d'entrées avec un temps de réponse de quelques millisecondes.
|
||||
|
||||
Voici le décodage des acronymes que vous rencontrerez partout :
|
||||
|
||||
---
|
||||
|
||||
### DC : Domain Component (Le Domaine)
|
||||
|
||||
Le **DC** représente les composants de votre nom de domaine. C'est la racine de votre annuaire.
|
||||
|
||||
- Pour `acegrp.lan`, on sépare le nom au niveau du point.
|
||||
|
||||
- On obtient deux composants : `dc=acegrp` et `dc=lan`.
|
||||
|
||||
- Ensemble, ils forment la base de votre annuaire (le **Base DN**).
|
||||
|
||||
|
||||
### OU : Organizational Unit (Le Tiroir)
|
||||
|
||||
L'**OU** est un conteneur qui sert à regrouper des objets de même nature. C'est l'équivalent d'un dossier dans votre explorateur de fichiers.
|
||||
|
||||
- `ou=users` : pour ranger les humains.
|
||||
|
||||
- `ou=groups` : pour ranger les droits d'accès.
|
||||
|
||||
- `ou=computers` : pour ranger le parc matériel.
|
||||
|
||||
|
||||
### CN : Common Name (L'Objet)
|
||||
|
||||
Le **CN** désigne généralement l'objet final (l'individu ou le groupe). C'est le nom "commun" par lequel on identifie l'entrée.
|
||||
|
||||
- Si vous avez un utilisateur nommé Jean Dupont, son CN sera souvent `cn=jdupont`.
|
||||
|
||||
- Pour un groupe d'administrateurs, ce sera `cn=admins`.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### DN : L'adresse complète (Le chemin)
|
||||
|
||||
Le **DN** (_Distinguished Name_) est la concaténation de tous ces éléments. C'est l'équivalent d'un chemin de fichier (ex: `C:\Users\Jean\Documents`). **Il se lit de droite à gauche**, du plus précis au plus général.
|
||||
|
||||
> **Exemple concret :** Si Jean Dupont (`cn=jdupont`) est dans le dossier des utilisateurs (`ou=users`) de votre entreprise (`dc=acegrp,dc=lan`), son adresse unique est : `dn: cn=jdupont,ou=users,dc=acegrp,dc=lan`
|
||||
|
||||
#### Tableau récapitulatif
|
||||
|
||||
| Acronyme | Nom Complet | Rôle | Exemple |
|
||||
| -------- | ------------------- | ------------------------------ | ------------------------ |
|
||||
| **DC** | Domain Component | Définit la racine (le domaine) | `dc=acegrp` |
|
||||
| **OU** | Organizational Unit | Organise les objets (dossier) | `ou=users` |
|
||||
| **CN** | Common Name | Nom de l'objet précis | `cn=jdupont` |
|
||||
| **DN** | Distinguished Name | Adresse complète et unique | `cn=jdupont,ou=users...` |
|
||||
| **SN** | Surname | Nom de famille (attribut) | `Dupont` |
|
||||
|
||||
---
|
||||
|
||||
#### Pourquoi est-ce important ?
|
||||
|
||||
Lorsque vous configurerez une application tierce (comme un VPN ou Nextcloud) pour se connecter à votre OpenLDAP, elle vous demandera presque toujours deux choses :
|
||||
|
||||
1. **Le Base DN :** `dc=acegrp,dc=lan` (Où dois-je commencer à chercher ?)
|
||||
|
||||
2. **Le Bind DN :** `cn=admin,dc=acegrp,dc=lan` (Avec quel compte je me connecte pour avoir le droit de lire l'annuaire ?)
|
||||
|
||||
## 1. Prérequis et Installation
|
||||
|
||||
L'utilisation d'un conteneur **LXC** est idéale pour OpenLDAP : elle offre une isolation parfaite, une empreinte mémoire dérisoire (moins de 50 Mo au repos) et permet des sauvegardes par "snapshots" avant chaque modification structurelle.
|
||||
|
||||
Pour un conteneur LXC dédié à **OpenLDAP**, les besoins en ressources sont particulièrement modestes. OpenLDAP est réputé pour sa stabilité et sa faible consommation, ce qui en fait un candidat parfait pour la virtualisation légère.
|
||||
|
||||
Voici les recommandations pour dimensionner votre machine LXC sous Debian 13 :
|
||||
|
||||
### Ressources Matérielles (Sizing)
|
||||
|
||||
| **Ressource** | **Minimum (Lab)** | **Recommandé (Prod)** | **Note** |
|
||||
| ------------- | ----------------- | --------------------- | ---------------------------------------------------------------------------------- |
|
||||
| **CPU** | 1 vCPU | 1 ou 2 vCPU | Le calcul des condensats (hashes) de mots de passe est la seule tâche gourmande. |
|
||||
| **RAM** | 256 Mo | **512 Mo à 1 Go** | OpenLDAP met en cache la base de données en RAM pour plus de rapidité. |
|
||||
| **Disque** | 2 Go | **8 Go** | La base de données LDAP est très compacte. Prévoyez de l'espace pour les **logs**. |
|
||||
| **Swap** | 512 Mo | 512 Mo | Par précaution, bien que LDAP sature rarement la RAM. |
|
||||
|
||||
---
|
||||
|
||||
### Configuration Réseau et Système
|
||||
|
||||
Avant de lancer l'installation de `slapd`, assurez-vous que ces trois piliers sont en place :
|
||||
|
||||
#### A. Adresse IP Statique
|
||||
|
||||
Comme mentionné précédemment, un annuaire ne doit jamais changer d'IP. Dans votre configuration LXC (via Proxmox ou en ligne de commande), fixez l'adresse :
|
||||
|
||||
- **Exemple :** `192.168.1.10/24` avec sa passerelle.
|
||||
|
||||
|
||||
#### B. Résolution de nom (Hostname & FQDN)
|
||||
|
||||
L'installeur de Debian utilise le nom d'hôte pour configurer le domaine LDAP par défaut.
|
||||
|
||||
- Modifiez `/etc/hostname` pour refléter le nom du serveur (ex: `ldap-server`).
|
||||
|
||||
- Modifiez `/etc/hosts` pour lier l'IP au nom complet :
|
||||
|
||||
`192.168.1.10 ldap-server.acegrp.lan ldap-server`
|
||||
|
||||
|
||||
#### C. Synchronisation Temporelle
|
||||
|
||||
Le protocole LDAP est souvent utilisé avec **Kerberos** ou pour de la réplication. Une horloge désynchronisée peut corrompre les logs ou empêcher l'authentification.
|
||||
|
||||
- Vérifiez que le conteneur est à l'heure (il hérite généralement de l'heure de l'hôte LXC, mais assurez-vous que l'hôte utilise `NTP`).
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Pourquoi LXC plutôt qu'une VM ?
|
||||
|
||||
Le choix du LXC pour OpenLDAP est stratégique pour la maintenance :
|
||||
|
||||
1. **Sauvegardes instantanées :** Un "snapshot" de 512 Mo de RAM se fait en quelques secondes avant de modifier un schéma LDAP complexe.
|
||||
|
||||
2. **Partage de ressources :** Si votre LDAP est peu sollicité, il ne consommera virtuellement rien sur votre hôte Proxmox/LXC, contrairement à une VM qui "réserve" sa mémoire.
|
||||
|
||||
3. **Accès direct aux fichiers :** En cas de corruption majeure (rare avec le moteur MDB), il est plus facile d'accéder au système de fichiers du conteneur depuis l'hôte.
|
||||
|
||||
|
||||
### Installation des paquets
|
||||
|
||||
Connectez-vous à votre conteneur et mettez à jour les dépôts, puis installez les outils nécessaires :
|
||||
|
||||
```Bash
|
||||
apt update && apt install slapd ldap-utils -y
|
||||
```
|
||||
|
||||
**Détails des paquets :**
|
||||
|
||||
- **`slapd` (Standalone LDAP Daemon) :** C'est le serveur proprement dit. Il gère la base de données, les requêtes de recherche et l'authentification.
|
||||
|
||||
- **`ldap-utils` :** Un ensemble d'outils en ligne de commande indispensables pour interagir avec le serveur (ajouter, supprimer, modifier ou chercher des entrées).
|
||||
|
||||
|
||||
> **Note :** Durant l'installation, un mot de passe administrateur vous sera demandé. Il servira à créer le compte `admin` par défaut. Ne l'oubliez pas, il est crucial pour l'étape suivante.
|
||||
|
||||
---
|
||||
|
||||
## 2. Configuration du domaine (DIT)
|
||||
|
||||
Par défaut, Debian configure LDAP en se basant sur le nom d'hôte (FQDN). Pour définir précisément notre structure de domaine `acegrp.lan`, nous utilisons l'outil de reconfiguration assistée.
|
||||
|
||||
```Bash
|
||||
dpkg-reconfigure -plow slapd
|
||||
```
|
||||
|
||||
**Répondez aux questions comme suit :**
|
||||
|
||||
1. **Omettre la configuration du serveur ?** `Non` (Nous voulons créer une base exploitable immédiatement).
|
||||
|
||||
2. **Nom de domaine :** `acegrp.lan` (C'est ce qui définit votre "Base DN" : `dc=acegrp,dc=lan`).
|
||||
|
||||
3. **Nom de l'organisation :** `acegrp`
|
||||
|
||||
4. **Mot de passe administrateur :** Saisissez un mot de passe robuste.
|
||||
|
||||
5. **Base de données à utiliser :** `MDB` (Le moteur de stockage le plus performant et recommandé).
|
||||
|
||||
6. **Supprimer la base si slapd est purgé ?** `Non` (Sécurité pour vos données en cas de réinstallation du paquet).
|
||||
|
||||
7. **Déplacer l'ancienne base de données ?** `Oui`.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. Création de la structure (OU)
|
||||
|
||||
Un annuaire LDAP ne contient pas d'utilisateurs "en vrac". On utilise des **Unités Organisationnelles (OU)**, semblables à des dossiers, pour classer les objets.
|
||||
|
||||
- **`ou=users` :** Regroupe les comptes des utilisateurs.
|
||||
|
||||
- **`ou=groups` :** Regroupe les groupes de sécurité (ex: admins, RH, dev).
|
||||
|
||||
|
||||
### Création du fichier LDIF
|
||||
|
||||
Le format **LDIF** (LDAP Data Interchange Format) est le standard pour modifier l'annuaire. Vous pouvez créer ce fichier dans votre répertoire personnel (ex: `/root/structure.ldif`).
|
||||
|
||||
```Bash
|
||||
nano ~/structure.ldif
|
||||
```
|
||||
|
||||
Copiez-y le contenu suivant :
|
||||
|
||||
```Plaintext
|
||||
dn: ou=users,dc=acegrp,dc=lan
|
||||
objectClass: organizationalUnit
|
||||
ou: users
|
||||
|
||||
dn: ou=groups,dc=acegrp,dc=lan
|
||||
objectClass: organizationalUnit
|
||||
ou: groups
|
||||
```
|
||||
|
||||
### Application de la structure
|
||||
|
||||
Utilisez la commande `ldapadd` pour injecter ces données dans l'annuaire :
|
||||
|
||||
```Bash
|
||||
ldapadd -x -D "cn=admin,dc=acegrp,dc=lan" -W -f ~/structure.ldif
|
||||
```
|
||||
|
||||
- `-x` : Utilise l'authentification simple.
|
||||
|
||||
- `-D` : Définit le "Distinguished Name" (DN) avec lequel on se connecte (ici l'admin).
|
||||
|
||||
- `-W` : Demande le mot de passe de manière sécurisée.
|
||||
|
||||
- `-f` : Indique le fichier source.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. Test et Vérification
|
||||
|
||||
Pour vérifier que vos "tiroirs" sont bien créés, interrogez l'annuaire :
|
||||
|
||||
```Bash
|
||||
ldapsearch -x -b "dc=acegrp,dc=lan" "(objectClass=organizationalUnit)"
|
||||
```
|
||||
|
||||
L'option `-b` (base) définit le point de départ de la recherche. Vous devriez voir s'afficher vos deux nouvelles unités `users` et `groups`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Sécurité et Réseau
|
||||
|
||||
### Ouverture du pare-feu
|
||||
|
||||
Le protocole LDAP utilise par défaut le port **389**. Si vous utilisez `ufw` dans votre conteneur ou sur votre hôte Proxmox/LXC, ouvrez le port :
|
||||
|
||||
```Bash
|
||||
ufw allow 389/tcp
|
||||
```
|
||||
|
||||
### Prochaine étape conseillée
|
||||
|
||||
Pour le moment, vos données transitent en clair sur le réseau. Pour une mise en production, la prochaine étape logique est l'activation du **LDAPS (port 636)** ou de **STARTTLS** pour chiffrer les échanges.
|
||||
Reference in New Issue
Block a user