FTP (File Transfer Protocol) est un protocole réseau client-serveur standard qui permet aux utilisateurs de transférer des fichiers vers et depuis un réseau distant.
Il existe plusieurs serveurs FTP open source disponibles pour Linux. Les plus populaires et les plus utilisés sont PureFTPd, ProFTPD et vsftpd.
Dans ce tutoriel, nous allons installer vsftpd (Very Secure Ftp Daemon) sur CentOS 7. Il s'agit d'un serveur FTP stable, sécurisé et rapide. Nous vous montrerons également comment configurer vsftpd pour limiter les utilisateurs à leur répertoire personnel et crypter l'intégralité de la transmission avec SSL/TLS.
Pour des transferts de données plus sécurisés et plus rapides, utilisez SCPou SFTP.
Prérequis #
Avant de poursuivre ce didacticiel, assurez-vous que vous êtes connecté en tant qu'utilisateur disposant des privilèges sudo.
Installation de vsftpd sur CentOS 7 #
Le package vsftpd est disponible dans les référentiels CentOS par défaut. Pour l'installer, lancez la commande suivante :
sudo yum install vsftpd
Une fois le package installé, démarrez le démon vsftpd et activez-le pour qu'il démarre automatiquement au démarrage :
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Vous pouvez vérifier que le service vsftpd est en cours d'exécution en imprimant son état :
sudo systemctl status vsftpd
La sortie ressemblera à quelque chose comme ci-dessous, montrant que le service vsftpd est actif et en cours d'exécution :
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
Main PID: 29612 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Configuration de vsftpd #
La configuration du service vsftpd implique la modification du /etc/vsftpd/vsftpd.conf
fichier de configuration. La plupart des paramètres sont bien documentés dans le fichier de configuration. Pour toutes les options disponibles, visitez la page officielle vsftpd.
Dans les sections suivantes, nous passerons en revue certains paramètres importants requis pour configurer une installation vsftpd sécurisée.
Commencez par ouvrir le fichier de configuration vsftpd :
sudo nano /etc/vsftpd/vsftpd.conf
1. N° d'accès FTP
Nous n'autoriserons l'accès au serveur FTP qu'aux utilisateurs locaux, trouvez le anonymous_enable
et local_enable
directives et vérifiez que votre configuration correspond aux lignes ci-dessous :
anonymous_enable=NO
local_enable=YES
2. Activation des téléchargements #
Décommentez le write_enable
paramètre pour autoriser les modifications du système de fichiers telles que le téléchargement et la suppression de fichiers.
write_enable=YES
3. Chroot Prison #
Empêchez les utilisateurs FTP d'accéder à tous les fichiers en dehors de leurs répertoires personnels en décommentant le chroot
directives.
chroot_local_user=YES
Par défaut, lorsque le chroot est activé, vsftpd refusera de télécharger des fichiers si le répertoire dans lequel les utilisateurs sont verrouillés est accessible en écriture. Ceci afin d'éviter une faille de sécurité.
Utilisez l'une des méthodes ci-dessous pour autoriser les téléchargements lorsque le chroot est activé.
-
Méthode 1. - La méthode recommandée pour autoriser le téléchargement est de garder le chroot activé et de configurer les répertoires FTP. Dans ce tutoriel, nous allons créer un
/etc/vsftpd/vsftpd.confftp
répertoire à l'intérieur de l'accueil de l'utilisateur qui servira de chroot et deuploads
accessible en écriture répertoire pour télécharger des fichiers.user_sub_token=$USER local_root=/home/$USER/ftp
-
Méthode 2. - Une autre option consiste à ajouter la directive suivante dans le fichier de configuration vsftpd. Utilisez cette option si vous devez accorder à votre utilisateur un accès en écriture à son répertoire personnel.
/etc/vsftpd/vsftpd.confallow_writeable_chroot=YES
4. Connexions FTP passives #
vsftpd peut utiliser n'importe quel port pour les connexions FTP passives. Nous spécifierons la plage minimale et maximale de ports et ouvrirons ultérieurement la plage dans notre pare-feu.
Ajoutez les lignes suivantes au fichier de configuration :
/etc/vsftpd/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
5. Limitation du numéro de connexion de l'utilisateur
Pour autoriser uniquement certains utilisateurs à se connecter au serveur FTP, ajoutez les lignes suivantes après le userlist_enable=YES
ligne :
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
Lorsque cette option est activée, vous devez spécifier explicitement quels utilisateurs peuvent se connecter en ajoutant les noms d'utilisateur à /etc/vsftpd/user_list
fichier (un utilisateur par ligne).
6. Sécurisation des transmissions avec SSL/TLS #
Afin de chiffrer les transmissions FTP avec SSL/TLS, vous devez disposer d'un certificat SSL et configurer le serveur FTP pour l'utiliser.
Vous pouvez utiliser un certificat SSL existant signé par une autorité de certification de confiance ou créer un certificat auto-signé.
Si vous avez un domaine ou un sous-domaine pointant vers l'adresse IP du serveur FTP, vous pouvez facilement générer un certificat Let's EncryptSSL gratuit.
Dans ce tutoriel, nous allons générer un certificat SSL auto-signé en utilisant le openssl
commande.
La commande suivante créera une clé privée de 2048 bits et un certificat auto-signé valable 10 ans. La clé privée et le certificat seront enregistrés dans un même fichier :
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
Une fois le certificat SSL créé, ouvrez le fichier de configuration vsftpd :
sudo nano /etc/vsftpd/vsftpd.conf
Trouvez le rsa_cert_file
et rsa_private_key_file
directives, remplacez leurs valeurs par pam
chemin du fichier et définissez le ssl_enable
directive à YES
:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
Sauf indication contraire, le serveur FTP utilisera uniquement TLS pour établir des connexions sécurisées.
Redémarrer le service vsftpd #
Une fois que vous avez terminé l'édition, le fichier de configuration vsftpd (à l'exclusion des commentaires) devrait ressembler à ceci :
/etc/vsftpd/vsftpd.confanonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
Enregistrez le fichier et redémarrez le service vsftpd pour que les modifications prennent effet :
sudo systemctl restart vsftpd
Ouverture du pare-feu #
Si vous utilisez un pare-feu, vous devrez autoriser le trafic FTP.
Pour ouvrir le port 21
(port de commande FTP), port 20
(port de données FTP) et 30000-31000
(Plage des ports passifs), lancez les commandes suivantes :
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
Rechargez les règles de pare-feu en tapant :
firewall-cmd --reload
Création d'un utilisateur FTP #
Pour tester notre serveur FTP, nous allons créer un nouvel utilisateur.
- Si vous avez déjà un utilisateur auquel vous souhaitez accorder un accès FTP, ignorez la 1ère étape.
- Si vous définissez
allow_writeable_chroot=YES
dans votre fichier de configuration ignorez la 3ème étape.
-
Créez un nouvel utilisateur nommé
newftpuser
:sudo adduser newftpuser
Ensuite, vous devrez définir le mot de passe utilisateur :
sudo passwd newftpuser
-
Ajoutez l'utilisateur à la liste des utilisateurs FTP autorisés :
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
-
Créez l'arborescence du répertoire FTP et définissez les autorisations appropriées :
sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
Comme indiqué dans la section précédente, l'utilisateur pourra télécharger ses fichiers sur le
ftp/upload
répertoire.
À ce stade, votre serveur FTP est entièrement fonctionnel et vous devriez pouvoir vous connecter à votre serveur avec n'importe quel client FTP pouvant être configuré pour utiliser le cryptage TLS tel que FileZilla.
Désactivation de l'accès au shell #
Par défaut, lors de la création d'un utilisateur, s'il n'est pas explicitement spécifié, l'utilisateur aura un accès SSH au serveur.
Pour désactiver l'accès au shell, nous allons créer un nouveau shell qui imprimera simplement un message indiquant à l'utilisateur que son compte est limité à l'accès FTP uniquement.
Exécutez les commandes suivantes pour créer 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
Utilisez la même commande pour modifier le shell des autres utilisateurs auxquels vous souhaitez accorder uniquement un accès FTP.