Dolibarr en production : LDAP et bonnes pratiques avec des exemples concrets

Dolibarr est un ERP/CRM léger, open‑source et très modularisable. Lorsqu’on le déploie en environnement de production, la gestion des accès utilisateurs devient rapidement un enjeu de sécurité, de traçabilité et d’efficacité opérationnelle. L’authentification LDAP (Active Directory ou serveur LDAP dédié) constitue la solution la plus répandée pour centraliser ce contrôle d’accès.

Cet article détaille : 1. Le pourquoi du LDAP avec Dolibarr (sécurité, centralisation, auditability).

  1. Les étapes de mise en place (configuration serveur, module PHP, paramètres Dolibarr). 3. Les bonnes pratiques (pré‑production, tests, monitoring, sauvegarde, récupération).
  2. Des exemples concrets (AD Windows, OpenLDAP, configuration fine des profils).

Objectif : fournir à l’administrateur ou au consultant fonctionnel tout le nécessaire pour installer, sécuriser et exploiter LDAP dans un déploiement Dolibarr réellement « en production ».


1. Pourquoi recourir à LDAP dans Dolibarr ?

Besoin Apport de LDAP
Gestion centralisée des comptes Un seul annuaire (AD, FreeIPA, 389 Directory Server…) gère les utilisateurs, groupes et permissions.
Uniformisation des syntaxes Un même format de nom d’utilisateur et de mot de passe pour toutes les applications de l’entreprise.
Sécurité Le mot de passe n’est jamais stocké en clair dans Dolibarr ; il est validé à chaque connexion sur le serveur LDAP.
Audit et conformité Les logs d’accès LDAP sont détaillés (who‑did‑what) et peuvent être intégrés aux SIEM.
Scalabilité Ajout / modification d’utilisateurs sans toucher à la configuration de Dolibarr.
Gestion des groupes Permissions Dolibarr → groupes LDAP (ex : CN=ERP_Users,OU=Groups,DC=exemple,DC=com).

En résumé : LDAP élimine la duplication d’utilisateurs, réduit les points de défaillance et rend le contrôle d’accès conforme aux standards d’entreprise.


2. Étapes de mise en place (schéma global)

flowchart TD
A[Environnement de production] --> B[Serveur LDAP (AD / OpenLDAP)]
B --> C[Configuration du module PHP “ldap”]
C --> D[Activation de l’authentification LDAP dans Dolibarr]
D --> E[Définition des groupes & permissions]
E --> F[Tests fonctionnels (pré‑prod)]
F --> G[Mise en production & monitoring]

2.1 Prérequis techniques

Élément Détails recommandés
Version Dolibarr ≥ 15 (les versions 15‑16 offrent la meilleure compatibilité avec les classes loginMode et auth modernes).
Extension PHP ldap Activée (php -m | grep ldap).
Version du serveur LDAP Active Directory 2012 R2 ou plus, ou OpenLDAP 2.4+.
TLS/SSL Utiliser StartTLS ou LDAPS (port 636).
Backup LDAP Sauvegarde régulière (dcpromo, ldapsearch export, ou snapshots).
Système d’exploitation Debian/Ubuntu 22.04, RHEL 9 ou Windows Server.

Note : Si vous êtes dans un environnement hybride (Azure AD + on‑prem), assurez‑vous que le pass‑through ou le Connect‑ors est configuré pour éviter les cache de mot de passe.

2.2 Activation du module LDAP côté serveur

# Debian/Ubuntu
apt-get install php8.2-ldap
systemctl restart php8.2-fpm # ou apache2/php-fpm
# Vérif
php -r "var_dump(extension_loaded('ldap'));"
# Red Hat/CentOS
dnf install php-ldap
systemctl restart httpd

Dans le fichier php.ini (ou via le pool de php‑fpm), assurez‑vous que :

ldap.tlsreqcmask = 33   ; permet TLS 1.2 & 1.3
ldap.enable = On


2.3 Configuration de Dolibarr

  1. Connexion à l’interface d’administrationAdministration → Sécurité → Modes de connexion
  2. Choisir Login mode : "Authentification LDAP / Active Directory"
  3. Paramétrage des champs serveur

Paramètre Exemple (AD) Exemple (OpenLDAP)
Nom du serveur LDAP dc=exemple,dc=com ldap://ldap.exemple.com
Port 389 (ou 636 si SSL) 389 ou 636
Utilisation SSL StartTLS ou LDAPS idem
Nom d’utilisateur Bind CN=svc-dolibarr,OU=Service Accounts,DC=exemple,DC=com cn=svc-dolibarr,ou=service accounts,dc=exemple,dc=com
Mot de passe Bind xxx xxx
Base DN de recherche des utilisateurs OU=Utilisateurs,DC=exemple,DC=com ou=utilisateurs,dc=exemple,dc=com
Filtre d’interrogation (sAMAccountName=%s) (uid=%s)
Champ login sAMAccountName (ou mail) uid
Champ nom complet displayName cn
Champ e‑mail mail mail
Login mode "Bind with account" (le plus recommandé) "Anonymous" (si serveur ouvert) – à éviter en prod

Bonnes pratiques : utilisez le mode « Bind with account » ; le serveur LDAP authentifie la session en se connectant avec un compte dédié (svc‑dolibarr). Cela évite d’utiliser des comptes administratifs et simplifie le contrôle d’accès.

  1. Définir les groupes de permission

    • Dans Administration → Utilisateurs/Groupe, activez l’option “Synchronisation des groupes LDAP”.
    • Mappez des groupes LDAP avec des rôles Dolibarr :

      Groupe LDAP Rôle Dolibarr Description
      CN=ERP_Users,OU=Groups,DC=exemple,DC=com Standard Lecteur/Consultant (pas de modification).
      CN=ERP_Managers,OU=Groups,DC=exemple,DC=com Manager Gestion des factures,validation, etc.
      CN=ERP_Admins,OU=Groups,DC=exemple,DC=com Admin Accès complet, configuration serveur.

    • Astuce : créez des groupes de sécurité LDAP nested (ex : ERP_Users -> ERP_Managers); Dolibarr résout les groupes en granularité transitive.

  2. Sauvegarder la configuration (fichier conf/ldap.conf ou les champs de la table llx_user si vous avez modifié le code) et exporter la configuration via le bouton Export settings.

2.4 Tests en pré‑production

  • Créez un compte test dans l’annuaire (ex : john.doe) et vérifiez l’accès à Dolibarr (login, licence d’utilisateur).
  • Vérifiez que tout mot de passe expiré retourne l’erreur adéquate.
  • Lancez un scan de pénétrage avec ldapsearch pour confirmer que les paramètres de Bind sont restrictifs (pas d’anonymat).
  • Vérifiez que les groupes fonctionnent : un utilisateur du groupe ERP_Managers doit disposer des droits Manager dans Dolibarr.


3. Bonnes pratiques (liste de contrôle)

# Action Pourquoi / Détails
1 Utiliser un compte de service dédié (svc‑dolibarr) Isolation du compte de service, pas de droits d’administration.
2 Activer TLS/SSL (StartTLS ou LDAPS) Empêche l’interception du mot de passe et des attributs.
3 Limiter les permissions du compte Bind Seulement Read et Bind sur la DN contenant les comptes utilisateurs.
4 Mettre en place un cache de recherche (ex : nscd, sssd) pour réduire la latence LDAP.
5 Vérifier et archive la configuration (export JSON ou papier) avant toute mise à jour.
6 Configurer la journalisation : php-fpm + syslog/var/log/dolibarr-ldap.log.
7 Planifier des sauvegardes LDAP (daily ldapdump + rotation 30 jours).
8 Auditer régulièrement les logs d’accès (/var/log/auth.log ou AD Event Viewer).
9 Tester la récupération après perte du serveur LDAP (mode fallback « bind anonyme » ou « local fallback »).
10 Documenter le processus (run‑book) et le placer dans votre CMDB.
11 Utiliser des noms de groupe explicites (ERP_Users, ERP_Managers, ERP_Admins) pour éviter les ambiguïtés lors du mapping.
12 Éviter les caractères spéciaux dans les attributs qui sont utilisés comme login (ex : espaces, /).
13 Synchroniser les changements d’appartenance : activer le polling (ex : 5 min) dans la configuration Dolibarr ($LDAPSynchronizationPeriod).
14 Limiter la portée du filtre : ne jamais utiliser (objectClass=*) ; prefer (&(objectClass=person)(sAMAccountName=%s)).
15 Sauvegarder les mots de passe : ils ne le sont jamais, mais gardez le hash des mots de passe d’expiration dans un référentiel interne pour éviter les comptes bloqués en cas de rotation.


4. Exemples concrets

4.1 Exemple 1 : Authentification à un Active Directory (Windows Server 2019)

4.1.1 Architecture

  • AD Domain : exemple.com
  • OU des utilisateurs : OU=Employes,DC=exemple,DC=com
  • Compte de service : svc-dolibarr (member de Domain Users uniquement). #### 4.1.2 Paramètres Dolibarr

Champ Valeur
Nom du serveur dc=exemple,dc=com
Port 636 (LDAPS)
SSL/TLS Oui (LDAPS)
Bind DN CN=svc-dolibarr,OU=Service Accounts,DC=exemple,DC=com
Mot de passe bind *********
Base DN de recherche OU=Employes,DC=exemple,DC=com
Filtre (sAMAccountName=%s)
Champ login sAMAccountName
Champ e‑mail mail
Groupes LDAP à importer CN=ERP_Users,OU=Groups,DC=exemple,DC=comRole : User
CN=ERP_Managers,OU=Groups,DC=exemple,DC=comRole : Manager
CN=ERP_Admins,OU=Groups,DC=exemple,DC=comRole : Admin

4.1.3 Code de migration (optionnel)

// fichier: conf/ldap.php (ou via UI)
$ldapconf['ldaphost'] = 'dc=exemple,dc=com';
$ldapconf['ldapprot'] = LDAP_PROTOCOL_LDAPS; // 636
$ldapconf['ldapport'] = 636;
$ldapconf['ldapbase'] = 'OU=Employes,DC=exemple,DC=com';
$ldapconf['ldapbinddn'] = 'CN=svc-dolibarr,OU=Service Accounts,DC=exemple,DC=com';
$ldapconf['ldapbindpw'] = '*********';
$ldapconf['ldapfilter'] = '(&(objectClass=user)(sAMAccountName=%s))';
$ldapconf['ldaploginattribute'] = 'sAMAccountName';
$ldapconf['ldapmailattribute'] = 'mail';
$ldapconf['ldapgroupattribute'] = 'memberOf';
$ldapconf['ldapgroupfilter'] = '(objectClass=group)';
$ldapconf['ldapgroupbase'] = 'OU=Groups,DC=exemple,DC=com';

Note : Le paramètre $ldapgroupattribute permet à Dolibarr d’obtenir les groupes de chaque compte sans requêtes supplémentaires, ce qui évite les délais d’accès.

4.1.4 Résultat attendu

Utilisateur AD Groupe LDAP Rôle Dolibarr attribué Accès fonctionnel
john.doe CN=ERP_Users Standard Consultation des devis, création de factures.
maria.leclerc CN=ERP_Managers Manager Validation des commandes, gestion des stocks.
alice.admin CN=ERP_Admins Admin Configuration serveur, écriture dans la table llx_payment.


4.2 Exemple 2 : Intégration avec OpenLDAP (Ubuntu 22.04)

4.2.1 Serveur LDAP

  • Base DN : dc=example,dc=org
  • Utilisateurs : ou=people,dc=example,dc=org
  • Groupes : ou=groups,dc=example,dc=org

4.2.2 Compte de liaison

« `ldifdn: cn=bind,ou=serviceaccounts,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: bind
userPassword: {SSHA}xyzAbc… (hash du mot de passe)


#### 4.2.3 Configuration Dolibarr (via UI)
- **Server** : `localhost` (ou IP du serveur)
- **Port** : `389` - **Use SSL** : *StartTLS* (cocher)
- **Bind user** : `cn=bind,ou=serviceaccounts,dc=example,dc=org`
- **Base filter** : `(uid=%s)`
- **Login attribute** : `uid`
- **Group attribute** : `memberOf`
#### 4.2.4 Mapping de groupes
| Groupe OpenLDAP | Rôle Dolibarr | Règle dans Dolibarr |
|-----------------|---------------|----------------------|
| `cn=erp_users,ou=groups,dc=example,dc=org` | **Standard** | `group=erp_users` (membership test). |
| `cn=erp_writers,ou=groups,dc=example,dc=org` | **Writer** (exempat pour documents) | `group=erp_writers` → **Role: Writer** |
| `cn=erp_auditors,ou=groups,dc=example,dc=org` | **Auditor** | `group=erp_auditors` → **Role: Auditor** |
#### 4.2.5 Exemple de requête LDAP pour récupérer les groupes d’un utilisateur
```bash
ldapsearch -x -LLL -D "cn=bind,ou=serviceaccounts,dc=example,dc=org" -w "SecretPwd123!" \
-b "ou=people,dc=example,dc=org" \
"(uid=john.doe)" memberOf

Réponse attendue (exemple) :

memberOf: cn=erp_users,ou=groups,dc=example,dc=org
memberOf: cn=erp_writers,ou=groups,dc=example,dc=org

Dolibarr lit cette liste (via %{ldapgroupattribute}) et attribue le rôle Writer automatiquement.


4.3 Exemple 3 : Gestion des départs et réinitialisations

Situation Action recommandée
Compte désactivé dans AD Le serveur LDAP renvoie 0x52e (user not found). Dolibarr demonstra le message “Login failed – account locked” et bloque l’accès.
Mot de passe expiré Activer ldapaccountlock dans Dolibarr pour forcer la réinitialisation après le prochain login.
Supprimer un utilisateur Nécessite la purge dans la table llx_user pour éviter les références orphelines (exécution du script php delete_user.php --login=john.doe).
Re‑import après un outage LDAP Mettre en place un script cron qui réinitialise la variable $LDAPLastSync à -1 et force la synchronisation (php -r "include('./core/class/llxuser.php'); llxUser::checkLDAPSync();" ).


5. Monitoring & résilience

Outil Utilisation
Prometheus + node_exporter Scrape le métrique ldap_connection_duration_seconds exposé par le php-fpm status page ou via un script php -r "echo ldap_connect(...);" toutes les minutes.
Grafana alert Alertes sur ldap_connection_failures_total > 5 in 5m → déclenche un incident et envoie un ticket JIRA.
ELK / Graylog Centraliser le log php-fpm contenant les lignes LDAP bind success / failure.
HEALTHCHECK (Docker) Si vous déploiez Dolibarr en conteneur, ajoutez un healthcheck qui teste la connexion LDAP (timeout 5 s).
Plan de reprise Un fallback simple consiste à activer temporairement la connexion anonyme avec un groupe LDAP “LDAP_ReadOnly” qui donne toujours le rôle Standard (à n’utiliser que pendant les incidents majeurs).


6. Checklist de déploiement production

  1. Pré‑déploiement

    • ☐ Créer le compte de service LDAP (svc-dolibarr).
    • ☐ Activer TLS (StartTLS ou LDAPS) sur le serveur LDAP.
    • ☐ Vérifier que l’utilisateur a uniquement Read sur l’OU des utilisateurs.
    • ☐ Exporter la configuration LDAP dans un fichier versionné (Git).
    • ☐ Configurer les groupes LDAP et les mapper aux rôles Dolibarr. 2. Installation & configuration – ☐ Installer l’extension PHP ldap et activer TLS.
    • ☐ Modifier conf/parameters.php (ou UI) avec les paramètres LDAP.
    • ☐ Tester l’authentification avec un compte de test (ldapwhoami + Dolibarr login).

  2. Tests fonctionnels

    • ☐ Vérifier que chaque rôle (User, Manager, Admin) possède les bonnes limites de droits.
    • ☐ Simuler un mot de passe expiré → vérifier le blocage.
    • ☐ Forcer un échec de Bind (mauvais mot de passe) → garantir que le message d’erreur n’expose pas le bind DN.

  3. Mise en production

    • ☐ Activer la journalisation (/var/log/dolibarr-ldap.log).
    • ☐ Planifier la rotation des logs (logrotate ou journald).
    • ☐ Effectuer une sauvegarde LDAP full (ldapdump > backup-$(date +%F).ldif).
    • ☐ Déployer le monitoring (Prometheus + Grafana).

  4. Post‑déploiement

    • ☐ Communication aux équipes métier : « Les identifiants Dolibarr sont désormais vos identifiants AD ».
    • ☐ Documenter le processus de reset de mot de passe (ex : via Active Directory Users and Computers).
    • ☐ Mettre à jour le plan de continuité d’activité (BCP) : procédure de bascule vers le mode local (login/password stocké dans Dolibarr) si LDAP est indisponible.


7. Conclusion

L’intégration de LDAP dans un déploiement Dolibarr en production apporte :

  • Une gestion d’utilisateurs centralisée et « single source of truth » pour les identités.
  • Une sécurisation renforcée grâce au chiffrement TLS et à la validation du mot de passe auprès du serveur d’annuaire.
  • Une souplesse d’administration : ajout / mise à jour des droits sans toucher au code source de Dolibarr.

En suivant les bonnes pratiques présentées (compte de service limité, TLS obligatoire, groupes LDAP clairement nommés, sauvegardes régulières, monitoring proactif), vous éviterez les pièges classiques (fuites de mot de passe, perte d’accès en cas de panne LDAP, conflits de mapping).

Les exemples concrets illustrate tant une intégration avec Active Directory qu’avec OpenLDAP, montrant comment structurer les filtres, les attributs de groupe et le mapping des droits.

En appliquant la checklist de déploiement et le plan de monitoring proposé, votre environnement Dolibarr fonctionnera de façon fiable, sécurisée et évolutive, même dans les organisations les plus exigeantes. —

À retenir : LDAP n’est pas une simple option d’« authentification supplémentaire », c’est la pierre angulaire d’une gouvernance des accès robuste. Une fois correctement mise en place, vos utilisateurs profiteront d’un SSO fluide, vos administrateurs disposeront d’un tableau de bord d’audit complet, et votre système ERP restera conforme aux exigences de sécurité les plus strictes.

Bon déploiement ! 🚀

Publications similaires