Il existe deux façons de servir des fichiers :
qui permet de télécharger et de téléverser des fichiers sur un serveur : c'est l'objet de ce chapitre ;
qui permet d'accéder à des fichiers et à des répertoires depuis des ordinateurs distants comme s'ils étaient présents sur un périphérique local : techniquement, il s'agit alors de systèmes de fichiers réseau, qui feront l'objet du Chapitre 43 et du Chapitre 44.
Traditionnellement, on utilise pour cela le protocole FTP (file transfer protocol). Ce protocole souffre cependant de grands défauts, et est largement déprécié au profit des protocoles HTTP (hypertext transfer protocol, le protocole du Web) et SFTP (SSH file transfer protocol). Ce sont donc ces deux systèmes que nous vous proposons de découvrir.
Si vous souhaitez mettre à disposition des fichiers, sur l'Internet ou sur votre réseau local, le plus simple est d'installer un serveur HTTP comme Apache HTTPD :
#
aptitude install apache2
Après son installation, le serveur HTTP démarre. Par défaut, il est
configuré pour servir les fichiers contenus dans le répertoire
/var/www/
. Ce répertoire contient déjà un fichier HTML
de démonstration, index.html
.
Pour proposer des fichiers en téléchargement, vous pouvez tout simplement
les placer dans ce répertoire /var/www/
:
#
cp formation-debian.pdf /var/www/
Tous les fichiers que vous placez dans ce répertoire seront accessibles à
l'URL http://nom_du_serveur/nom_du_fichier
, dans notre
cas : http://formation-debian.via.ecp.fr/formation-debian.pdf
.
Pour le moment, lorsque quelqu'un accède à l'URL racine de votre serveur,
http://nom_du_serveur/
, c'est le fichier de démonstrations
/var/www/index.html
qui s'affiche. Apache est
capable d'afficher à la place une liste des fichiers disponibles :
il suffit pour cela de retirer le fichier
index.html
:
#
rm /var/www/index.html
Si vous êtes seul à utiliser votre ordinateur, vous pouvez
sans problème utiliser le répertoire /var/www/
pour diffuser vos fichiers, quoiqu'il faille à chaque fois
effectuer les copies ou déplacements en tant que root.
Il est également possible de proposer à chaque utilisateur la possibilité d'avoir un espace Web personnel. Pour cela, il faut activer un module du serveur Apache HTTPD, puis redémarrer celui-ci :
#
a2enmod userdir
Enabling module userdir. Run '/etc/init.d/apache2 restart' to activate new configuration!
#
/etc/init.d/apache2 restart
* Restarting web server apache2 ... waiting [ OK ]
Après cela, un utilisateur ksaffier peut
créer dans son répertoire personnel un sous-répertoire nommé
public_html
: tout ce qu'il y placera sera
alors disponible à l'URL http://nom_du_serveur/~ksaffier
:
%
mkdir ~/public_html
%
cp formation-debian.pdf ~/public_html/
Astuce | |
---|---|
Vous pouvez également construire dans ce répertoire un site Web personnel ! |
Un serveur HTTP permet de mettre à disposition des fichiers, qui peuvent alors être téléchargés par n'importe qui. En revanche, cela ne peut pas convenir si vous souhaitez contrôler l'accès à ces fichiers, ou si vous souhaitez déposer des fichiers sur votre serveur. Pour cela, la meilleure solution consiste à utiliser le protocole SFTP.
SFTP signifie SSH file transfer protocol : il s'agit donc d'un protocole lié à SSH, et qui est intégré au serveur OpenSSH. Ce serveur a fait l'objet du Chapitre 40, auquel je vous renvoie si vous ne l'avez pas déjà installé.
Comme expliqué au Chapitre 40, vous pouvez accéder à votre serveur SFTP :
assez limitée, son utilisation, très basique est semblable à celle du programme ftp, avec des commandes comme get et put ;
beaucoup plus agréable, ce logiciel est décrit au Chapitre 22 ;
directement avec Nautilus, le gestionnaire de fichiers de GNOME ;
, avec un logiciel comme WinSCP.
Il est possible de limiter l'accès de certains utilisateurs, pour qu'ils puissent par exemple administrer leur site Web personnel, mais n'aient pas le droit d'accéder aux fichiers des autres utilisateurs, ni à quoi que ce soit d'autre d'ailleurs.
Il est probable que vous ne souhaitiez pas limiter ainsi tous vos utilisateurs, parce que vous n'auriez alors plus la possibilité de vous connecter vous-même à votre serveur par SSH. Nous allons donc créer un groupe qui servira à identifier les utilisateurs qui doivent être ainsi limités, et y ajouter ces utilisateurs :
#
addgroup chrooted
#
adduser ksaffier chrooted
Nous allons maintenant éditer le fichier de configuration du serveur
OpenSSH,
/etc/ssh/sshd_config
. Tout d'abord, il faut modifier
ainsi la ligne Subsystem sftp :
Subsystem sftp internal-sftp
Ajoutez ensuite, à la fin du fichier, la section qui permettra de contraindre tous les membres du groupe précédemment défini dans leur répertoire personnel, et de ne les autoriser à faire que du SFTP :
Match Group chrooted ChrootDirectory %h ForceCommand internal-sftp
Explications : la première ligne demande de n'appliquer la suite qu'aux utilisateurs membres du groupe chrooted. La seconde définit un répertoire « prison » ou chroot, le %h désignant le répertoire personnel de l'utilisateur. Enfin, la dernière ligne force l'utilisation de SFTP, ce qui interdit par exemple les connexions SSH normales.
Avertissement | |
---|---|
Cette dernière ligne est importante. En effet, si vous l'omettez, vos utilisateurs ne pourront pas, dans un premier temps, ouvrir de connexion SSH, puisqu'ils sont contraints de rester dans leur répertoire personnel, qui ne contient pas de Shell. Or, ils pourront tout à fait déposer eux-mêmes un Shell dans leur répertoire et pourront alors se connecter normalement ! Ils resteront toujours limités dans leur chroot, mais comme il existe des moyens de sortir d'un chroot, autant éviter cette éventualité, et ne fournir d'accès SSH qu'aux utilisateurs auxquels vous êtes sûr de pouvoir faire confiance. |
Dernière opération : le répertoire de chroot doit
appartenir à l'utilisateur root. Il va donc falloir
changer le propriétaire du répertoire personnel de chaque utilisateur ainsi
limité, mais également leur donner un moyen de poser des fichiers ! Je vous
propose donc de leur créer un sous-répertoire
public_html/
, dans lequel ils pourront contruire leur
site Web personnel :
#
chown root:root ~ksaffier
#
mkdir ~ksaffier/public_html
#
chown ksaffier ~ksaffier/public_html
Lorsque vos utilisateurs se connectent en SFTP, ils sont donc placés dans
leur répertoire personnel comme racine virtuelle. Si vous souhaitez que vos
utilisateurs arrivent directement dans le répertoire où ils doivent déposer
leurs documents (/public_html/
, de leur point de vue),
vous pouvez leur créer un pseudo-répertoire personnel pointant vers ce
répertoire. En effet, OpenSSH essaie de passer dans un répertoire personnel
à l'intérieur de la racine virtuelle :
#
mkdir ~ksaffier/home
#
ln -s ../public_html ~ksaffier/home/ksaffier
C'est fait : maintenant, l'utilisateur ksaffier peut
se connecter en SFTP à votre serveur, mais ne peut accéder qu'à son
répertoire personnel, et ne peut écrire que dans son répertoire
public_html/
.