Connecter Matomo à LDAP(s)
Divulgâchage : 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. 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.
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.
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.
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.
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.
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.
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 ».
L’application installe alors le plugin et vous propose de l’activer, cliquez sur le bouton vert « Activer le 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.
- Toujours utiliser LDAP pour l’authentification : devrait être coché pour éviter de stocker les mots de passes dans matomo. C’est mieux pour la sécurité et évitera les problèmes lorsque les utilisateurs changent leur mot de passe.
- Champ LDAP memberOf : est plutôt classique et la
valeur par défaut (
memberOf
) devrait fonctionner, - Group utilisateur requis : si vous voulez restreindre l’authentification à matomo aux membres d’un groupe particulier.
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.
- Champ ID utilisateur :
sAMAccountName
, - Champ mot de passe utilisateur :
userPassword
, matomo s’en sert pour générer des token d’authentification, il ne stockera ni la version en clair, ni la version hachée de l’AD. - Champ adresse e-mail :
userPrincipalName
, - Suffixe d’adresse email : on laisse vide,
- Sites initialement accessibles : on a laissé « all » mais vous pouvez mettre les ID des sites accessibles par défaut pour vos utilisateurs.
Cliquez ensuite sur le bouton vert « Enregistrer ».
Serveur LDAP
Dernière phase, configurer le serveur LDAP auquel matomo va se connecter.
- Nom du serveur : laissez
server1
(sinon matomo n’apprécie pas du tout, #115), - URL du serveur : entrer le nom d’hôte du serveur,
préfixez éventuellement du protocole (
ldaps://
), - Port du serveur LDAP : si vous n’avez pas spécifié
le protocole précédemment, entrez le numéro de port,
636
pour LDAPS (starttls n’est pas possible avec matomo, #184) - DN de base : spécifiez l’OU qui contient vos utilisateurs,
- Login connexion LDAP : spécifiez le nom complet (avec OU et cie.) de l’utilisateur spécifique à matomo,
- Mot de passe LDAP : spécifiez le mot de passe de cet utilisateur spécifique.
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.