[!meta title="Partages de fichiers"]]

Introduction

Le partage de fichiers peut permettre d'accéder à ses données stockées sur le serveur mais aussi de partager des données avec d'autres personnes. Il y a un grand nombre de manières de réaliser cela.

  • Accéder à ses données sans pouvoir les manipuler :

Par un serveur web comme Apache, ou en FTP, on peut naviguer dans une arborescence en utilisant un navigateur web. Le téléchargement est possible. On peut sécuriser l'accès avec un nom d'utilisateur et un mot de passe.

  • Accéder à ses données à distance et les manipuler :

    • Ssh : Voir sur cette page l'utilisation de ssh et plus particulièrement sshfs.

    • Apache avec l'interface h5ai : C'est une interface permettant de télécharger mais aussi d'ajouter des fichiers. On peut sécuriser l'accès ou non. Pas de partage possible.

    • Owncloud : Service web contenant beaucoup de fonctions dont une d'accès et de partage de fichiers.

    • Dropcenter : Une interface web d'accès à ses données offrant la possibilité d'uploader des fichiers. Incorpore une authentification.

  • Accéder à ses données et pouvoir les partager :

    • Owncloud possède des fonctions de partage entre utilisateurs. Il faut bien évidemment que les autres utilisateurs aient un compte sur votre service Owncloud.

    • Spakleshare est un système à la Dropbox avec un client à installer sur votre ordinateur mais pas d'interface web. Ce n'est pas le plus simple à comprendre et à utiliser pour des novices mais il est très utile pour du travail collaboratif car il tourne avec git ce qui permet de versionner le travail (historisation de chaque modification avec possibilité de retour à des versions antérieurs des fichiers)

Serveur Web Apache

Accès aux répertoires

Nativement, Apache permet de naviguer dans son arborescence. Par exemple, si on a déjà un VirtualHost (VH) actif, chaque répertoire situé à la racine de ce VH sera accessible au navigateur web. (pour l'utilisation des VH, voir la page dédiée)

Par exemple, vous avez activé le VH suivant, vous pourrez accéder aux fichiers situés dans le répertoire /var/www/site

<VirtualHost *:80> 
ServerName www.example.org 
DocumentRoot /var/www/site/
</VirtualHost>

Si par exemple, vous avez un répertoire nommé photos situé à /var/www/site/photos, alors vous pourrez accéder aux fichiers présents dans photos à l'adresse suivante : http://www.example.org/photos Et ainsi de suite en suivant l'arborescence.

De ce fait, on peut possiblement accéder à n'importe quel répertoire de votre machine-serveur si tant est que le serveur web ait les droits d'accès.

Par exemple, si vous voulez accéder facilement à vos fichiers de votre répertoire Documents situé dans votre dossier personnel, vous pouvez utiliser un aliase ou un sous-domaine (voir la section dédiée)

Une fois que l'accès est configuré, on voudra peut-être éviter que Google puisse référencer vos fichiers personnels ou bien devoir taper un mot de passe pour accéder à certains répertoires.

Ne pas être référencé par Google et autres robots

Pour cela, vous devez créer un fichier nommé robots.txt à la racine de votre serveur. Il contiendra typiquement les lignes suivantes :

User-agent: * 
Disallow:/ 

Ce fichier robots.txt donne des directives aux robots (moteurs de recherche, robots d'indexation de contenus) que ces derniers sont libres de suivre ou pas. Ce n'est donc pas une mesure de sécurité ni de restriction d'accès. Cela permet simplement d’espérer de ne pas être présent dans les résultats de recherche des grands moteurs de recherche. Cela veux dire que Google, par exemple, peut récupérer vos données, les stocker, les utiliser de différentes manières mais ne pas les publier dans leurs résultats de recherche.

Plus d'explications sur cette page

Sécuriser son accès

Vous pouvez sécuriser l'accès à certains répertoires en utilisant les fichiers de contrôles nommés .htaccess. Ces fichiers donnent des informations diverses et peuvent contenir la liste des utilisateurs autorisés. Avec l'authentification basique, les mots de passe circulent "presque" en clair sur le réseau. Il faut donc utiliser l'authentification basique conjointement avec TLS qui chiffre l'ensemble du flux (https).

Pour activer cette fonction dans Apache, il faut bien vérifier que le module soit activé :

a2enmod auth_basic

Prenons un exemple : je veux pouvoir accéder à mes données personnelles situées dans le répertoire /media/data/perso/. Je dois tout d'abord me débrouiller pour que le serveur web accède à ce répertoire en mettant un alias dans le fichier du VH ou en créant un VH spécifique (voir la page dédiée). Ensuite, dans le répertoire /media/data/perso, je dois créer un fichier nommé .htaccess contenant cela :

 AuthName "Page protégée" 
 AuthType Basic 
 AuthUserFile "/chemin/vers/le/fichier/.liste-users" 
 Require valid-user 

Le champs AuthUserFile renvoi vers un fichier contenant le correspondances entre les utilisateurs autorisés et leurs mots de passe associés.

Pour créer ce fichier, placez-vous dans le répertoire où vous voulez le stocker :

cd /chemin/vers/le/répertoire/

Puis utilisez la commande suivante permettant de créer le fichier et d'ajouter un utilisateur :

htpasswd -c .liste-users utilisateur1

exlications :

  • htpasswd est la commande
  • l'option -c permet de créer le fichier
  • .liste-users est le nom du fichier qui sera créé dans le répertoire où l'on se trouve (on peut lui donner n'importe quel nom, tant qu'il correspond à ce qui est indiqué dans le fichier .htaccess
  • utilisateur1 est le login qui sera utilisé pour accéder à la page web

Par la suite, si l'on veut ajouter un utilisateur (page web accessible à un groupe de personnes), il faut utiliser cette même commande mais sans l'option -c

htpasswd .liste-users utilisateur2

Plus de détails sur l'utilisation des fichiers .htaccess : ici ou

Mettre une interface plus agréable et ergonomique

Vous aurez remarqué que le listing des fichiers n'est pas du plus esthétique et fonctionnel. Voici deux propositions pour rentre cette interface plus attrayante, Apaxy et h5ai

  • Apaxy est très légère car ne contenant rien d'autre que de l'HTML et du CSS mais ne contient qu'une interface simple, sans modules associés. Une démo est disponible ici
  • H5ai est plus lourde, basée sur du php, mais fournit plus de fonctionnalités. Une démo est disponible ici.

Vous pouvez suivre les indications d'installation sur leur sites web respectifs ou suivre ce qui suit :

H5ai

Installation

Commencez par vous placer dans le répertoire dont vous avez déjà donné l'accès à Apache comme indiqué ci-dessus et que vous voulez customiser.

cd /mon/repertoire

Téléchargez la dernière version :

  • récupérez l'adresse du fichier situé sur cette page : http://release.larsjung.de/h5ai/ (clic droit sur le fichier puis "copier l'adresse du lien").

  • téléchargez l'archive dans votre répertoire à customiser sur votre serveur :

    wget http://release.larsjung.de/h5ai/h5ai-0.24.0.zip

(l'adresse peut varier en fonction de la version de l'archive)

Décompressez l'archive (avoir le paquet unzip d'installé sur votre machine) puis renommez le répertoire et le mettre en "caché" si besoin.

unzip h5ai-0.24.0.zip
rm h5ai-0.24.0.zip
mv _h5ai/ .theme-h5ai

Rendez ce répertoire lisible par le serveur web

chgrp -R www-data .theme-h5ai && chmod -R 750 .theme-h5ai

Configuration

Afin de profiter du cache (créations des vignettes pour les icônes permettant un chargement rapide pour des connections ulterieures), il faut rendre un répertoire accessible en écriture au serveur web

chmod -R 770 .theme-h5ai/cache

Afin de vérifier si toutes les fonctionnalités de h5ai peuvent fonctionner, rendez-vous à l'interieur du répertoire en vous connectant par votre navigateur à l'adresse suivante : http://example.org/mon-alias/.theme-h5ai (si vous avez choisi d'accéder à votre répertoire par un alias) ou http://sous-domaine.example.org/.theme-h5ai si vous utilisez un sous-domaine pour accéder à votre répertoire. Une page d'affiche et vous indique la version de h5ai, le fichier d'index que l'on utilisera plus tard et les détail des modules actifs.

Pour activer ffmpeg, convert, tar et zip :

apt-get install ffmpeg imagemagick tar zip

Il existe un fichier de configuration qui peut être interessant de modifier selon vos besoins

nano .theme-h5ai/conf/options.json

Ce fichier est assez bien commenté et vous trouverez facilement votre bonheur. Nous insistons juste sur quelques points :

Pour supprimer les QRcodes générés pour chaque fichier survolés, c'est vers la ligne 258 :

    /*
    Show QRCodes on hovering files.

    - size: width and height in pixel
    */
    "qrcode": {
            "enabled": false,
            "size": 150
    },

Pour activer le drag'n'drop (possibilité d'ajouter des fichiers sur votre serveur en glissant-déposant des fichiers directement sur l'interface web h5ai. De même que précédemment, il faut que le serveur web puisse écrire dans le répertoire. Cela se passe vers la ligne 98 :

    /* [EXPERIMENTAL]
    File upload via drag'n'drop. Folders are not supported.
    The working file size seems to be very browser dependent.

    - maxfiles: number, max number of files per upload
    - maxfilesize: number, file size is in MB
    */
    "dropbox": {
            "enabled": true,
            "maxfiles": 10,
            "maxfilesize": 1000
    },

Pour activer la suppression des fichiers, vers la ligne 91, changer le false par true dans la partie suivante :

/* [EXPERIMENTAL]
    Allow file deletion.
    */
    "delete": {
            "enabled": false
    },

Pour cette fonctionnalité, il faut évidemment que le serveur web ait les droits d'écriture dans votre répertoire. Vous pouvez aussi opter pour un sous-répertoire prévu à cet effet et dans lequel le serveur web a tout les droits. Modifiez en fonction de votre configuration.

Pour activer le téléchargement d'archives (sélection de plusieurs fichiers ou répertoires puis téléchargement de l'ensemble sous forme d'une archive tar ou zip), cela se passe vers la ligne 111 :

    /*
    Enable packaged download of selected entries.

    - type: "php-tar", "shell-tar" or "shell-zip"
    - packageName: basename of the download package, null for current foldername
    */
    "download": {
            "enabled": true,
            "type": "php-tar",
            "packageName": null
    },

Remplacez php-tar par shell-zip si vous voulez un téléchargement sous forme d'archive au format .zip.

Ces deux dernières fonctions nécessitent de sélectionner les fichiers en cliquant dans le coin supérieur gauche des icônes ou en sélectionnant avec la souris un ensemble de fichiers. Cela active la fonctionnalité qui apparait alors en haut de la page web.

Il est possible d'ajouter du texte dans le header (bandeau au dessus des fichiers) et/ou dans le footer (partie du bas). Pour cela, il faut créer deux fichiers dans votre répertoire à customiser : _h5ai.footer.html et/ou _h5ai.header.html Ensuite, il faut ajouter du texte entre les deux balises <div></div> et du code html si vous voulez un minimum de mise en forme. Par exemple :

<div align="center">
<h1>Titre de premier niveau</h1> <!-- On peut mettre ici le titre de la page -->
Du texte <!-- on écrit des informations -->
</br> <!-- On saute une ligne -->
Encore du texte
<h2>Ici un titre de niveau 2</h2>
Et encore du texte pour finir
</div>

Activation

Il ne reste plus qu'à modifier votre fichier .htaccess situé à la racine de votre répertoire

nano .htaccess

et y rajouter la ligne suivante :

DirectoryIndex  index.html  index.php  /.theme-h5ai/server/php/index.php

Dès lors, si vous n'avez pas de fichier index à la racine, le serveur web ira interroger le fichier d'index de h5ai. Si vous voulez enlever cette interface, il vous suffira de supprimer le répertoire de h5ai ou, encore mieux, d'enlever le chemin vers l'index d'h5ai dans votre fichier .htaccess

Mise à jour

La mise à jour n'est pas automatique. Il faut visiter le site de h5ai afin de voir si votre version est à jour. Pour mettre à jour, il faut repasser la phase d'installation (supprimer votre ancien h5ai et le remplacer par le nouveau). Avant de réaliser cela, veillez à sauvegarder votre fichier de configuration si vous l'avez modifié comme indiqué ci-dessus.

Apaxy

Installation

  • En utilisant git (avoir installé git auparavant avec la commande apt-get install git :

Placez-vous dans le répertoire à customiser et clonez le dépôt :

git clone https://github.com/AdamWhitcroft/Apaxy.git

Renommez si vous le voulez le répertoire afin de le rendre caché :

mv Apaxy .theme-apaxy
  • En téléchargeant l'archive :

Placez-vous dans le répertoire à customiser et lancez le télechargement :

wget https://github.com/AdamWhitcroft/Apaxy/archive/master.zip

Dézippez (avoir installé unzip par apt-get install unzip)

unzip master.zip

Renommez si vous le voulez le répertoire afin de le rendre caché :

mv Apaxy-master .theme-apaxy

Configuration

Donnez les droits au serveur web

chgrp www-data .theme-apaxy && chmod -R 750 .theme-apaxy

Il faut ensuite configurer votre fichier .htaccess en y ajoutant les répertoire où le serveur web ira chercher les icônes et le style de la page. Pour cela, il faut y ajouter le contenu du fichier htaccess.txt situé dans le répertoire d'apaxy.

cat .theme-apaxy/apaxy/htaccess.txt >> .htaccess

Explication : la commande cat liste le contenu du fichier et la sortie est ajoutée à la suite du fichier .htaccess grâce à >>

Ce contenu est ensuite à adapter en fonction de votre chemin vers apaxy. Il faut remplacer /{FOLDERNAME} par votre répertoire, dans notre cas ce serait /.theme-apaxy/apaxy. Pour réaliser cela facilement utilisez la fonction rechercher-remplacer. Sous nano, il faut utiliser Ctrl+W suivi de Ctrl+R. Renseignez ce que vous voulez rechercher (ici {FOLDERNAME}) et faites enter. Ensuite renseignez ce par quoi vous voulez remplacer (ici .theme-apaxy/apaxy)

Vous pouvez modifier et ajouter du texte dans le header (au dessus de la liste des fichiers) et dans le footer (en dessous de la liste des fichiers). Pour cela, éditez les fichiers header.html et footer.html situés dans le répertoire theme de Apaxy.

Mise à jour

Si vous avez installé avec git, placez-vous dans le répertoire d'Apaxy et lancez :

git pull

Si vous avez téléchargé l'archive, vous devez supprimer votre répertoire d'Apaxy afin de le remplacer en suivant la procédure d'installation ci-dessus (attention, bien veiller à sauvegarder le contenu que vous auriez modifié). Cela peut se faire en une commande en vous plaçant dans votre répertoire à customiser :

mv .theme-apaxy .theme-apaxy-back && \
wget https://github.com/AdamWhitcroft/Apaxy/archive/master.zip && \
unzip master.zip && \
mv Apaxy-master .theme-apaxy

Owncloud

Owncloud est une solution de cloud auto-hébergé. Owncloud regroupe beaucoup de services différents dont le protocole webdav qui permet le partage et la synchronisation de fichiers.

Installation

Voir la page dédiée

Une fois votre owncloud installé, vous pouvez accéder à l'onglet fichiers dans lequel vous n'aurez rien mais il vous sera possible d'ajouter des fichiers et de créer des répertoires. Le problème est que les fichiers sont stockés dans un répertoire de owncloud. Si vous avez installé owncloud dans /var/www, les fichiers sont par défaut stockés dans le répertoire /var/www/owncloud/data/user/files. Par sécurité, il est vivement recommandé d'utiliser un répertoire se situant en dehors de /var/www.

Choisir le répertoire de stockage de owncloud

Il vous suffit alors de vous déplacer dans le répertoire de votre utilisateur de owncloud et de taper les commandes suivante :

cd /var/www/owncloud/data/user/

pour se déplacer (en remplaçant "user" par le nom de votre utilisateur d'owncloud)

rm -r /var/www/owncloud/data/user/files

pour supprimer le répertoire par défaut

ln -s /media/data/perso/user/ files

pour créer un lien vers vos documents (remplacer le chemin ci-dessus suivant votre cas)

Vous pouvez aussi ne pas supprimer le répertoire par défaut (sauter la 2ème étape ci-dessus) et créer un lien à l'intérieur du répertoire files :

ln -s /media/data/perso/user files/documents

Reconnectez-vous à votre owncloud et vous pourrez accéder à vos fichiers.

Enfin, pour pouvoir supprimer et ajouter des fichiers, il faut que owncloud ait la permission de le faire dans vos répertoires. Dans une configuration standard, c'est l'utilisateur système nommé www-data qui fait ce travail. Il faut donc que www-data ait les droits en écriture dans vos répertoires. Vous pouvez donc ajouter comme groupe propriétaire www-data et donner les droits en écriture à ce groupe :

chgrp www-data /media/data/perso/user/
chmod -R 775 /media/data/perso/user/

Une autre manière de faire serait d'utiliser le module mpm-itk. Vous pouvez suivre les infos sur notre page dédiée à Apache

Dropcenter

Dropcenter est un service permettant de parcourir ses fichiers dans une interface web et de pouvoir uploader des fichiers sur son serveur à la manière de WeTransfert ou du service de free. Le but est donc de publier des fichiers à des gens que l'on connait plus ou moins bien pour une durée plus ou moins longue.

Dropcenter ne gère pas différents comptes. On peut créer différents utilisateurs mais il n'y aura qu'un seul espace de stockage commun ce qui implique que tous les fichiers sont partagés. Il faut donc penser cette solution comme mono-utilisateur ou comme un espace de stockage commun.

Une solution pourrait être l'installation de plusieurs instances de dropcenter sur votre serveur si vous avez plusieurs utilisateurs. Par exemple, on peut installer un Dropcenter dans chaque dossier personnel. Prenons l'exemple d'un utilisateur nommé robert ayant un dossier personnel /home/robert.

Installation de dropcenter

On se place dans le répertoire où l'on veut installer dropcenter :

cd /home/robert

on télécharge la dernière version de Dropcenter (nécessite d'avoir installé git sur son système : apt-get install git)

git clone https://github.com/ldleman/dropcenter/

et on donne les droits aux serveur web

chown www-data:www-data /home/robert/dropcenter

Configuration d'Apache

Ensuite on configure Apache pour accéder à la ressource en créant un VH ou un alias dans un VH déjà existant (voir la page dédiée)

On peut donc imaginer un VH de ce type :

<VirtualHost *:80> 
ServerName www.example.org 
DocumentRoot /var/www/site/
Alias /robert /home/robert/dropcenter 
</VirtualHost>

Ainsi, en allant à l'adresse http://www.example.org/robert, l'utilisateur robert tombera dans sa dropcenter personnelle.

Si Lucie veut elle aussi un dropcenter, il suffit de répéter l'opération et de lui installer le sien dans son dossier personnel. Par la suite, ajouter un alias pour aboutir à une VH du type :

<VirtualHost *:80> 
ServerName www.example.org 
DocumentRoot /var/www/site/
Alias /robert /home/robert/dropcenter 
Alias /lucie /home/lucie/dropcenter
</VirtualHost>

Redéfinir le répertoire de stockage de Dropcenter

Si vous avez déjà des données et que vous voulez y accéder par Dropcenter, il va falloir créer un lien vers celles-ci. Le répertoire de stockage de Dropcenter se trouve dans le répertoire nommé uploads situé dans le répertoire de Dropcenter. Afin de pouvoir accéder à vos données par Dropcenter, il va falloir créer un lien :

Se placer dans le répertoire uploads :

cd /home/robert/dropcenter/uploads

Puis créer le lien :

ln -s /media/data/perso/robert documents

remplacez /media/data/perso/robert par le répertoire que vous voulez accéder via dropcenter et remplacez documents par un nom que vous voulez donner à ce lien.

Vous pouvez ainsi créer des liens vers différents répertoires de votre système.

Gérer les permissions

Il y a 2 problématiques majeures :

1- C'est l'utilisateur www-data qui fait tourner Dropcenter et cet utilisateur doit avoir les droits en écriture sur vos répertoires de stockage pour pouvoir uploader des fichiers

2- Après écriture de fichiers, ceux-ci auront comme propriétaire l'utilisateur www-data et vous ne pourrez donc pas les supprimer par un autre moyen que dropcenter.

Solution 1

On peut assigner www-data comme groupe propriétaire du répertoire et lui donner les droits en écriture :

chgrp -R www-data /media/data/perso/robert && chmod -R 775 /media/data/perso/robert

Solution 2

On peut utiliser les acl (une gestion très fine des droits) Nous allons donc assigner des droits spécifiques pour le groupe www-data sans toucher aux droits de base :

setfacl -R -m g:www-data:rwx /media/data/perso/robert

Explications :

  • setfacl : commande qui assigne les droits
  • -R : pour récursif c'est à dire, s'applique à toute l'arborescence qui suit
  • g : pour désigner le groupe (www-data)
  • rwx : pour donner les droits en lecture (r), en écriture (w) et en exécution (x)

Ensuite nous allons mettre des droits par défaut pour notre utilisateur pour chaque fichier qui sera créé dans l'arborescence (le "d" précise cela dans la commande) :

setfacl -R -m d:g:robert:rwx /media/data/perso/robert

Cela permet d'ajouter l'acl rxw pour robert à chaque fichier créé par www-data. Le fichier appartiendra au groupe www-data mais robert pourra le supprimer ou le transformer.