Filez – Authentification LDAP
I. Présentation
Filez propose deux types d'authentifications. Soit en utilisant une base de donnée, comme on a pu voir dans le tutoriel précédent accessible ici, soit via un annuaire LDAP. Ici j'utiliserai l'annuaire de Microsft, Active Directory.
II. Mise en place
Afin de ne pas modifier la hiérarchie des unités d'organisation de l'AD, on peut créer un groupe afin d'habiliter les personnes à accéder à Filez.
Il faut ensuite modifier le fichier de configuration, filez.ini qui se trouve dans le répertoire Config de filez et notifier à Filez que l'on va utiliser un annuaire LDAP pour l'authentification à la place d'une BDD :
Remplacer :
; Name of the class used to identify the user. Built-in factories are :
; * Fz_User_Factory_Ldap
; * Fz_User_Factory_Database
user_factory_class = Fz_User_Factory_Database
Par :
; Name of the class used to identify the user. Built-in factories are :
; * Fz_User_Factory_Ldap
; * Fz_User_Factory_Database
user_factory_class = Fz_User_Factory_Ldap
Puis modifier les donnees présent dans la partie "user_factory_options" pour interroger l'annuaire lors de l'authentification. (rapin est un nom donné à titre d'exemple) :
[user_factory_options] host = "dc2008.rapin.local" useSsl = false baseDn = "dc=rapin,dc=local" accountDomainName = "rapin.local" username = "CN=admin,DC=rapin,DC=local" password = "password" bindRequiresDn = false accountFilterFormat= "(&(&(objectClass=user)(sAMAccountName=%s))(memberOf=cn=filez,ou=Groupes,dc=rapin,dc=local))"
petite coquille, il n’y a pas de différence entre le fichier config d’origine et celui modifié.
si si ^^ mais la fenêtre n’est pas assez grande pour tout afficher.
Bonjour,
Merci pour votre article, cependant savez-vous s’il est possible de se connecter de manière automatique via l’active directory ?
Est-on obligé de passer via un serveur CAS ?
Julien.
Bonjour Julien,
A ma connaissance non, et la seule solution, afin que l’utilisateur ne soit pas obligé de ressaisir ses informations de connexion, est (comme tu l’as dit) le serveur CAS avec SSO.
Arnaud
Merci beaucoup pour ta réponse rapide !
Je vais essayer de me renseigner pour le serveur CAS bien que d’après les échos que j’ai eu, ce n’est pas une techno simple !
Sais-tu si FileZ aura encore droit à des mises à jour ?
Oui je pense. Mais je pense pas qu’il y en est une pour automatiser l’authentification a filez étant donné que ce n’est un produit Microsoft.
J’ai essayé de mettre au point une authentification via NTLM.
En modifiant les paramètres de mon Apache, je suis parvenu à récupérer mes identifiants via le NTLM (vérifié par une capture de trame Wireshark et par les fichiers de logs Apache).
Cependant, FileZ est configuré pour afficher la page d’authentification par défaut. Je pense qu’il suffirait de modifier le code php afin qu’il puisse récupérer les informations récupérées par le NTLM pour s’authentifier.
J’ai trouvé ce code sur GitHub : https://github.com/loune/php-ntlm/blob/master/ntlm.php
Je ne m’y connais pas en php, mais la problématique ne me semble pas impossible à résoudre.
Peux tu me donner les paramètres que tu as modifiés dans ta conf Apache ?
J’ai regardé sur le lien que tu m’as donné, je ne m’y connais pas non plus en php, mais ça vaut le coup d’essayer 😉 tiens moi au courant.
J’ai suivi particulièrement ce tuto (mais pas que) : http://gnomeskull.com/?p=162
Voilà ma conf de mon fichier ntlm.conf,
PerlAuthenHandler Apache2::AuthenNTLM
AuthType NTLM
AuthName FileZ
require valid-user
PerlAddVar ntdomain « DOMAIN PDC »
PerlSetVar defaultdomain DOMAIN
PerlSetVar splitdomainprefix 0
PerlSetVar ntlmdebug 1
PerlSetVar ntlmauthoritative on
Salut Julien,
As tu réussi à faire ce que tu voulais ?
Salut Arnaud,
Je pars prochainement en congés et j’ai eu d’autres choses sur le tas à faire …
Je m’y replongerai début septembre. De tout façon j’ai deux solutions :
– soit je me lance et je tente moi même de modifier les fichiers php
– soit je trouve quelqu’un dans ma boîte qui s’y connait.
Je te tiendrais au courant dans tous les cas, mais si tu connais quelqu’un de compétent en php, ça m’intéresse !
Nous avons réussi (en repartant de zéro par rapport aux derniers commentaires) avec un collègue à s’authentifier de manière automatique via les protocoles NTLM (ne pas oublier les d’activer l’authentification NTLM sous Windows, IE et Firefox).
Le principe est de récupérer les login/mot de passe via NTLM et de les réinjecter dans les variables d’authentification de FileZ.
De cette manière, nous n’avons pas supprimé la page d’authentification mais nous avons rendu les informations affichées.
ETAPE 1
On commence par installer les modules ntlm (libapache2-authenntlm-perl et apache2-authenntlm-0.02).
Après chaque installation, redémarrer le service Apache.
J’ai ajouté les différents codes pour le ntlm dans le fichier de conf /etc/apache2/sites-enabled/000-default :
ServerAdmin webmaster@localhost
DocumentRoot /var/www/FileZ/
Options FollowSymLinks
AllowOverride all
Options Indexes FollowSymLinks MultiViews
Order allow,deny
allow from all
PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm,basic
AuthName Basic
require valid-user
PerlAddVar ntdomain « mondomain nomserveurAD »
PerlSetVar defaultdomain mondomain
PerlSetVar ntlmdebug 2
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmsemtimeout 2
On redémarre apache.
Pour tester le fonctionnement du NTLM, on créé une page pour visualiser le infophp(). (Voir tuto sur le net, par exemple http://kb.mediatemple.net/questions/764/How+can+I+create+a+phpinfo.php+page%3F#gs)
Une fois sur cette page, on cherche la valeur de la variable $_SERVER[`REMOTE_USER] qui doit contenir votre login. Nous n’avons trouvé comment visualiser la variable contenant le mot de passer mais pas d’inquiétude, ça ne nous a pas gêné !
ETAPE 2
Nous avons ensuite modifié le fichier FileZ/app/views/auth/loginForm.php du site web :
<input type="hidden" name="username" class="username" value=" »/>
<input type="hidden" class="awesome large blue" value=" » />
document.forms[0].submit();
$(document).ready (function () {
$(« input[name=’username’] »).get(0).focus ();
});
Les types « hidden » ont été mis pour permettre de « cacher » les infos afficher par la page d’authentification.
La commande « document.forms[0].submit(); » permet de soumettre automatiquement les infos d’authentification.
Pour finir de tout « cacher », on modifie le fichier FileZ/resources/css/main.css et on commente « background: #494846; ».
On peut redémarrer le service apache pour être sûr.
Normalement, si on a rien oublié ci dessus, ça devrait fonctionner.
L’ETAPE 2 n’est pas optimale et peut être amélioré. Si vous avez de meilleures idées, n’hésitez pas !
Bonjour,
je rencontre un problème avec la connexion à mon AD.
Par contre je peux voir que la connexion à l’AD fonctionne car lorsque je rentre un mauvais Login et mot de passe, le serveur m’envoi un message d’erreur « Nom d’utilisateur ou mot de passe incorrect ». Mais lorsqu’ils sont bon la session ne s’ouvre pas et il redemande un login et mot de passe.
![image](https://user-images.githubusercontent.com/25910582/53596632-3d134a00-3b44-11e9-84b9-7f34bbbff429.png)
Voici ma config filez.ini :
[app]
use_url_rewriting = 1
log_dir = « /var/log/filez »
upload_dir = « /var/filez/uploads »
max_file_lifetime = 20
default_file_lifetime = 10
max_extend_count = 7
min_hash_size = 4
max_hash_size = 8
default_locale = « fr »
auth_handler_class = « Fz_Controller_Security_Internal »
user_factory_class = « Fz_User_Factory_Ldap »
user_quota = « 2G »
https = « off »
progress_monitor = « Fz_UploadMonitor_ProgressUpload »
antivirus = « clamscan -i –no-summary –remove »
admin_email = « [email protected] »
[db]
dsn = « mysql:host=localhost;dbname=filez »
user = « toto »
password = « toto »
[cron]
days_before_expiration_mail = 2
frequency = « +10 day »
[email]
from_name = « Filez »
host = « 192.168.0.251 »
port = 25
from_email = « [email protected] »
name = « filez »
[user_factory_options]
host = « 192.168.0.2 »
useSsl = « false »
baseDn = « dc=adbdt,dc=local »
accountDomainName = « adbdt.local »
username = « CN=readAD,OU=Personnels,DC=adbdt,DC=local »
password = « toto »
bindRequiresDn = « false »
accountFilterFormat = « (&(objectClass=user)(sAMAccountName=%s)) »
bindRequiresDn = true
[user_attributes_translation]
firstname = « givenname »
lastname = « sn »
email = « mail »
id = « uid »
[looknfeel]
show_credit = 1
help_url = « help »
Auriez vous une autre piste ?
Merci