On ne va pas se mentir, le protocole FTP ce n’est plus trop à la page pour de très nombreuses raisons que vous connaissez sûrement et que je ne vais pas exposer ici. Cependant, c’est encore malgré tout assez utilisé dans le monde pour diverses raisons. C’est notamment le cas dans le monde de l’entreprise ou il n’est pas rare de trouver cette technologie qui permet aux employés de centraliser les ressources facilement. Ça faisait longtemps que j’en avais installé et ce tutoriel est l’occasion de se remettre à la page avec le logiciel VsFTPd sur Linux Ubuntu.
Pour illustrer ce tutoriel, je vais prendre le cas pratique d’un serveur tout ce qu’il y a de plus basique juste pour du partage d’image et sans avoir besoin de confidentialité. Il s’agit d’images publiques et ce n’est pas un espace de sauvegarde, juste d’échange entre 2 collaborateurs ou plus. Ce blog étant mon carnet de notes et qui permet à n’importe qui de piocher ce qu’il a besoin dedans, je commence donc au plus simple.
Comme pour Laravel, j’aime bien commencer le plus simple possible puis ensuite créer de nouveaux tutoriels qui s’appuient sur les anciens tout en ajoutant de la complexité. Dans ce premier tutoriel sur le FTP, on va donc utiliser le logiciel VsFTPd qui est le plus réputé sur Linux. VsFTPd est très robuste, léger et surtout ne souffre pas de faille de sécurité connue à l’inverse de ses concurrents. C’est donc VsFTPd que j’ai logiquement choisi ici.
Installation du logiciel VsFTPd
Pour faire ce tutoriel, je me suis procuré un serveur gratuit sur Digital Ocean avec la distribution Linux la plus classique à savoir Ubuntu. Une fois sur votre serveur vous pouvez alors lancer les commandes que vous commencez maintenant à très bien connaître :
sudo apt update
sudo apt upgrade
Une fois que tout est bien à jour sur votre Linux Ubuntu, on peut maintenant passer à l’installation de VsFTPd avec APT :
sudo apt-get install vsftpd
Ce logiciel VsFTPd est vraiment très léger et normalement l’installation devrait se faire très rapidement. D’ailleurs, j’en profite pour vous donner l’information ici, si vous voulez reprendre à zéro le tutoriel ou juste désinstaller VsFTPd il faudra faire la commande suivante :
sudo apt-get remove --purge vsftpd
Création d’un utilisateur pour le serveur FTP
Pour partir sur quelque chose d’assez propre dès le départ, on va créer un groupe dans notre Linux spécialement dédié au FTP. Cela va nous permettre ensuite d’aller mettre dedans, tous les utilisateurs qui auront besoin de se servir de ce serveur FTP. Je commence donc par créer ce nouveau groupe ftpusers avec la commande suivante :
sudo groupadd ftpusers
Une fois que notre groupe est fait, on va ensuite créer notre premier utilisateur qui se connectera au serveur FTP :
sudo adduser ftpuser
Puis on l’ajoute dans notre groupe des utilisateurs du serveur FTP :
sudo usermod -a -G ftpusers ftpuser
Enfin, je vérifie que mon nouvel utilisateur a bien été ajouté dans le groupe avec la commande suivante :
groups ftpuser
Création du dossier racine pour les fichiers du FTP
Il faut bien que les fichiers qui vont s’échanger sur le serveur FTP se trouvent quelque part dans le système de fichier de notre Linux. Pour cela, on va donc créer un dossier qui sera la racine de notre serveur FTP et attention, cette racine, c’est important pour notre FTP dans l’étape de configuration qui va suivre. Pour rester cohérent avec le système de fichier de Linux, on va créer un dossier dans /var/ à côté de nos sites web dans /var/www/ avec cette commande :
mkdir /var/myftp/
On en profite pour attribuer directement le bon groupe et utilisateur sur ce dossier racine du FTP avec la commande :
sudo chown -R ftpuser:ftpusers /var/myftp/
Modification du fichier de configuration de VsFTPd
Maintenant que VsFTPd est correctement installé sur notre serveur Linux sous Ubuntu, on peut commencer la phase de configuration. Le fichier de configuration de VsFTPd se trouve à cet emplacement :
vi /etc/vsftpd.conf
Je l’ai ouvert avec Vi, mais vous pouvez bien évidemment utiliser l’éditeur de texte de votre choix. Voici le contenu modifié de mon fichier de configuration vsftpd.conf de VsFTPd après quelques modifications que je vais ensuite vous expliquer :
listen=YES
listen_ipv6=NO
local_root=/var/myftp/
chroot_local_user=YES
local_enable=YES
write_enable=YES
anonymous_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
anonymous_enable=NO
ssl_enable=NO
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_min_port=10000
pasv_max_port=10100
- listen=YES : Active le mode d’écoute pour IPv4, permettant à VsFTPd d’accepter les connexions entrantes sur IPv4.
- listen_ipv6=NO : Désactive le mode d’écoute pour IPv6, VsFTPd n’acceptera pas les connexions entrantes sur IPv6.
- local_root=/var/myftp/ : Définit le répertoire racine pour les utilisateurs locaux à /var/myftp/. Lorsqu’un utilisateur local se connecte, il est dirigé vers ce répertoire.
- chroot_local_user=YES : Restreint les utilisateurs locaux à leur répertoire racine pour des raisons de sécurité, empêchant l’accès aux autres parties du système de fichiers.
- local_enable=YES : Permet la connexion des utilisateurs locaux. Si désactivé, seuls les utilisateurs anonymes peuvent se connecter.
- write_enable=YES : Autorise les utilisateurs à effectuer des opérations d’écriture sur le serveur, comme téléverser ou modifier des fichiers.
- anonymous_enable=NO : Interdit les connexions anonymes. Les utilisateurs doivent posséder un compte sur le serveur pour se connecter.
- dirmessage_enable=YES : Active l’affichage de messages lors de l’entrée dans un nouveau répertoire, basés sur les fichiers .message présents dans ces répertoires.
- use_localtime=YES : Utilise l’heure locale du serveur pour afficher les horaires des fichiers et répertoires.
- xferlog_enable=YES : Active la journalisation des transferts de fichiers, enregistrant les détails des téléchargements et téléversements.
- connect_from_port_20=YES : Utilise le port 20 pour les connexions de données FTP actives, conformément aux standards FTP.
- ssl_enable=NO : Désactive le chiffrement SSL, les connexions restent non chiffrées.
- rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem : Indique le chemin du certificat SSL pour les connexions chiffrées, si SSL est activé.
- rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key : Indique le chemin de la clé privée SSL correspondant au certificat, si SSL est activé.
- secure_chroot_dir=/var/run/vsftpd/empty : Définit un répertoire vide pour le chroot sécurisé, utilisé pour des raisons de sécurité.
- pam_service_name=vsftpd : Spécifie le service PAM pour l’authentification des utilisateurs.
- pasv_min_port=10000 et pasv_max_port=10100 : Détermine la plage de ports (de 10000 à 10100) pour les connexions en mode passif.
C’est pas mal pour un début déjà non ? Pourtant, pour un simple service FTP sur notre serveur Linux, le travail n’est pas encore terminé ! On va maintenant passer à la partie utilisateur pour pouvoir se connecter et utiliser notre FTP.
Autorisation dans le pare-feu UFW
Maintenant, il va bien falloir pouvoir se connecter à notre serveur FTP de l’extérieur. Pour cela, il faut que le pare-feu de votre serveur Ubuntu autorise la connexion. Pour vérifier si votre port 21 est ouvert, vous pouvez faire la commande suivante :
sudo ss -tuln | grep :21
Si votre serveur est tout neuf et que vous n’avez jamais bricolé dessus, il y a de fortes chances que rien ne s’affiche et donc que le port 21 ne soit pas ouvert. Dans ce cas, vous ne pourrez pas contacter votre serveur de l’extérieur, il faut donc l’ouvrir dans le pare-feu par défaut UFW d’Ubuntu avec cette commande :
sudo ufw allow 21/tcp
Ce n’est pas tout car si vous avez bien regardé, dans la configuration, nous avons mentionné une plage de port pasv_min_port=10000 et pasv_max_port=10100. Il faut donc l’autoriser là aussi dans le pare-feu UFW pour éviter tout problème dans la suite avec l’utilisation de VsFTPd. Pour autoriser et ouvrir cette plage de port dans UFW faites la commande suivante :
sudo ufw allow 10000:10100/tcp
Vous pouvez vérifier que c’est bien pris en compte avec :
sudo ufw status
Vous pouvez maintenant utiliser FileZilla ou un autre client FTP pour vous connecter à votre serveur en utilisant l’IP de celui-ci dans la configuration actuelle, et le couple nom d’utilisateur et mot de passe que vous avez crée plus haut avec le port 21.
J’ai prévu de faire d’autres tutoriels pour compléter ce que j’ai raconté ici et aller plus loin comme par exemple comment sécuriser les connexions avec SSL/TLS dans VsFTPd. C’est un sujet vaste et il y a beaucoup de choses à dire !