Avec Nextcloud, grâce à une connexion LDAP, vous permet de vous connecter avec des comptes utilisateurs d’un annuaire Active Directory.

Avoir ce genre de connexion ne vous dispose pas d’avoir un compte local de secours dans votre Nextcloud. Par cet article, je vais vous présenter le problème, ma réflexion pour le résoudre et enfin la solution appliquée.


Contexte et environnement

  • Nextcloud 19 (dernière révision au 10/02/2021), hébergé sur un serveur Debian 10 avec PHP7.4.
  • L’utilisateur pour le processus web est www-data, l’emplacement du dossier où se trouve Nextcloud est /var/www/html.
  • Lors des commandes « occ », pensez à changer l’utilisateur et/ou « php » en fonction de votre configuration de serveur.
  • Le mode maintenance de Nextcloud n’a pas été activé.

Clairement pas une grosse configuration ni de particularités. Il s’agit d’un Nextcloud « simple » mais fonctionnel, utilisé dans un environnement professionnel ayant surtout un besoin de stockage centralisé, sans être trop regardant quant à la disponibilité (paradoxal mais réel).

web univers connexion ldap

Compréhension du problème de connexion LDAP

Cependant, la connexion LDAP n’était plus réalisable. Aucune réelle raison apparente, aucune modification n’a été apportée. Un rapide tour dans les logs me permet de relever ce genre de ligne (tronquée) :

[...]"app":"webdav","method":"PROPFIND","url":"/remote.php/webdav/","message":{"Exception":"Sabre\\DAV\\Exception\\ServiceUnavailable","Message":"OC\\ServerNotAvailableException: Connection to LDAP server could not be established","Code":0,[...]

In Connection.php line 208:
  Connection to LDAP server could not be established

Message assez explicite, un problème de connexion entre le serveur LDAP et le serveur Nextcloud semble être de la partie. Un bref regard dans les pare-feu me permet de rejeter rapidement cette piste, puisqu’il n’y a pas de filtrage particulier entre ces machines et pas entre ces flux précis.

Je décide d’explorer la configuration « s01 » (par défaut) avec l’interpréteur PHP « occ », disponible quand Nextcloud est installé :

[email protected]:/var/www/html/nextcloud# sudo -u www-data php occ ldap:test-config s01

The configuration is invalid. Please have a look at the logs for further details.

In Connection.php line 208:
   Connection to LDAP server could not be established

Pas très parlant… Allons regarder la configuration concernée par le biais de la commande sudo -u www-data php occ ldap:show-config s01. De nombreuses lignes seront affichées, correspondant aux différentes valeurs nécessaires pour établir la connexion sécurisée avec l’annuaire.

Je remarque cette ligne : ldapLoginFilter. Il s’agit des filtres utilisés par les outils LDAP pour récupérer uniquement la valeur dans une colonne précise de l’annuaire, notamment le « login » pour authentifier les utilisateurs.

Sachez qu’un annuaire LDAP peut être aussi bien sous Linux que sous Microsoft, toutefois les champs utilisés ne seront pas les mêmes. La liste des champs exploités ou non ne sera pas décrite dans ce document. Dans notre cas, avec l’Active Directory de Microsoft, le champ ldapLoginFilter doit contenir cette valeur précise :

(&(objectclass=*)(|(cn=%uid)(sAMAccountName=%uid)))

Ici avant le changement, le champ contenait posix=%uid, qui correspond à un annuaire LDAP Linux ! Une erreur de configuration donc, est-ce par défaut ou un problème de paramétrage induit par l’humain, mystère. Pour modifier cette variable, j’ai exécuté cette commande (penser à changer l’identifiant de configuration au besoin) :

sudo -u www-data php /var/www/html/occ ldap:set-config "s01" ldap_login_filter "(&(objectclass=*)(|(cn=%uid)(sAMAccountName=%uid)))"

La configuration est rechargée et prise à chaud, pas besoin de redémarrer quelconque processus sur la machine où est hébergé le Nextcloud. Afin d’en avoir immédiatement le résultat, j’ai passé la commande ci-dessous pour effectuer les tests :

sudo -u www-data php occ ldap:test-config s01

Quand c’est un succès, vous devez avoir la phrase "The configuration is valid and the connection could be established! » affichée à la sortie de la commande. Dirigez-vous maintenant sur la page web d’authentification de Nextcloud et essayez de vous connecter avec un compte annuaire… 😉

Source / Inspiration


Pour aller plus loin, vous pouvez retrouver l’article de mise en place de Nextcloud dans docker ici-même (CZS).

Auteur

Bercé par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.

Écrire un commentaire