Dans la première partie, nous avons installé un serveur FTP puis l’avons configuré avec une configuration minimale le rendant accessible à tout utilisateur et sans mot de passe au détriment de la sécurité des échanges entre les clients et le serveur mais aussi des ressources hébergés par le serveur FTP. Dans cette seconde partie, nous allons procéder à la sécurisation du serveur FTP en mettant en place un contrôle d’accès basé sur une authentification par nom d’utilisateur et mot de passe.

Contrairement à la première partie nous allons permettre uniquement aux comptes utilisateurs disponibles sur la machine faisant office de serveur FTP de pouvoir se connecter au serveur FTP et d’avoir les droits d’écriture sur les ressources partagés par le serveur FTP.

Pour cela, nous allons remplacer les directives écrites précédemment par les directives suivantes :

Une fois qu’un des utilisateurs disposant d’un compte sur la machine faisant office de serveur FTP va se connecter sur le serveur FTP, nous allons le " chrooter" ( l’emprisonner ) dans son dossier personnel /home/nom_utilisateur pour éviter qu’il ait accès au système de fichier complet du serveur FTP. Pour cela, nous allons créer un dossier dédié à la configuration et y créer le fichier userchroot qui va contenir la liste des utilisateurs qui seront chrootés comme suit :

mkdir /etc/vsftpd

Une fois les utilisateurs crées et listés dans le fichier userchroot, nous allons éditer le fichier de configuration du serveur FTP /etc/vsftpd.conf pour que cela soit pris en compte :

#Desactivation de l'acces en root au serveur
chroot_local_user=NO
#Emprisonnement des utilisateurs dans leur répertoire personnel
chroot_list_enable=YES
#Renseignement du fichier contenant la liste des utilisateurs à emprisonner
chroot_list_file=/etc/vsftpd/userchroot
#Accord des droits d'écriture aux utilisateurs dans leur dossier personnel
allow_writeable_chroot=YES

Une fois la configuration réalisée et le fichier sauvegardé, nous procédons à un redémarrage du service vsftpd.service comme suit :

sudo systemctl restart vsftpd.service

Nous allons ensuite tester le bon fonctionnement de notre serveur selon la configuration qui a été mise en place :

Pour cela, nous allons d’abord créer un fichier vide dans le dossier personnel d’un des utilisateurs de la machine

En essayant de se connecter au serveur avec l’utilisateur anonymous comme dans la première partie, on remarque que cela n’est plus possible.

La connexion avec un des comptes disponibles sur la machine faisant office de serveur FTP elle est possible. Une fois connecté avec l’utilisateur Adminsys, en utilisant la commande ls permettant de lister les fichiers présents dans le dossier courant sur le serveur FTP, nous retrouvons le fichier que nous avons crée dans le dossier personnel /home/Adminsys de l’utilisateur Adminsys. Cela prouve que l’utilisateur Adminsys est bien emprisonné dans son dossier personnel quand il se connecte au serveur FTP.

Les utilisateurs qui sont emprisonnés dans leur dossier personnel n’ont donc pas accès au reste du système de fichier du serveur FTP et donc par conséquent aux ressources partagés sur le serveur FTP. Pour leur permettre d’y avoir accès pour avoir télécharger et envoyer des fichiers sur le serveur FTP, nous allons créer un lien symbolique entre le dossier qui va contenir les contenus partagés sur le serveur FTP et le dossier personnel de l’utilisateur. Ce qui va permettre aux utilisateurs connectés d’accéder aux ressources partagés par le serveur FTP depuis leur dossiers personnels.

Pour cela, nous utiliserons la commande mount –bind; habituellement la commande mount permet de créer la vue d’un périphérique de stockage sous la forme d’une arborescence d’un répertoire. En ajoutant l’option –bind, on réalise un montage de liaison qui va nous permettre d’avoir une réplique des fichiers partagés dans le dossier personnel de l’utilisateur. Toute modification d’un côté se reflète immédiatement de l’autre côté car les deux vues affichent les mêmes données.

Nous créons un dossier PartageFTP dans le dossier personnel de l’utilisateur qui contiendrat les ressources partagés du serveur FTP et mettons en place le lien symbolique comme suit :

sudo mkdir /home/Adminsys/PartageFTP
sudo mount --bind /mnt/Partage/ /home/Adminsys/PartageFTP

Après création du lien symbolique, on remarque que les fichiers partagés du dossier /mnt/Partage sont bien accessibles depuis le dossier personnel de l’utilisateur dans le dossier PartageFTP

Le lien symbolique qui a été crée est fonctionnel jusqu’au redémarrage de la machine, pour le rendre persistant, nous allons permettre la création du lien symbolique à chaque démarrage de la machine, en ajoutant la directive suivante dans le fichier /etc/fstab :

/mnt/Partage/ /home/Adminsys/PartageFTP none bind 0 0

Après redémarrage de la machine et un nouveau test de connexion au serveur FTP, nous remarquons que l’utilisateur Adminsys arrive bien a accéder aux ressources partagés depuis son dossier personnel dans lequel il est emprisonné.

On a la possibilité avec la commande get nom_du_fichier de télécharger des fichiers hébergés par le serveur FTP vers la machine locale

Ou encore avec la commande put nom_du_fichier d’envoyer des fichiers sur le serveur FTP

Une manière idéale de sécuriser les échanges entre un serveur et un client FTP serait de mettre en place un chiffrement des communications grâce au protocole SSL/TLS(FTPS) car, par défaut le protocole FTP fait transiter le couple nom d’utilisateur/mot de passe en clair sur le réseau. Il est aussi possible grâce au protocole SSH de transmettre et de télécharger des fichiers en utilisant le sous-système SFTP.