Connecter Matomo à LDAP(s)

Pour voir les statistiques de visites sur un site web, tout en respectant (la vie privée) des utilisateurs, matomo est un très bon choix. Pour aller encore plus loin et restreindre l’accès aux données à certains utilisateurs, voici comment le connecter à LDAP.

Comme vous le savez sûrement déjà, nous utilisons matomo et nos logs d’accès pour établir des statistiques anonymes des visites sur le site des arsouyes. Ça nous permet de voir quand et quels articles ont du succès, et de progresser.

Avec les logs, c’est peut être moins précis et fourni qu’avec le code javascript mais ça nous suffit amplement. Petit bonus, le code javascript ayant besoin de se connecter au serveur, en s’en passant, le serveur n’a plus besoin d’être disponible en ligne.

Notre matomo est donc protégé derrière notre pare-feu et accessible uniquement aux utilisateur branchés directement sur notre réseau.

bobbsled @ flickr, CC By SA
bobbsled @ flickr, CC By SA

Même si c’est peut être exagéré dans notre cas, on a voulu aller plus loin ; en configurant matomo pour restreindre les accès aux seuls utilisateurs enregistrés et autorisés par notre Active Directory. Dans les faits, ça exclu nos enfants et nos amis de passages lorsque nous leur partageons l’accès au réseau.

Après avoir vérifié que le module php ldap est installé, puis déployé le certificat de notre CA, on va demander à matomo d’installer son plugin LDAP puis lui renseigner les paramètres de connexion réseau et de mise en correspondance des utilisateurs avec notre Active Directory. Rien de compliqué en fait.

Préparer le serveur

Techniquement, vous pourriez commencer directement par l’installation du plugin et sa configuration et ensuite gérer les erreurs mais, pour un article, c’est plus pratique de commencer par gérer ces sources d’erreurs.

Droits d'accès aux fichiers

Normalement, lorsque vous installez matomo, vous avez déjà du configurer les droits d’accès des fichiers pour que ça tombe en marche sans problème.

Ce n’est pas toujours le cas et, parfois, certains répertoires ne sont pas bien configurés et Matomo rencontre un problème lorsqu’il doit écrire dans son cache.

Erreur d’écriture dans le cache
Erreur d’écriture dans le cache

Si vous rencontrez cette erreur, vous devez simplement vous assurer que l’utilisateur système qui fait fonctionner le serveur web a bien les droits en écriture dans le répertoire du cache.

Si vous avez copié les fichiers dans /var/www/matomo, la commande suivante s’assure que c’est bien l’utilisateur www-data et le groupe www-data qui sont propriétaires des fichiers et répertoires.

sudo chown -R www-data:www-data /var/www/matomo

Une fois la propriété établie, la commande suivante ajoute au propriétaire (u+) le droit de lire (r), écrire (w) les contenu ainsi que traverser les répertoires (X).

sudo chmod -R u+rwX /var/www/matomo/tmp

Module PHP LDAP

La plupart des hébergeurs mutualisés activent ce module mais si vous avez votre propre serveur, il n’est pas installé par défaut et ça va poser des problèmes puisque le plugin de matomo en a besoin.

Erreur d’absence de module LDAP
Erreur d’absence de module LDAP

Sans réelle surprise, il faut donc installer le module php ldap, qui fournira aux scripts php les fonctions nécessaires aux connexions avec votre serveur LDAP. Sur Ubuntu (debian et dérivés), la commande suivante se chargera de tout :

sudo apt-get install php-ldap

Une fois le module installé, il est nécessaire de redémarrer le serveur apache2 (exemple pour ubuntu) :

sudo systemctl restart apache2

Certificat racine du LDAPs

Si vous avez fait les choses bien, votre serveur LDAP devrait exiger une connexion sécurisée par TLS (en starttls ou LDAPs). Pour ça, vous avez du générer un certificat TLS particulier, que vous avez signé par un certificat racine.

Une fois ce certificat racine exporté dans un fichier (appelons-le root.arsouyes.org.crt dans la suite), vous devez le déployer sur votre serveur.

Sous Ubuntu, les commandes suivantes vont copier le certificat dans /usr/local/share/ca-certificates puis prendre en compte ce nouveau fichier et le déployer correctement dans le système :

sudo cp root.arsouyes.org.crt /usr/local/share/ca-certificates
sudo update-ca-certificates

Utilisateur de lecture LDAP

Dernier détail, pour lire le contenu de l’annuaire, matomo va avoir besoin des identifiants d’un utilisateur qui en a le droit. Plutôt que de lui fournir vos identifiants, préférez créer un utilisateur restreint.

Lorsqu’un utilisateur s’authentifiera sur matomo, deux connexions LDAP seront en fait effectuées. La première, avec les identifiants de l’utilisateur, pour vérifier qu’ils sont bons. Une seconde, avec le compte spécifique de matomo, pour synchroniser les informations dans l’annuaire.

Cette deuxième connexion peut paraître inutile (puisque la première permet aussi de lire le contenu de l'annuaire) mais est en fait nécessaire car matomo dispose d'un mode de fonctionnement « Kerberos SSO » où c'est apache qui se charge d'authentifier mais ne fourni que le nom d'utilisateur. D'où un compte spécifique pour lire les informations.

Les identifiants de ce compte spécifique à matomo sont stockés en clair dans le fichier config/config.ini.php et accessibles par tous les plugins. Protégez-donc le fichier et n'installez pas n'importe quel plugin.

Installer le plugin

Commencez par vous connecter à votre application matomo avec un compte ayant les droits d’administration (celui créé lors de l’installation ou un autre que vous auriez créé ensuite).

Rendez-vous dans le menu d’administration, cliquez sur l’icone en forme de rouage (en haut à droite). Puis dans le marché des composants via le menu de gauche, « Plate-forme / Marché ».

Pour éviter de parcourir toute la liste, vous pouvez entrer le mot clé « ldap » dans le champ de recherche.

Recherche du plugin par mot clé
Recherche du plugin par mot clé

Cliquez sur le bouton vert « Installer » du plugin « Login Ldap ». Pour éviter les XSRF, l’interface vous demande d’entrer votre mot de passe puis de cliquer sur « Confirmer ».

Vérification XSRF et confirmation
Vérification XSRF et confirmation

L’application installe alors le plugin et vous propose de l’activer, cliquez sur le bouton vert « Activer le composant ».

Activation du composant
Activation du composant

Paramétrer le plugin

La configuration du plugin se fait via l’interface d’administration, dans le menu « Système / LDAP ». Il n’y a qu’une seule page pour tout configurer mais elle est divisée en plusieurs sections que nous allons suivre pas à pas.

Paramètres LDAP

La première section concerne les paramètre globaux du plugin. Normalement, vous n’avez rien à renseigner ici, les valeurs par défaut devant faire l’affaire.

Paramètres globaux LDAP
Paramètres globaux LDAP

Les boutons vert « Test » ne fonctionneront qu’une fois tous les paramètres de connexions au serveur LDAP seront faits. Inutile donc de cliquer pour l’instant, attendez d’atteindre la fin de l’article.

Cliquez ensuite sur le bouton vert « Enregistrer ».

Synchronisation des utilisateurs

Comme il y a plusieurs conventions pour stocker des utilisateurs dans un annuaire LDAP, il faut configurer le plugin pour lui dire comment retrouver les informations dont il a besoin.

Tous les réglages suivants sont faits pour Active Directory. Si vous avez un openldap, les valeurs par défaut devraient être suffisantes.

Synchronisation des utilisateurs
Synchronisation des utilisateurs

Cliquez ensuite sur le bouton vert « Enregistrer ».

Serveur LDAP

Dernière phase, configurer le serveur LDAP auquel matomo va se connecter.

Configuration du serveur LDAP
Configuration du serveur LDAP

Si vous jouez à ajouter puis supprimer des serveurs, sachez qu’ils restent toujours présent dans le fichier de configuration config/config.ini.php (#236). Si vous y avez entré des identifiants valides, ça peut valoir la peine d’aller nettoyer le fichier à la main.

Cliquez ensuite sur le bouton vert « Enregistrer ».

Et après ?

Avec ces paramètres, vos utilisateurs peuvent maintenant se connecter à l’application matomo avec leur identifiants active directory (ou openldap si vous avez adapté les réglages). Lors de leur première connexion, matomo les enregistrera dans sa propre base pour y stocker, entre autre, les droits d’accès.

Comme toujours avec les connexions LDAP, l’intérêt est aussi de faciliter la gestion des utilisateurs en centralisant tout sur l’AD. Via les OU (c’est bof) ou les groupes (c’est mieux), vous pouvez très facilement autoriser ou interdire l’accès à matomo à un utilisateur.