| |

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 -y

Dé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 firewalld

Désactivation de selinux

sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config

Redémarrage

Reboot

Contrôle Selinux

getenforce
Disabled

Contrô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(1

Installation 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-clients

Activation 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.)
EOF

Import du fichier

ldapadd -Y EXTERNAL -H ldapi:/// -f rootpassword.ldif

Cré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.ldif

Cré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.ldif

Pour les attributs d’un utilisateur

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

Pour la gestion des utilisateurs Linux

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

Contrô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: 5

Cré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
EOF

Dé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
EOF

Import :

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.ldif

Cré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
EOF

Ici 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.ldif

Ajout 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
EOF

Import :

ldapadd -x -D "cn=admin,dc=exemple,dc=local" -W -f bibi.ldif

Tests 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 slapd

et

journalctl -u slapd

Sauvegarde

Slapcat > Fichier.ldif

Ou via l’alias :

searchldap -b "dc=communaute-omr,dc=fr" > Domaine.ldif

Quelques 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-services

Accessibilité

  • 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ômeCause probableAction corrective
Le service slapd ne démarre pasErreur de configuration LDIF ou problème de droitsConsulter journalctl -u slapd -e et vérifier les fichiers importés
Connexion refusée depuis un clientPare-feu fermé ou service non démarréVérifier firewalld, systemctl status slapd et ss -lntp
Authentification impossibleDN, mot de passe ou suffixe LDAP incorrectTester avec ldapsearch en mode verbeux et contrôler le DN d’administration
Erreur TLSCertificat absent, expiré ou non approuvé par le clientVé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.