You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2013-12-26 17:15:14

kinai
Guest
From: TROYES (10)
Registered: 2009-11-24
Posts: 141

Authentification Apache/Mysql basé sur GLPI

Bonjour,

Je travaille actuellement a authentifier des utilisateurs d'un site web tiers sur la base de données MySQL de GLPI.
Pour cela, j'utilise le module mod_authn_dbd d'apache2 que j'ai configuré tel que :

DBDriver mysql
DBDParams "host=monip port=3306 dbname=dbglpi user=userglpi pass=passdbglpi"
DBDExptime 300
DBDMin 1
DBDMax 10

<Directory "/var/www/web">
AuthType basic
AuthName "Registered User"
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT CONCAT('{SHA}',BASE64_ENCODE(password)) AS pass FROM glpi_users WHERE name=%s"
Require valid-user
</Directory>

Remarque : La commande BASE64_ENCODE viens de ce site : http://wi-fizzle.com/downloads/base64.sql car je suis en MySQL 5.5. Depuis MySQL 5.6, il y a une fonction TO_BASE64() qui existe nativement.

Tel qu'il est spécifié sur le site d'Apache (http://httpd.apache.org/docs/2.2/misc/p … tions.html), apache convertit le mot de passe saisi par l'utilisateur en SHA1 au format binaire, ce qui correspond à la commande SHA1(password,TRUE) en PHP.

Cependant, d'après mon analyse du code de GLPI, les mots de passe sont stockées en hexadécimal via SHA1(password,FALSE) en php.

Mon problème :
Je ne parviens pas a convertir la chaine SHA1 hexadécimal stocké par GLPI en binaire pour pouvoir transmettre une réponse propre à apache (conversion directement dans MySQL). En php, cela serait possible via la commande pack.

J'envisage deux solutions :

1. La plus simple : trouver la solution pour convertir convenablement la chaine SHA1 en chaine compatible APACHE.
2. Le moins simple : Stocker une version "comptatible apache" du SHA1 en utilisant la méthode PHP pack(H*,cryptpwd) pour le stocker dans une nouvelle table (donc créer un plugin qui va bien).

Qu'en pensez-vous ?
Merci de vos suggestions ou astuces.
Yannick


Yannick

Offline

#2 2014-01-03 13:14:56

kinai
Guest
From: TROYES (10)
Registered: 2009-11-24
Posts: 141

Re: Authentification Apache/Mysql basé sur GLPI

Bonjour,

Pour ceux que cela intéresse, nous avons résolu ce problème par le développement d'un petit plugin GLPI qui fait le boulot. Comme je ne peux pas attacher de fichier, je vous invite à me contacter en pm pour que je vous l'envoie par email. Nous allons faire une demande aux gestionnaires de plugins pour ouvrir un projet sur la forge.

Ce plugin crée une table additionnelle (glpi_plugin_apacheauthdbd_users) qui contient trois colonnes :
1. L'ID GLPI de l'utilisateur (pour la liaison avec la table glpi_users)
2. Le mot de passe dans un formatage SHA1 "compatible" apache
3. Un champ pour définir l'autorisation.

Le plugin ajoute un onglet aux utilisateurs pour autoriser ou non l'accès (refus par défaut).

A l'installation, le plugin converti les mots de passe de tous les utilisateurs déjà présent dans la base.
Par la suite, à la création d'un utilisateur, le mot de passe est ajouté. A la suppression, la ligne dans la table est supprimée et à la mise à jour, ... mis à jour.

Pour utiliser cette table depuis apache, vous devez créer un utilisateur MySQL qui dispose d'un droit de lecteur sur la table du plugin. N'utilisez pas le compte de GLPI, ca ne serait pas très sécure.
La directive Apache sera donc la suivante:

DBDriver mysql
DBDParams "host=monip port=3306 dbname=dbglpi user=userglpi pass=passdbglpi"
DBDExptime 300
DBDMin 1
DBDMax 10

<Directory "/var/www/web">
AuthType basic
AuthName "Registered User"
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT glpi_plugin_apacheauthdbd_users.password FROM glpi_plugin_apacheauthdbd_users INNER JOIN glpi_users ON (glpi_users.id = glpi_plugin_apacheauthdbd_users.users_id AND glpi_users.is_active=1) WHERE glpi_users.name=%s AND glpi_plugin_apacheauthdbd_users.auth=1" 
Require valid-user
</Directory>

Yannick

Last edited by kinai (2014-01-03 13:19:24)


Yannick

Offline

#3 2014-01-03 13:45:26

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Authentification Apache/Mysql basé sur GLPI

pour la création d'un plugin publié vous trouverez toutes les informations ici : https://forge.indepnet.net/projects/plu … owtoplugin


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#4 2014-01-04 10:01:16

kinai
Guest
From: TROYES (10)
Registered: 2009-11-24
Posts: 141

Re: Authentification Apache/Mysql basé sur GLPI

Voila, le projet est ouvert sur la forge des plugins : https://forge.indepnet.net/projects/apacheauthdbd

N'hésitez pas à remonter vos informations.


Yannick

Offline

#5 2014-01-04 11:20:43

remi
GLPI-DEV
From: Champagne
Registered: 2007-04-28
Posts: 7,127
Website

Re: Authentification Apache/Mysql basé sur GLPI

Small note: this will not work anymore in 0.85 which doesn't use SHA1 but a real encryption algo.

In 0.84: 0915bd0a5c6e56d8f38ca2b390857d4949073f41
In 0.85: $2y$10$bUQEY4YnP1nq4.X5t5cah.vqrlCRUf/K7aYNDEvJtYUT/HcJGPrgq

But, you should be able to catch the "clear" password in "pre" hook and compute what you need there (of course lowering the security level which have be increased by this change, see https://forge.indepnet.net/issues/4384 )


Dév. Fedora 29 - PHP 5.6/7.0/7.1/7.2/7.3/7.4 - MariaDB 10.3 - GLPI master
Certifié ITILv3 - RPM pour Fedora, RHEL et CentOS sur https://blog.remirepo.net/

Offline

#6 2014-01-14 15:35:23

kinai
Guest
From: TROYES (10)
Registered: 2009-11-24
Posts: 141

Re: Authentification Apache/Mysql basé sur GLPI


Yannick

Offline

#7 2014-01-17 15:38:11

yllen
GLPI-DEV
From: Sillery (51)
Registered: 2008-01-14
Posts: 15,127

Re: Authentification Apache/Mysql basé sur GLPI

C'est un problème de plugin, je déplace dans la bonne section


CentOS 6.5 - CentOS 7
PHP 5.6 - PHP 7 - MySQL 5.6  + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)

Offline

Board footer

Powered by FluxBB