Installation d’un serveur LDAP sous AlmaLinux 9
Objectif
Ce document décrit une procédure d’installation et de configuration d’un serveur LDAP OpenLDAP sur AlmaLinux 9. Il couvre la préparation du système, l’installation des paquets, la configuration de l’annuaire, l’ouverture du pare-feu, les tests de validation et les bonnes pratiques de sécurité.
L’objectif est de mettre en place un annuaire LDAP centralisé permettant de stocker et consulter des comptes utilisateurs, groupes et informations d’identité depuis des clients Linux ou des applications compatibles LDAP.
Prérequis
- Un serveur AlmaLinux 9 installé et à jour.
- Un compte disposant des droits sudo ou un accès administrateur.
- Une adresse IP fixe pour le serveur LDAP.
- Un nom DNS pleinement qualifié, par exemple ldap.exemple.local.
- Un accès réseau aux ports LDAP 389/TCP et, si LDAPS est utilisé, 636/TCP.
- Un nom de domaine LDAP cible, par exemple dc=exemple,dc=local.
Préparation du système
Mis à jour du système
dnf update -yDéfinir le nom d’hôte
- Adapter à votre context :
- <@IP>
- <HostName>
Commandes :
hostnamectl set-hostname <HostName>
echo "<@IP> <HostName> ldap" >> /etc/hosts
hostname -f
ping -c3 <HostName>Désactivation des règles de sécurité
Mon serveur LDAP étant derrière un firewall, je vais donc lui faire confiance pour la gestion des DMZ.
Arrêt de firewalld
systemctl stop firewalld
systemctl disable firewalldDésactivation de selinux
sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/configRedémarrage
RebootContrôle Selinux
getenforce
DisabledContrôle Firewalld
systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1Installation des paquets OpenLDAP
Sur AlmaLinux 9, les paquets serveur OpenLDAP sont généralement installés depuis le dépôt EPEL. Installer ensuite les paquets serveur et client, puis activer le service slapd.
Installation
dnf install -y epel-release
dnf install -y openldap-servers openldap-clientsActivation et contrôle du service
systemctl enable --now slapd
systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-09-14 17:02:50 CEST; 2 weeks 0 days ago
Docs: man:slapd
man:slapd-config
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Main PID: 7587 (slapd)
Tasks: 5 (limit: 10646)
Memory: 29.7M (peak: 30.0M)
CPU: 3.041s
CGroup: /system.slice/slapd.service
└─7587 /usr/sbin/slapd -u ldap -h "ldap:/// ldaps:/// ldapi:///"Configuration initiale d’OpenLDAP
Générer un mot de passe administrateur chiffré, puis l’utiliser dans les fichiers LDIF de configuration. Remplacer les valeurs d’exemple par celles de votre environnement.
Génération du mot de passe :
slappasswd
Copier la valeur retournée de type {SSHA}xxxxxxxx./! Pensez à sauvegarder le MDP et la clé ssha pour la suite du tutoriel.
Première connexion
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config '(olcDatabase=*)' dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (olcDatabase=*)
# requesting: dn
#
# {-1}frontend, config
dn: olcDatabase={-1}frontend,cn=config
# {0}config, config
dn: olcDatabase={0}config,cn=config
# {1}monitor, config
dn: olcDatabase={1}monitor,cn=config
# {2}mdb, config
dn: olcDatabase={2}mdb,cn=config
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4/!\ Noter l’ID mdb 2 dans mon cas le résultat peut changer en fonction des plateforme
Définition du MDP administrateur LDAP
Fichier de configuration
cat > rootpassword.ldif << EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}xxxxxxxx (Copier le MDP Généré plus tôt.)
EOFImport du fichier
ldapadd -Y EXTERNAL -H ldapi:/// -f rootpassword.ldifCréation d’un utilisateur Admin
Exemple de fichier /tmp/chdomain.ldif :
cat > chdomain.ldif << EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=exemple,dc=local
-
replace: olcRootDN
olcRootDN: cn=admin,dc=exemple,dc=local
-
replace: olcRootPW
olcRootPW: {SSHA}xxxxxxxx (Copier le MDP Généré plus tôt.)Import du fichier
ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/chdomain.ldifCréation des alias
Variable d’environnement
La déclaration de la variable $LDAP_PWD peux se faire depuis le fichier .bashrc ou depuis un fichier env.
export LDAP_PWD="Mon-MDP-Ldap"Les alias
Editer le fichier .bashrc et ajouter les lignes
# Gestion LDAP
alias addldap='ldapadd -x -H ldap://127.0.0.1 -D cn=admin,dc=communaute-omr,dc=fr -w "${LDAP_PWD}"'
alias modifyldap='ldapmodify -x -H ldap://127.0.0.1 -D cn=admin,dc=communaute-omr,dc=fr -w "${LDAP_PWD}"'
alias searchldap='ldapsearch -x -H ldap://127.0.0.1 -D cn=admin,dc=communaute-omr,dc=fr -w "${LDAP_PWD}"'
LDAP_PWD="Mon_MDP_LDAP"Les 3 alias gèrent les différentes commandes LDAP. Il permettent de ne pas afficher en claire les MDP en ligne de commande et de ne pas avoir à le taper systématiquement c.
Import des schémas LDAP
Importer les schémas standards nécessaires à la gestion des utilisateurs, groupes et objets d’annuaire courants.
Pour les attributs des OU et des CN
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldifPour les attributs d’un utilisateur
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldifPour la gestion des utilisateurs Linux
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldifContrôle :
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <cn=schema,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: dn
#
# schema, config
dn: cn=schema,cn=config
# {0}core, schema, config
dn: cn={0}core,cn=schema,cn=config
# {1}cosine, schema, config
dn: cn={1}cosine,cn=schema,cn=config
# {2}inetorgperson, schema, config
dn: cn={2}inetorgperson,cn=schema,cn=config
# {3}nis, schema, config
dn: cn={3}nis,cn=schema,cn=config
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5Création de la base de l’annuaire
Créer l’entrée racine du domaine LDAP ainsi que les unités d’organisation principales pour les utilisateurs et les groupes.
Création du Domaine
cat >init.ldif << EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=communaute-omr,dc=fr
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=communaute-omr,dc=fr
EOFDéfinition de l’utilisateur Admin
cat > basedn.ldif << EOF
dn: dc=communaute-omr,dc=fr
objectClass: top
objectClass: dcObject
objectclass: organization
o:communaute-omr
dc: communaute-omr
dn: cn=admin,dc=communaute-omr,dc=fr
objectClass: organizationalRole
cn: admin
description: Administrateur LDAP
EOFImport :
ldapadd -x -D "cn=admin,dc=exemple,dc=local" -W -f init.ldif
ldapadd -x -D "cn=admin,dc=exemple,dc=local" -W -f basedn.ldifCréation des groupes de base
Fichier de base
cat > GroupBase.ldif << EOF
dn: ou=Application,dc=communaute-omr,dc=fr
objectClass: organizationalUnit
ou: Application
dn: ou=Utilisateurs,dc=communaute-omr,dc=fr
objectClass: organizationalUnit
ou: Utilisateurs
dn: ou=Administrateurs,dc=communaute-omr,dc=fr
objectClass: organizationalUnit
ou: Administrateurs
EOFIci Nous créons Nous 3 OU de Base :
- Application : Gestion des droits applicatif
- Utilisateurs : Référentiel des utilisateurs du domaine
- Administrateurs : Les compte admin du Domaine
Import du fichier
ldapadd -x -D "cn=admin,dc=exemple,dc=local" -W -f GroupBase.ldifAjout d’un utilisateur de test
Créer un utilisateur LDAP permet de valider rapidement le fonctionnement de l’annuaire.
Exemple de fichier bibi.ldif :
cat > bibi.ldif << EOF
dn: uid=bibi,ou=Utilisateurs,dc=communaute-omr,dc=fr
changetype: modify
add: objectClass
objectClass: posixAccount
-
add: uidNumber
uidNumber: 20500
-
add: gidNumber
gidNumber: 10000
-
add: homeDirectory
homeDirectory: /home/bibi
-
add: loginShell
loginShell: /bin/bash
EOFImport :
ldapadd -x -D "cn=admin,dc=exemple,dc=local" -W -f bibi.ldifTests de validation
Vérifier que le service répond localement, puis tester une recherche LDAP avec le compte administrateur.
Contrôle du service
systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-09-14 17:02:50 CEST; 2 weeks 1 day ago
Docs: man:slapd
man:slapd-config
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Main PID: 7587 (slapd)
Tasks: 5 (limit: 10646)
Memory: 30.0M (peak: 30.2M)
CPU: 3.220s
CGroup: /system.slice/slapd.service
└─7587 /usr/sbin/slapd -u ldap -h "ldap:/// ldaps:/// ldapi:///"Contrôle des flux
ss -lntp | grep slapd
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=7587,fd=9))
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=7587,fd=7))Contrôle de la configuration LDAP
ldapsearch -x -LLL -H ldap://ldap.exemple.local -D "cn=admin,dc=exemple,dc=local" -W -b "dc=exemple,dc=local"Exploitation et maintenance
Commandes Utiles
Surveiller le service
systemctl status slapdet
journalctl -u slapdSauvegarde
Slapcat > Fichier.ldifOu via l’alias :
searchldap -b "dc=communaute-omr,dc=fr" > Domaine.ldifQuelques conseils de sécurité
Pare-feu et sécurité
Ouvrir le service LDAP dans firewalld. Pour un environnement de production, privilégier StartTLS ou LDAPS afin d’éviter les échanges LDAP en clair, notamment pour les authentifications simples.
Commandes :
firewall-cmd --permanent --add-service=ldap
firewall-cmd --permanent --add-service=ldaps
firewall-cmd --reload
firewall-cmd --list-servicesAccessibilité
- Documenter les DN administrateurs, les suffixes LDAP, les ACL et les schémas ajoutés.
- Limiter les accès réseau au serveur LDAP aux sous-réseaux autorisés.
- Renouveler les certificats TLS avant expiration.
Dépannage courant
| Symptôme | Cause probable | Action corrective |
|---|---|---|
| Le service slapd ne démarre pas | Erreur de configuration LDIF ou problème de droits | Consulter journalctl -u slapd -e et vérifier les fichiers importés |
| Connexion refusée depuis un client | Pare-feu fermé ou service non démarré | Vérifier firewalld, systemctl status slapd et ss -lntp |
| Authentification impossible | DN, mot de passe ou suffixe LDAP incorrect | Tester avec ldapsearch en mode verbeux et contrôler le DN d’administration |
| Erreur TLS | Certificat absent, expiré ou non approuvé par le client | Vérifier la chaîne de certification et le fichier ldap.conf côté client |
Conclusion
Le serveur LDAP OpenLDAP sous AlmaLinux 9 est prêt à être utilisé comme annuaire centralisé. Avant une mise en production, il est recommandé d’activer TLS, de durcir les règles d’accès, de mettre en place une sauvegarde automatisée et de tester l’intégration avec les clients SSSD ou les applications consommatrices.
