30

Apr

by Maniack Crudelis

J'utilisais jusqu'à présent un dossier de partage en sshfs, très simple à mettre en œuvre, il nécessitait toutefois un passage systématique par la ligne de commande pour être monté et se montrait capricieux au démontage.
L'usage d'un dossier de partage webdav se montre beaucoup plus agréable, car le montage et le démontage du dossier se font de manière parfaitement transparente et quasi instantanée.
En y ajoutant un soupçon de SSL, nous obtenons un dossier de partage beaucoup plus pratique qu'avec sshfs et parfaitement sécurisé.

Nous allons donc explorer la mise en œuvre d'un dossier de partage webdav, couplé à l'usage d'autofs sur les clients pour un montage transparent à la demande.

Webdav présente l'avantage certain d'être compatible avec tous les systèmes d'exploitations actuel. Du coté serveur, il nécessite simplement apache.

Nous supposerons donc que nous disposons d'un serveur apache fonctionnel. (Sinon: Tutoriel apache.)

Configuration d'apache et préparations

Tout d'abord, apache doit activer quelques modules pour être capable de faire fonctionner webdav.

sudo a2enmod dav
nsudo a2enmod dav_fs
sudo a2enmod dav_lock

A présent, nous allons choisir, puis préparer le dossier destiné au partage sur le serveur.
Choisir un sous-dossier situé à l'intérieur du 'DocumentRoot' du VirtualHost peut s'avérer plus simple mais expose aux risques de dysfonctionnements liés aux 'RewriteRules' du .htaccess du site que vous hébergez.
Pour ma part, je conseille de choisir un dossier exempte de tout .htaccess et en dehors de votre site. Cela afin de partir sur des bases saines sans interférences.

Il est très important de donner le droit d'écriture à apache sur l'ensemble du dossier.

sudo chown -R www-data /DOSSIER/DE/PARTAGE/

Sans quoi, vous serez confronté à l'erreur lapidaire "Argument invalide".

Afin de limiter l'accès au dossier de partage aux seules personnes autorisées, nous allons ajouter un .htaccess à l'intérieur du dossier.

sudo nano /DOSSIER/DE/PARTAGE/.htaccess

Et écrire cette unique règle:

<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require valid-user
</Limit>

Ainsi, seul un utilisateur authentifié pourra accéder au dossier, que ce soit pour lire ou écrire.

Mais si nous parlons d'utilisateur 'authentifié', c'est justement qu'il nous faut définir un nom d'utilisateur et un mot de passe associé au dossier de partage.
Étant donné la configuration à suivre des clients, je ne saurais que trop conseiller un mot de passe spécifique à ce service.
Ces identifiants vont être stockés dans un fichier .htpasswd à placer où bon vous semble.

htpasswd /DIR/.htpasswd nom_d_utilisateur

Le dossier est prêt à accepter le partage webdav et apache prêt à le faire fonctionner. Nous allons donc passer à l'étape suivante en activant le partage depuis apache.

Activation du partage webdav dans le VirtualHost apache

Pour activer le partage webdav, nous allons simplement ajouter quelques lignes au fichier de
configuration du site servi par apache, que ce soit dans httpd.conf ou dans un VirtualHost dans sites-available.

#WEBDAV
Alias /DOSSIER_PARTAGE /CHEMIN/DU/DOSSIER_PARTAGE
DAVLockDB ${APACHE_LOCK_DIR}/DAVLock
DAVMinTimeout 600
<Directory /CHEMIN/DU/DOSSIER_PARTAGE>
DAV On
AuthName "Authentification WEBDAV"
AuthUserFile /DIR/.htpasswd
AuthType Basic
AllowOverride AuthConfig
Options Indexes FollowSymLinks MultiViews Includes
</Directory>

Le terme 'APACHE_LOCK_DIR' utilisé au niveau de la directive 'DAVLockDB ${APACHE_LOCK_DIR}/DAVLock' doit être laissé tel quel. Apache en déduira lui-même le dossier de destination, pour ma part /var/lock/apache2.

Alias /DOSSIER_PARTAGE /CHEMIN/DU/DOSSIER_PARTAGE

Cette directive n'est utile que si vous avez choisi un dossier qui ne se trouve pas sous le 'DocumentRoot' de votre site. Elle permettra à apache d'aller chercher le dossier ailleurs.

AuthUserFile /DIR/.htpasswd

Cette directive va lire le fichier .htpasswd créé précédemment pour demander l'authentification lors de la connexion au dossier.

Nous pouvons maintenant redémarrer apache afin qu'il prenne en compte tout les changements que nous avons apporté.

sudo /etc/init.d/apache2 restart

Notre partage webdav devrait à présent être accessible à cette adresse:
http://monsite.fr/DOSSIER_PARTAGE depuis un navigateur web ou webdav://monsite.fr/DOSSIER_PARTAGE depuis un navigateur de fichier compatible.

A ce stade, notre partage webdav est fonctionnel, mais il est nécessaire de s'authentifier à chaque fois que nous voulons y accéder. De plus, il est considéré comme un dossier distant et la gestion des fichiers en est donc alourdie. Nous allons donc améliorer tout ça.

Montage automatique du partage à l'aide de davfs2 et autofs

Afin d'obtenir un montage automatique sans demande d'authentification, nous allons modifier chacun des clients concernés.
Tout d'abord, le client doit installer davfs2, pour la gestion du protocole webdav en tant que système de fichier et autofs pour effectuer automatiquement le montage du dossier.

sudo apt-get install davfs2 autofs

Il est possible de s'assurer du bon fonctionnement de davfs2 en montant manuellement le dossier de partage.

sudo mount -t davfs http://monsite.fr/DOSSIER_PARTAGE /DIR/MONTAGE/

On le démontera ainsi, après les essais:

sudo umount /DIR/MONTAGE/

Afin d'autoriser le montage webdav sans demande d'authentification, il faut renseigner le fichier /etc/davfs2/secrets et lui indiquer l'identifiant et le mot de passe. Bien que ce fichier nécessite les droits root pour être lu, il est vivement conseillé d'utiliser un mot de passe spécifique à ce service afin d'éviter de compromettre tout votre serveur le cas échéant.

sudo nano /etc/davfs2/secrets

Et ajouter à la fin du fichier:

http://monsite.fr/DOSSIER_PARTAGE identifiant motdepasse

Dés lors, nous pouvons nous connecter au dossier de partage sans avoir besoin de s'authentifier, davfs2 lisant les informations d'authentifications directement dans le fichier /etc/davfs2/secrets.

A présent, nous allons éditer les options d'autofs pour permettre le montage automatique de webdav dés lors que nous pénétrerons dans le dossier cible.
Le dossier cible sur le client doit être un dossier vide, celui-ci se verrait "virtuellement" vidé de tout son contenu lors du montage du partage si il contenait des fichiers. Dans ce dossier cible, le montage créera un dossier menant au partage webdav lui-même.

Commençons par éditer le principal fichier d'autofs, /etc/auto.master qui réuni tout les dossiers concerné par l'automount. Nous allons y indiquer le dossier qui contiendra le montage webdav ainsi qu'un second fichier de configuration en charge de ce montage par autofs.

sudo nano /etc/auto.master

Et ajoutons à la fin du fichier la ligne suivante:

/DIR/DOSSIER_CIBLE /etc/auto.webdav --timeout=30 --ghost

L'option --ghost sert à créer le dossier pour le montage. Sans cette option, le montage ne serait pas visible et il faudrait directement l'atteindre par son adresse dans le navigateur.

Nous allons ensuite créer le second fichier de configuration, mentionné dans la ligne ajoutée précédemment.

sudo nano /etc/auto.webdav

Et y inscrire la ligne suivante:

PARTAGE -fstype=davfs,rw,exec,uid=1000,gid=1000,dir_mode=0777,file_mode=0666 http://monsite.fr/DOSSIER_PARTAGE

PARTAGE est à choisir arbitrairement, c'est le nom que portera le dossier créé dans le dossier cible et qui contiendra le partage webdav.

Cette configuration oblige malheureusement à avoir un sous-dossier dans l'arborescence avant d'atteindre le partage. C'est inutile et contraignant mais je ne suis pas parvenu à un comportement plus simple sans "vider" le dossier parent.

Il ne reste plus qu'à redémarrer autofs pour prendre en compte la nouvelle configuration.

sudo /etc/init.d/autofs restart

Il suffit dorénavant d'ouvrir le dossier /DIR/DOSSIER_CIBLE pour voir apparaître le dossier PARTAGE, contenant le partage webdav avec le serveur. Ce partage sera monté uniquement lors de l'accès au dossier /DIR/DOSSIER_CIBLE et sera démonté après 30 secondes d'inactivité du partage. Économisant ainsi les ressources des clients comme du serveur.
On peut suivre l'activité de autofs et vérifier son bon fonctionnement dans le log /var/log/syslog.

Sécuriser le partage avec SSL

Webdav supporte le chiffrage SSL, il suffira pour cela de configurer apache pour qu'il utilise SSL.
Toutefois, si webdav supporte sans problème SSL, il en est un peu autrement avec davfs2 qui n'accepte sans sourcilier que les certificats SSL signés par une autorité de certification. Si vous utilisez un certificat auto-signé, davfs2 demandera une confirmation du certificat à chaque connexion, ce qui rend impossible toute automatisation par autofs.
Pour obtenir un certificat signé par une CA reconnue, je conseille startssl.com, qui fourni gratuitement un certificat valide sur tout les navigateurs.

En considérant apache configuré pour utiliser SSL et un certificat signé par une autorité de certification, voyons comment configurer davfs2 et autofs pour sécuriser le partage avec SSL.

Tout d'abord, il faut copier la clé publique monsite.crt ou monsite.pem dans le dossier /etc/davfs2/certs/. Ensuite nous allons éditer le fichier /etc/davfs2/davfs2.conf.

sudo nano /etc/davfs2/davfs2.conf

Puis décommenter et éditer la ligne suivante:

servercert monsite.crt

Pour terminer, nous allons éditer les fichiers /etc/davfs2/secrets et /etc/auto.webdav en remplaçant http par https.

Un redémarrage de autofs suffira pour que SSL soit utilisé lors des connexions.

 

 

Tout est terminé, et nous disposons à présent d'un dossier de partage qui se monte automatiquement à la demande et se démonte lorsqu'il n'est plus utilisé. Sans aucune intervention de votre part.

Comments

Leave a Reply