LDAP Plugin Piwigo

De EjnTricks

Piwigo propose sa propre gestion des utilisateurs. Cependant, un contributeur a mis à disposition un plugin LDAP. Cet article présente l'installation et l'activation de ce plugin, qui n'est pas forcément trivial.

Dans le cadre de cet article, l'annuaire LDAP est basé sur une instance de OpenLDAP.

L'installation du plugin ne peut être effecutée directement depuis l'interface d'administration des plugins, et sera réalisée manuellement.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

Sur la page du plugin, la version supportée de Piwigo n'est pas celle installée et le plugin n'est plus maintenu. L'utilisation de cette version entraîne des erreurs lors de l'utilisation.

Notice: Undefined index: users_group in /var/opt/piwigo/2.8.2/plugins/ldap_login/main.inc.php on line 98
Notice: Undefined index: allow_newusers in /var/opt/piwigo/2.8.2/plugins/ldap_login/main.inc.php on line 135

Les sources étant disponible sur GitHub, il est possible de constater un fork dont la description d'un commit est for piwigo 2.8.0.

Ce fork est donc installé et déployé sur l'instance, même si celui-ci n'est pas officiel.

Cependant, ce plugin ne fonctionne pas avec une instance de OpenLDAP.


System-Install-icon.png Download-icon.png Téléchargement et installation

Une structure de répertoires a été mise en place pour faciliter la gestion des montées de versions. La procédure suivante présente l'installation de la version 1.2 dans cette structure.

Dans un premier temps, la structure de Ldap_Login est mise en place.

#sudo mkdir /var/opt/piwigo/common/apps-available/Ldap_Login
#sudo chown www-data:www-data /var/opt/piwigo/common/apps-available/Ldap_Login
#sudo chmod 700 /var/opt/piwigo/common/apps-available/Ldap_Login

Puis la version est téléchargée dans le répertoire temporaire de la machine.

Une fois téléchargée, il faut décompresser l'archive dans la structure personnalisée des applications disponibles. L'objectif est de l'installer en mentionnant le numéro de version.

#sudo unzip /tmp/Ldap_Login_1.2.zip -d /var/opt/piwigo/common/apps-available/Ldap_Login
#sudo rm /tmp/Ldap_Login_1.2.zip
#sudo mv /var/opt/piwigo/common/apps-available/Ldap_Login/ldap_login-config2base /var/opt/piwigo/common/apps-available/Ldap_Login/1.2
#sudo chown -R www-data:www-data /var/opt/piwigo/common/apps-available/Ldap_Login/1.2
#sudo find /var/opt/piwigo/common/apps-available/Ldap_Login/1.2 -type d -exec chmod 0700 {} \;
#sudo find /var/opt/piwigo/common/apps-available/Ldap_Login/1.2 -type f -exec chmod 0600 {} \;

A noter la modification des permissions sur les fichiers qui n'accordent que des droits pour www-data. La commande chmod -R go-rwx n'est pas utilisée, car il est souhaité d'enlever la permission d'exécution sur les fichiers, mais pas sur les répertoires.

La mise en place de la structure de répertoire doit permettre de placer un lien dans le sous répertoire apps-enabled vers la version souhaitée, avec les commandes suivantes.

#sudo ln -s /var/opt/piwigo/common/apps-available/Ldap_Login/1.2 /var/opt/piwigo/common/apps-enabled/Ldap_Login
#sudo chown -h www-data:www-data /var/opt/piwigo/common/apps-enabled/Ldap_Login

L'étape suivante serait de placer un lien vers /var/opt/piwigo/common/apps-enabled/Ldap_Login dans le répertoire plugins de l'instance.

Cependant, ce mode de fonctionne ne fonctionne pas avec la version 2.8.X de Piwigo. De plus, il est nécessaire d'avoir le nom du répertoire en minuscule ldap_login. Le répertoire est donc copié.

#sudo cp -R -p /var/opt/piwigo/common/apps-available/Ldap_Login/1.2 /var/opt/piwigo/piwigo/plugins/ldap_login

Le plugin est alors disponible dans l'interface d'administration.

Run-icon.png Activation

Il faut donc aller dans la page des applications avec un compte d'administration.


Il suffit de cliquer sur le bouton Activer, dans la boîte du plugin Ldap Login, pour le rendre disponible. La page est rafraîchie et le plugin est indiqué comme activé.


Process-Icon.png Utilisation

Dependencies.gif Pré requis

Cette version du plugin permet de mapper trois groupes depuis l'annuaire LDAP.

Groupe Description
piwigoUsers Groupe pour filtrer les utilisateurs pouvant se connecter.
piwigoAdmin Groupe affecter le droit d'administration.
piwigoWebmaster Groupe affecter le droit de Webmaster.

Tous ces groupes sont créés au niveau de la racine ou=groups,dc=ejnserver,dc=fr.

Icon-Configuration-Settings.png Déclaration annuaire

La configuration du plugin s'effectue en cliquant sur le lien Ldap login dans la section Plugins du bandeau de gauche. La page de configuration est alors affichée et présente deux onglets. Le premier onglet permet de spécifier les paramètres globaux.

Une première section va permettre de spécifier les paramètres de l'annuaire.

Les valeurs saisies, dans le cadre de cet article, sont en relation avec l'installation faite de OpenLDAP sur un serveur Ubuntu. Pour la section Connection.

Paramètre Valeur Description
Hote du serveur ldap localhost Nom du serveur où est installer l'annuaire LDAP.
Port à utiliser 389 Port de l'annuaire.
Arbre ldap à explorer où rechercher

les utilisateurs et les groupes

dc=ejnserver,dc=fr Arbre racine de recherche pour les branches des groupes et des utilisateurs.

La section suivante, utilisateurs Ldap, permet de spécifier la branche de recherche des utilisateurs.

Les valeurs saisies sont les suivantes.

Paramètre Valeur Description
Users Branch ou=people Branche de recherche des utilisateurs.
Faire une recherche sur le nom des utilisateurs ? Décochée L'annuaire étant considéré comme simple. Ainsi, une requête LDAP est épargnée.


Une troisième section, Attributs ldap, permet de spécifier des attributs spécifiques de recherche. Attention, ceci est redondant avec la première section mais il est nécessaire de renseigner les informations.

Les valeurs saisies sont les suivantes.

Paramètre Valeur Description
Arbre ldap à explorer où rechercher les utilisateurs et les groupes dc=ejnserver,dc=fr Arbre racine de recherche pour les branches des groupes et des utilisateurs.
Attribut correspondant au nom d'utilisateur uid Attribut sur les comptes LDAP sur lequel est validé l'identifiant de l'utilisateur.


Une quatrième section, groupes Ldap, permet de spécifier les attributs spécifiques aux groupes.

Les valeurs saisies sont les suivantes.

Paramètre Valeur Description
Groups Branch ou=groups Branche de recherche des groupes.
Faire une recherche sur le nom des groupes ? Décochée L'annuaire étant considéré comme simple. Ainsi, une requête LDAP est épargnée.
Webmasters group piwigoWebmaster Nom du groupe LDAP pour les utilisateurs considérés comme webmaster.
Admins group piwigoAdmin Nom du groupe LDAP pour les utilisateurs considérés comme administrateur.

La dernière section, Identifiants de connection LDAP va permettre de le compte à utiliser pour se connecter à l'annuaire LDAP et effectuer les recherches / validations des mots de passe.

Les valeurs saisies sont les suivantes.

Paramètre Valeur Description
Identifiant de connection, avec syntaxe LDAP complète cn=admin,dc=ejnserver,dc=fr Identifiant du compte de connexion.
Mot de passe de connection XXX Mot de passe du compte.

Une fois tous les champs renseignés, il faut cliquer sur le bouton Enregistrer. Si cela n'est pas effectué, les modifications seront perdues. La sauvegarde entraîne la création d'une ligne dans la table PREFIX_config, avec comme nom de paramètre param. Les données sont stockées au format JSON.

Run-icon.png Test

Sur la page de configuration, il est possible de valider les paramètres avec un compte valide.


Ceci permet donc de s'assurer que tous les paramètres renseignés sont corrects.

User-icon.png Paramètre nouvel utilisateur

Le deuxième onglet de la page d'administration permet de configurer le comportement lorsqu'un utilisateur tente de se connecter la première fois, avec des paramètres valides au niveau LDAP.

Les valeurs saisies sont les suivantes.

Paramètre Valeur Description
Voulez-vous créer des utilisateurs piwigo

lorsque quelqu'un se connecte avec des identifiants ldap valides ?

Cochée Permet de créer le compte dans Piwigo lorsque le compte est valide.
Users group piwigoUsers Filtre sur un groupe d'appartenance dans LDAP pour authoriser un utilisateur.

Les deux dernières options ne sont pas cochées dans le cadre de cette installation.

Comme pour le premier onglet, il est nécessaire de cliquer sur le bouton Enregistrer afin de sauvegarder les modifications. Sans cette action, les modifications seront perdues au moindre changement de page.


Bug-icon.png Bug OpenLDAP

Malgré la validation est paramètres, les premières tentatives de connexion avec un compte LDAP n'ont pas permis de rentrer dans l'application. Le problème n'est pas observé lorsqu' aucun groupe n'est spécifié dans les filtres de recherche.

L'étude du code, et plus spécifique du fichier class.ldap.php va permettre d'identifier le problème. La fonction user_membership est utilisé afin de valider qu'un utilisateur se trouve dans un groupe. Or cette recherche est effectuée sur l'attribut interne memberUid contenant uniquement l'identifiant de l'utilisateur. Or, dans le cadre de cette installation sous OpenLDAP, cela n'est pas fonctionnel car l'attribut sur les groupes est member et contient l'identifiant complet du compte.

        // This function takes the user and check if it is a member of some ldap groups.
        // This allows to set that it is allowed to log in, or that it is an admin or a webmaster (see function ldap_status)
        public function user_membership($user, $groups){
                // $groups is an array of groupdn ! (there is a possibility of several groups, we search the user in each of them).
                $userId = $this->config['ld_attr'].'='.$user.','
                        .(empty($this->config['usersbranch']) ? '' : $this->config['usersbranch'].',')
                        .(empty($this->config['basedn']) ? '' : $this->config['basedn']);
                foreach ($groups as $groupdn) {
                        $filter = '(objectClass=*)';
                        // $result = @ldap_read($this->cnx,$groupdn,$filter,array('memberUid'));
                        $result = @ldap_read($this->cnx,$groupdn,$filter,array('member'));
                        $result2 = @ldap_get_entries($this->cnx, $result);
                        // if(isset($result2[0]['memberuid'])){
                        if(isset($result2[0]['member'])){
                                // foreach($result2[0]['memberuid'] as $item){
                                foreach($result2[0]['member'] as $item){
                                        // if ($item == $user){
                                        if ($item == $userId){
                                                return True;
                                        }
                                }
                        }
                }
                return False;
        }

L'objectif de cette modification est de construire l'identifiant complet de l'utilisateur qui se connecte avec la racine de recherche, la branche de stockage des utilisateurs et l'identifiant de validation de l'utilisateur. Puis cette chaîne est validée sur l'attribute member du groupe.

Attention, cette modification est asez sommaire et ne prend pas forcément en compte les sous branches des groupes. Elle est fonctionnelle dans le cadre de cette installation et l'implémentation de l'annuaire, mais n'est absolument pas générique. Cependant, elle permet d'avoir une idée de la modification à apporter afin de rendre fonctionnel le plugin.


Browser Icon.png Formulaire authentification

Suite à l'installation, les utilisateurs sont validés au niveau de l'annuaire LDAP. Le formulaire d'authentification est légèrement modifié pour indiquer que cela est effectué sur un LDAP.


Untar-icon.png Package installé

Plugin installé: Ldap login plugin Piwigo.tar.gz


Viewer icon.png Voir aussi

Documentation officielle: http://piwigo.org/ext/extension_view.php?eid=650

Mise à jour compatible 2.8: https://github.com/kvakanet/ldap_login/find/config2base