Groupe 2F (stockage)

Date de création : 15 décembre 2003
Dernière modification : 10 avril 2004
Diffusion : internet

Installation d'un serveur DAV compatible esup V1

Généralités

Le projet esup-portail a besoin de mettre en oeuvre rapidement un serveur webdav qui réponde aux fonctionnalités attendues pour la version 1 (voir le document sur l'espace de stockage - PDF - PPT).

Pour rappel, le besoin pour la version 1 est d'offrir un espace de stockage privé aux utilisateurs, avec des fonctionalités réduites (pas de partages, ...) ; il suppose un accès depuis une application de confiance (trusted), qui se contente de présenter l'identifiant de la personne, et éventuellement un mot de passe partagé.

Le projet d'espace de stockage définitif est ambicieux, et suppose des développements lourds.

Aussi, nous avons pris l'option d'utiliser pour la version 1 un serveur pour lequel il n'y aura quasiment pas de développement ; ce serveur sera remplacé rapidement par un serveur plus performant au niveau fonctionnalités et scalabilité.

Le choix s'est porté sur le serveur apache V2, avec le module mod_dav et des modules dérivés de modules apache existants.

Le package de ces modules et des utilitaires associés et disponible dans l'espace de download.

Un document dédié à l'installation et au paramétrage des modules et utilitaires est disponible ici.

Modules développés

Les spécifications du serveur V1 nécessitent l'adaptation de modules existants ; cette adaptation est très légère.

mod_auth_esup

C'est un module d'autorisations. Son but est d'autoriser toute requête authentifiée, sans mot de passe, ou avec un mot de passe partagé pour tous (un 'secret' entre l'application de gestion de stockage et le serveur DAV).

Ce module est dérivé des modules mod_auth_anon et mod_auth

Il accepte les directives suivantes, à mettre dans un <Directory>, un <Location>, un .htaccess (les directives sont dérivées de mod_auth_anon) :

Esup

déclare un espace protégé par ce module. Cette directive peut être suivie sur la même ligne d'un ou plusieurs mots : ce sont des logins qui ne sont pas autorisés par le module. (fonctionnement inverse de auth_anon ; intérêt limité, voire nul ;-).

Esup_MustGivePassword

si Off, on autorise un mot de passe vide.

Esup_Password

Peut contenir un mot : c'est un mot de passe imposé (secret partagé avec le client).
Si présent, suppose que Esup_MustGivePassword est à On

Esup_Authoritative

Si On, on ne peut authentifier qu'en mode Esup. Sinon, on peut chainer d'autres modules d'authentif.

A tester plus avant. A priori, l'option Off ne semble pas judicieux dans le projet.

Require

Il est possible de protéger les ressources d'une manière classique, par des 'require user', ou un 'require valid-user' sur la resource.

mod_userdir-esup

Ce module est chargé de faire un mappage des URLs personnels avec un espace 'file système'. Il suppose qu'une URL personnelle commence par le caractère '~'.

Il ne peut pas être chargé en même temps que mod_userdir.

Par exemple, si l'url du serveur est http://docweb.univ.fr , et que la racine des 'home directories' utilisateurs est sur /home/www/users

On désire que http://docweb.univ.fr/~unuser pointe vers l'espace file-système : /home/www/users/u/un/unuser, donc faire un 'hachage' du nom, ceci pour optimisations diverses.

Nous avons modifié le module mod_userdir à cet usage.

ATTENTION : les modules mod_userdir-esup et mod_userdir ne peuvent pas être chargés simultanément.

Il accepte les mêmes directives qu'auparavant (voir la doc apache V2), plus

la directive optionnelle 'with_hash'

with_hash

Si pas présent ni with_hash_reverse, le module userdir fonctionne comme auparavant.

Si présent, l'algo de haschage est appliqué.

Par exemple :

  UserDir /home/www/users
UserDir with_hash

Réalise la transformation recherchée précédemment, c'est à dire le mapping de ~unuser vers /home/www/users/u/un/unuser
(sans l'option with_hash, le mapping aurait été fait vers /home/www/users/unuser).

with_hash_reverse

Même chose que précédemment, pour un algo de hashage inverse :
~unuser vers ../r/re/unuser

donc en partant de la fin du nom de l'utilisateur.

Dysfonctionnements rencontrés

Accès webFolders Windows

Nous avons rencontré des dysfonctionnements lors d'accès de type "webFolders" avec Windows XP :

Lors de l'accès avec le nom d'utilisateur unuser sur l'URL http://docweb.univ.fr/~unuser, Windows tente d'authentifier l'utilisateur docweb.univ.fr\unuser (au lieu de unuser), ce qui n'est bien sûr pas reconnu.

Ce problème n'est pas lié aux modules patchés esup : il se reproduit en authentification LDAP, sans module 'esup', par exemple avec la directive :

Alias /~unuser "/home/www/users/u/un/unuser"

Des problèmes identiques sont répertoriés sur Internet ; nous n'avons pas su le corriger proprement.

Ce qui est étrange, et testé tardivement, par hasard : ca marche en https!!

Ainsi, avec une config du genre :

<VirtualHost xxx.xxx.xxx.xxx:80>
ServerName docweb.univ.fr
include conf/storage_untrusted.conf
</VirtualHost>
<VirtualHost xxx.xxx.xxx.xxx:443>
ServerName docweb.univ.fr
#untrustedSSL.conf contient les directives SSL dpecifiques a docweb
include conf/storage_untrustedSSL.conf
include conf/storage_untrusted.conf
</VirtualHost>

Ca marche en https, et pas en http!!
A noter que c'est cette config qui est proposée en exemple.

Le fichier storage_untrustedSSL.conf ne contient que les directives suivantes :

SSLEngine on
SSLCipherSuite ...
SSLCertificateFile
SSLCertificateKeyFile
SSLCACertificateFile
SSLVerifyClient none

Fichiers .htaccess

Ce qui est décrit ici n'est pas un dysfonctionnement, mais un fonctionnement gênant en accès DAV :

Par config apache, nous avons interdit tout accès aux fichiers .ht*.

Ceci n'empêche pas l'utilisateur de voir ce fichier lors d'un accès Dav : le listage est obtenu grâce à la directive Dav PROPFIND, qui n'est pas concerné par cette restriction d'accès.

Ce comportement est perturbant ; il pourrait être corrigé à l'aide d'un patch certainement mineur du module mod_dav (éliminer la visibilité des fichiers .ht* lors de requêtes PROPFIND).