GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment installer et configurer un serveur FTP (vsftpd) avec SSL/TLS sur Ubuntu 20.04

FTP ou File Transfer Protocol est un très ancien protocole bien connu pour transférer des fichiers entre un client et un serveur. C'est également un protocole non sécurisé, mais uniquement s'il est utilisé sans TLS. Dans ce didacticiel, nous allons configurer vsftpd pour TLS, ce qui nous permet d'utiliser FTP en toute sécurité. FTP a souvent été remplacé par des protocoles plus sécurisés tels que SFTP ou SCP ces jours-ci.

Si toutefois, vous avez besoin d'utiliser FTP avec votre serveur, vsftpd (Very Secure FTP Daemon) est un choix parfait.

Dans ce didacticiel, nous apprendrons comment installer et configurer un serveur FTP à l'aide de vsftpd sur un serveur basé sur Ubuntu 20.04. Nous apprendrons également comment sécuriser la connexion à l'aide du protocole SSL/TLS.

Prérequis

  • Un serveur Ubuntu 20.04 avec un utilisateur non root ayant des privilèges sudo.

Étape 1 - Installer vsftpd

La première étape consiste à installer vsftpd.

$ sudo apt update
$ sudo apt install vsftpd

Ensuite, nous devons sauvegarder le fichier de configuration d'origine afin de pouvoir commencer avec une nouvelle configuration.

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Étape 2 - Configurer le pare-feu

Dans cette étape, nous allons configurer le pare-feu UFW pour autoriser l'accès aux ports FTP.

Tout d'abord, vérifions l'état du pare-feu.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Comme nous pouvons, voir seuls les ports SSH sont autorisés jusqu'à présent. Ouvrons les ports 20 (port de commande FTP), 21 (port de données FTP), 990 lorsque nous utilisons TLS et les ports 35000-40000 pour la gamme de ports passifs dont nous pourrions avoir besoin à l'avenir.

$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
20:21/tcp                  ALLOW       Anywhere
35000:40000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
35000:40000/tcp (v6)       ALLOW       Anywhere (v6)

Étape 3 - Configuration de vsftpd

Nous allons maintenant passer en revue certains paramètres importants pour que vsftpd fonctionne.

Commencez par ouvrir le fichier de configuration.

$ sudo nano /etc/vsftpd.conf

1. Accès FTP

Dans ce didacticiel, nous n'autoriserons l'accès FTP qu'aux utilisateurs locaux et désactiverons tout accès anonyme. Pour ce faire, assurez-vous que les lignes suivantes existent et sont les suivantes.

anonymous_enable=NO
local_enable=YES

2. Activation des téléchargements de fichiers

L'objectif singulier le plus important de FTP ici est de pouvoir écrire sur le serveur. Décommentez la ligne suivante pour activer les téléchargements de fichiers en supprimant # devant.

write_enable=YES

3. Prison chroot

FTP fonctionne mieux lorsqu'un utilisateur est limité à un certain répertoire. vsftpd y parvient en utilisant des prisons chroot. Lorsque le chroot est activé pour les utilisateurs locaux, ils sont limités à leurs répertoires personnels par défaut. Pour ce faire, décommentez la ligne suivante.

chroot_local_user=YES

Pour éviter toute faille de sécurité, le chroot lorsqu'il est activé ne fonctionnera pas tant que le répertoire auquel les utilisateurs sont limités est accessible en écriture.

Pour contourner cette limitation, nous avons deux méthodes pour autoriser les téléchargements de fichiers lorsque le chroot est activé.

  1. Méthode 1 - Cette méthode fonctionne en utilisant un répertoire différent pour les téléchargements FTP. Pour ce tutoriel, nous allons créer un ftp répertoire à l'intérieur de la maison de l'utilisateur pour servir de chroot et un second répertoire accessible en écriture upload pour télécharger les fichiers. Pour ce faire, ajoutez les lignes suivantes en bas du fichier.

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. Méthode 2 - La deuxième méthode consiste simplement à accorder un accès en écriture au répertoire personnel dans son ensemble. Ajoutez la ligne suivante pour y parvenir.

    allow_writeable_chroot=YES
    

4. FTP passif

vsftpd peut utiliser n'importe quel port pour les connexions FTP passives. Nous pouvons spécifier une plage pour le numéro de port minimum et maximum que vsftpd peut utiliser. Ce sont les ports que nous avons configurés dans notre pare-feu UFW auparavant.

Ajoutez les lignes suivantes pour autoriser les connexions FTP passives.

pasv_min_port=35000
pasv_max_port=40000

5. Restreindre les utilisateurs

Pour autoriser uniquement certains utilisateurs à se connecter au serveur FTP, ajoutez les lignes suivantes en bas.

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Avec cette option activée, nous devons spécifier quels utilisateurs doivent être autorisés à utiliser FTP et ajouter leurs noms d'utilisateur dans le /etc/vsftpd.userlist fichier.

Redémarrez vsftpd pour activer la configuration.

$ sudo systemctl restart vsftpd

Étape 4 - Configuration du répertoire utilisateur

Pour les besoins de ce didacticiel, nous allons créer un nouveau compte utilisateur pour les transactions FTP. Si vous avez déjà un compte utilisateur à cet effet, vous pouvez ignorer l'étape 1. Aussi, si vous aviez défini allow_writeable_chroot=YES dans le fichier de configuration précédent, vous pouvez ignorer l'étape 3.

Étape 1 - Ajouter un nouvel utilisateur.

$ sudo adduser testuser

Définissez un mot de passe fort et ignorez toutes les autres invites.

Étape 2 - Ajoutez l'utilisateur à la liste des utilisateurs FTP autorisés.

$ echo "testuser" | sudo tee -a /etc/vsftpd.userlist

Étape 3 - Créer un répertoire FTP et de fichiers

Cette étape est si vous voulez un répertoire différent comme racine FTP et un autre pour télécharger des fichiers afin de contourner la limitation de la prison chroot.

Créez le dossier FTP.

$ sudo mkdir /home/testuser/ftp

Définissez sa propriété.

$ sudo chown nobody:nogroup /home/testuser/ftp

Supprimez les autorisations d'écriture.

$ sudo chmod a-w /home/testuser/ftp

Vérifiez les autorisations avant de continuer.

$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..

Créons maintenant le répertoire inscriptible réel pour les fichiers.

$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload

Testez les autorisations.

$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload

Enfin, ajoutons un test.txt fichier à utiliser pour les tests.

$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt

Étape 5 - Tester l'accès FTP

Notre serveur FTP est entièrement fonctionnel pour le moment. Nous pouvons faire un petit test avant de continuer.

Essayons de nous connecter en tant qu'utilisateur anonyme.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>

Fermez la connexion.

ftp> bye

Cela fonctionne comme prévu, c'est-à-dire que les utilisateurs anonymes ne sont pas autorisés.

Essayons de nous connecter comme n'importe quel autre utilisateur sudo. Il ne devrait pas se connecter aussi.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>

Fermez la connexion.

ftp> bye

Essayons enfin de nous connecter en tant que testuser que nous avons créé pour FTP.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Passons à upload répertoire et utilisez le get commande pour transférer le fichier de test sur notre machine locale.

ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>

Ensuite, téléchargeons le fichier avec un nouveau nom en utilisant le put commande pour tester les autorisations d'écriture.

ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)

Fermez la connexion.

ftp> bye

Étape 6 - Sécurisation des transmissions à l'aide de SSL/TLS

Afin de crypter les transmissions FTP, nous devons disposer d'un certificat SSL et configurer vsftpd pour l'utiliser.

Si vous avez déjà un domaine ou un sous-domaine pointant vers votre serveur FTP, vous pouvez créer un certificat SSL Let's Encrypt gratuit et l'utiliser.

Pour les besoins de notre tutoriel, nous utiliserons un certificat SSL auto-signé. Pour en créer un, utilisez le openssl commande.

La commande suivante créera une clé privée de 2048 bits et un certificat valable 1 an. Le certificat et la clé seront enregistrés dans le même fichier.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Vous pouvez soit ignorer les invites qui suivent, soit remplir les valeurs à votre guise.

Maintenant que notre certificat est créé, il est temps d'ouvrir à nouveau le fichier de configuration vsftpd.

$ sudo nano /etc/vsftpd.conf

Trouvez les lignes suivantes et commentez-les en mettant un dièse devant elles comme suit.

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Maintenant, ajoutez les lignes suivantes.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Modifiez également la valeur de ssl_enable à YES .

ssl_enable=YES

Ajoutons quelques paramètres supplémentaires pour améliorer la sécurité SSL.

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

La plupart de ces paramètres sont explicites. Ceux-ci désactivent SSL pour les utilisateurs anonymes et exigent SSL pour le transfert de données et les connexions. Nous avons également désactivé les protocoles SSL non sécurisés et nous nous en tiendrons à TLSv1.0. Et enfin, nous avons désactivé la réutilisation de SSL et exigeons des suites de chiffrement High Encryption.

Redémarrez le serveur pour que les paramètres prennent effet.

$ sudo systemctl restart vsftpd

Désormais, vous ne pourrez plus utiliser FTP via la ligne de commande. Vous devrez vous connecter à l'aide d'un client prenant en charge TLS.

Étape 7 - Tester TLS avec FileZilla

Pour notre didacticiel, nous allons tester la fonctionnalité TLS à l'aide de Filezilla.

Lorsque vous ouvrez Filezilla, cliquez sur l'icône du gestionnaire de site juste au-dessus du mot Hébergement sur la rangée du haut.

Une nouvelle fenêtre s'ouvrira. Cliquez sur Nouveau site bouton dans le coin inférieur droit.

Vous verrez une nouvelle icône avec le nom Nouveau site . Vous pouvez le renommer en utilisant le bouton Renommer bouton.

Remplissez le champ Hôte avec l'adresse IP de votre serveur. Étant donné que notre port FTP est le 21, qui est le port par défaut pour FTP, vous pouvez donc laisser le port champ vide. Pour l'option Chiffrement, sélectionnez Exiger un FTP explicite sur TLS dans le menu déroulant.

Remplissez votre nom d'utilisateur et votre mot de passe FTP avec ceux que nous avons créés ci-dessus. Cliquez sur Se connecter bouton pour continuer.

Une fois la connexion réussie, vous verrez un certificat de serveur qui ressemble à ce qui suit.

Vous pouvez cocher l'option Toujours faire confiance à ce certificat lors des sessions futures. afin que vous ne soyez pas invité à chaque connexion. Cliquez sur Ok pour continuer.

Vous pouvez maintenant effectuer des opérations FTP normales.

Étape 8 - Désactiver l'accès au shell

Cette étape est entièrement facultative. Par défaut, lors de la création d'un utilisateur FTP, s'il n'est pas explicitement spécifié, l'utilisateur aura un accès SSH au serveur.

Vous devez désactiver l'accès du shell à l'utilisateur FTP pour améliorer la sécurité. Pour le désactiver, nous devons créer un nouveau shell qui imprimera un message indiquant que le compte utilisateur est limité à l'accès FTP uniquement.

Créez le /bin/ftponly shell et rendez-le exécutable.

$ echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
$ sudo chmod a+x /bin/ftponly

Ajoutez le nouveau shell à la liste des shells valides dans le /etc/shells fichier.

$ echo "/bin/ftponly" | sudo tee -a /etc/shells

Remplacez le shell utilisateur par /bin/ftponly .

$ sudo usermod newftpuser -s /bin/ftponly

Vous pouvez utiliser la même commande pour changer le shell de tous les utilisateurs auxquels vous souhaitez donner l'accès FTP.

Conclusion

Ceci conclut notre tutoriel où nous avons installé et configuré vsftpd pour installer un serveur FTP sur un serveur basé sur Ubuntu 20.04. Nous avons également configuré notre connexion FTP pour qu'elle fonctionne avec SSL/TLS.

Si vous avez des questions, posez-les dans les commentaires ci-dessous.


Ubuntu
  1. Comment installer un serveur FTP sur CentOS 7 avec VSFTPD

  2. Comment installer un serveur FTP sur Ubuntu avec vsftpd

  3. Comment installer et configurer un serveur NFS sur Ubuntu 20.04

  4. Comment installer le serveur FTP vsftpd et le sécuriser avec TLS sur Debian 11

  5. Installez Vsftpd avec SSL/TLS sur Ubuntu 20.04

Installez Vsftpd avec SSL/TLS sur Ubuntu 20.04

Comment installer le serveur FTP vsftpd avec TLS sur Debian 10

Comment installer le serveur VsFTPD avec TLS sur Ubuntu 18.04 LTS

Comment installer et configurer Apache avec Let's Encrypt TLS/SSL sur Ubuntu 20.04

Comment installer et configurer le serveur FTP VSFTPD sur Ubuntu

Comment installer et configurer VSFTPD sur Ubuntu 14.04