Nextcloud + LDAP / Active Directory

Authentification centralisée via LDAP/AD - BTS SIO SISR

Objectif

Intégrer Nextcloud avec un annuaire LDAP (OpenLDAP) ou Active Directory Windows pour centraliser l'authentification des utilisateurs.

Les utilisateurs pourront se connecter à Nextcloud avec leurs identifiants LDAP/AD existants, évitant ainsi la double gestion des comptes.

Prérequis

  • Nextcloud installé et fonctionnel (voir procédure 04)
  • Serveur LDAP (OpenLDAP) ou Active Directory opérationnel
  • Compte de service LDAP avec droits de lecture sur l'annuaire
  • Connectivité réseau entre Nextcloud et le serveur LDAP/AD
  • Port LDAP accessible : 389 (LDAP) ou 636 (LDAPS)

Procédure Complète

Étape 1 : Installation des outils LDAP

Installer les utilitaires LDAP sur le serveur Nextcloud :

apt install ldap-utils -y

Vérifier l'installation :

ldapsearch --version

Étape 2 : Test de connectivité LDAP

Pour Active Directory (domaine grp3.local) :

ldapsearch -x -H ldap://grp3.local:389 \
-D "CN=nextcloud,OU=ServiceAccounts,DC=grp3,DC=local" \
-W \
-b "DC=grp3,DC=local"
Explications des paramètres :
  • -x : utiliser l'authentification simple (pas SASL)
  • -H : URL du serveur LDAP (ldap:// ou ldaps://)
  • -D : DN (Distinguished Name) du compte de service
  • -W : demander le mot de passe (option capitale)
  • -b : base DN de recherche

Saisir le mot de passe du compte de service lorsqu'il est demandé.

Résultat attendu : Une liste d'objets LDAP (utilisateurs, groupes, OUs) s'affiche.
En cas d'erreur :
  • "Can't contact LDAP server" : vérifier la connectivité réseau, le port ouvert (389/636)
  • "Invalid credentials" : vérifier le DN et le mot de passe du compte de service
  • "Operations error" : vérifier la base DN

Pour OpenLDAP :

ldapsearch -x -H ldap://192.168.1.10:389 \
-D "cn=admin,dc=example,dc=com" \
-W \
-b "dc=example,dc=com"

Étape 3 : Activation de l'application LDAP dans Nextcloud

Via la ligne de commande (méthode recommandée) :

sudo -u www-data php /var/www/nextcloud/occ app:enable user_ldap
Message attendu : "user_ldap enabled"

Alternative : via l'interface web

  1. Se connecter en tant qu'administrateur Nextcloud
  2. Aller dans Applications (icône en forme de grille)
  3. Catégorie Intégration
  4. Trouver "LDAP user and group backend"
  5. Cliquer sur Activer

Étape 4 : Configuration LDAP dans Nextcloud (Interface Web)

Aller dans ParamètresAdministrationLDAP/AD integration

Onglet 1 : Serveur

Hôte : grp3.local (ou adresse IP : 192.168.1.10)
Port : 389 (LDAP) ou 636 (LDAPS avec SSL)
DN utilisateur : CN=nextcloud,OU=ServiceAccounts,DC=grp3,DC=local
Mot de passe : [mot de passe du compte nextcloud]
DN de base : DC=grp3,DC=local

Cliquer sur "Tester le DN de base" → Doit afficher "Configuration OK"

Onglet 2 : Utilisateurs

Filtre utilisateur LDAP :

(&(objectClass=user)(!(objectClass=computer)))
Explication du filtre :
  • & : opérateur ET logique
  • (objectClass=user) : tous les objets de type utilisateur
  • (!(objectClass=computer)) : exclure les comptes ordinateurs

Variantes de filtres :

# Utilisateurs actifs uniquement (AD)
(&(objectClass=user)(!(objectClass=computer))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

# Utilisateurs d'une OU spécifique
(&(objectClass=user)(!(objectClass=computer))(memberOf=CN=Utilisateurs_Nextcloud,OU=Groups,DC=grp3,DC=local))

# OpenLDAP (posixAccount)
(objectClass=posixAccount)

Cliquer sur "Vérifier les paramètres et compter les utilisateurs" → Affiche le nombre d'utilisateurs trouvés

Onglet 3 : Attributs de connexion

Attribut de connexion LDAP : sAMAccountName (AD) ou uid (OpenLDAP)
Attributs courants :
  • sAMAccountName : nom de compte Windows (ex: jdupont)
  • userPrincipalName : adresse email complète (ex: [email protected])
  • mail : adresse email
  • uid : identifiant unique (OpenLDAP)

Onglet 4 : Groupes

Filtre groupe LDAP :

(objectClass=group)

Ou pour OpenLDAP :

(objectClass=posixGroup)

Onglet 5 : Avancé

Configuration du nom d'affichage :

Nom d'affichage : displayName (AD) ou cn (OpenLDAP)
DN de base utilisateurs : OU=Utilisateurs,DC=grp3,DC=local
DN de base groupes : OU=Groups,DC=grp3,DC=local

Mapping d'email :

Adresse email : mail

Onglet 6 : Expert

Champ interne du nom d'utilisateur : sAMAccountName (ou laisser vide pour auto)
Remplacement du DN de l'utilisateur : Activé

Étape 5 : Synchronisation des utilisateurs

Forcer la synchronisation via la ligne de commande :

sudo -u www-data php /var/www/nextcloud/occ user:sync "OCA\User_LDAP\User_Proxy"
Résultat attendu : Affiche le nombre d'utilisateurs synchronisés depuis LDAP.

Lister les utilisateurs Nextcloud :

sudo -u www-data php /var/www/nextcloud/occ user:list

Étape 6 : Planification de la synchronisation automatique

Ajouter une tâche cron pour synchroniser régulièrement :

crontab -u www-data -e

Ajouter la ligne (synchronisation toutes les heures) :

0 * * * * php /var/www/nextcloud/occ user:sync "OCA\User_LDAP\User_Proxy"

Vérifications

Test de connexion utilisateur LDAP

  1. Se déconnecter du compte administrateur Nextcloud
  2. Utiliser un compte LDAP pour se connecter (ex: jdupont / mot_de_passe_AD)
  3. La première connexion crée automatiquement le profil Nextcloud
Connexion réussie : L'utilisateur LDAP accède à Nextcloud avec son compte centralisé.

Vérification des utilisateurs synchronisés

sudo -u www-data php /var/www/nextcloud/occ user:list

Les utilisateurs LDAP apparaissent avec leur identifiant LDAP.

Vérification des groupes LDAP

sudo -u www-data php /var/www/nextcloud/occ group:list

Test de modification de mot de passe

Changer le mot de passe d'un utilisateur dans Active Directory, puis tester la connexion à Nextcloud → doit utiliser le nouveau mot de passe.

Logs LDAP Nextcloud

Activer les logs LDAP détaillés (dépannage uniquement) :

  1. Interface Nextcloud → ParamètresLDAP/AD integration
  2. Onglet Expert
  3. Activer "Log LDAP requests"
  4. Consulter les logs : /var/www/nextcloud/data/nextcloud.log

Configuration avancée

Attribution automatique de quotas par groupe

Dans Nextcloud, aller dans ParamètresUtilisateurs

  1. Sélectionner un groupe LDAP (ex: Utilisateurs_Nextcloud)
  2. Définir un quota par défaut (ex: 10 Go)

Restriction d'accès par groupe LDAP

Limiter l'accès Nextcloud à un groupe AD spécifique :

  1. Interface LDAP → Onglet Utilisateurs
  2. Modifier le filtre utilisateur :
    (&(objectClass=user)(!(objectClass=computer))(memberOf=CN=Nextcloud_Users,OU=Groups,DC=grp3,DC=local))

Synchronisation uniquement à la première connexion

Éditer /var/www/nextcloud/config/config.php :

nano /var/www/nextcloud/config/config.php

Ajouter :

 'ldap_user_cleanup_interval' => 0,

Utilisation de LDAPS (chiffré SSL/TLS)

Pour sécuriser les échanges LDAP :

  1. S'assurer que le serveur AD/LDAP écoute sur le port 636 (LDAPS)
  2. Configuration Nextcloud → Hôte : ldaps://grp3.local:636
  3. Importer le certificat SSL du serveur LDAP si nécessaire :
    openssl s_client -connect grp3.local:636 -showcerts

Sécurité et Limites

Avantages de l'intégration LDAP

  • Centralisation de l'authentification (SSO partiel)
  • Gestion unifiée des utilisateurs (création/suppression)
  • Cohérence des mots de passe entre systèmes
  • Respect des politiques de sécurité AD (complexité mot de passe, expiration)
  • Intégration des groupes AD pour gestion des droits Nextcloud

Limites de cette configuration (niveau BTS)

Points d'attention :
  • LDAP non chiffré (port 389) : utiliser LDAPS (636) en production
  • Compte de service avec mot de passe en clair dans la config
  • Pas de Single Sign-On (SSO) complet (SAML, OAuth2)
  • Synchronisation unidirectionnelle (LDAP → Nextcloud uniquement)
  • Modification de mot de passe impossible depuis Nextcloud

Bonnes pratiques

  • Créer un compte de service AD dédié avec droits minimaux (lecture seule)
  • Utiliser LDAPS (port 636) pour chiffrer les échanges
  • Restreindre l'accès Nextcloud via filtres LDAP (groupes spécifiques)
  • Surveiller les logs LDAP pour détecter les anomalies
  • Tester la synchronisation régulièrement
  • Documenter la structure LDAP/AD (DN, OU, groupes)

Sécurisation du compte de service

Dans Active Directory :

  1. Créer une OU dédiée : OU=ServiceAccounts
  2. Créer l'utilisateur : CN=nextcloud
  3. Propriétés du compte :
    • L'utilisateur ne peut pas changer le mot de passe
    • Le mot de passe n'expire jamais
    • Le compte ne peut pas être verrouillé
  4. Droits LDAP : lecture seule sur les OUs utilisateurs/groupes

Dépannage

Problème : Aucun utilisateur trouvé

  • Vérifier le filtre LDAP dans l'onglet Utilisateurs
  • Tester le filtre avec ldapsearch :
    ldapsearch -x -H ldap://grp3.local:389 \
    -D "CN=nextcloud,OU=ServiceAccounts,DC=grp3,DC=local" \
    -W \
    -b "DC=grp3,DC=local" \
    "(&(objectClass=user)(!(objectClass=computer)))"

Problème : Connexion utilisateur échoue

  • Vérifier l'attribut de connexion (sAMAccountName, mail, etc.)
  • S'assurer que l'utilisateur existe dans LDAP
  • Vérifier que le compte AD n'est pas désactivé ou expiré
  • Consulter les logs : tail -f /var/www/nextcloud/data/nextcloud.log

Problème : Groupes LDAP non visibles

  • Vérifier le filtre groupe : (objectClass=group)
  • Vérifier le DN de base groupes
  • Forcer la synchronisation :
    sudo -u www-data php /var/www/nextcloud/occ ldap:show-config

Réinitialisation de la configuration LDAP

sudo -u www-data php /var/www/nextcloud/occ ldap:delete-config s01

Puis reconfigurer depuis l'interface web.

Points Clés pour l'Oral BTS

  • LDAP : Lightweight Directory Access Protocol (annuaire centralisé)
  • Active Directory : implémentation Microsoft de LDAP avec extensions
  • DN (Distinguished Name) : chemin complet d'un objet LDAP
  • Attributs LDAP : sAMAccountName, cn, mail, memberOf, objectClass
  • Filtres LDAP : syntaxe pour cibler des objets spécifiques
  • Compte de service : utilisateur dédié avec droits minimaux pour l'application
  • SSO partiel : authentification centralisée mais pas de connexion unique automatique
  • Avantage : gestion unifiée des utilisateurs (création/suppression depuis l'AD)