Accueil

FTPS : Sécuriser les transferts FTP avec SSL/TLS

Security
Difficulte: Intermediate
5 min de lecture

Tutoriel détaillé pour installer et configurer FTPS (FTP sur SSL/TLS) avec vsftpd sur Linux pour des transferts de fichiers sécurisés.

Retour aux tutoriels

L'essentiel

  • FTPS n'est pas SFTP : FTPS ajoute une couche SSL/TLS au protocole FTP historique (deux canaux, ports 20/21 + plage passive), alors que SFTP est un protocole distinct transporté par SSH sur le seul port 22.
  • Le chiffrement ne devient obligatoire que si vous forcez les trois directives ssl_enable=YES, force_local_data_ssl=YES et force_local_logins_ssl=YES dans /etc/vsftpd.conf, en gardant ssl_tlsv1_2=YES avec ssl_sslv3=NO et ssl_sslv2=NO.
  • Le mode passif est indispensable derrière un pare-feu ou un NAT : bornez-le avec pasv_min_port=30000 et pasv_max_port=31000, puis ouvrez cette plage en plus des ports 20 et 21 (UFW ou firewalld).
  • chroot_local_user=YES enferme chaque utilisateur dans son /home, mais les versions récentes de vsftpd refusent un répertoire chroot inscriptible : il faut lui adjoindre allow_writeable_chroot=YES.
  • Le certificat généré par openssl req -x509 -nodes -days 365 -newkey rsa:2048 est auto-signé et n'est valable qu'un an : le client affichera un avertissement de sécurité normal, et en production il faut passer par une autorité de certification comme Let's Encrypt.
FTPS vs SFTP : Quelle est la différence ?
Ne confondez pas FTPS (FTP Secure) et SFTP (SSH File Transfer Protocol). - FTPS est le protocole FTP classique auquel on ajoute une couche de chiffrement SSL/TLS. - SFTP est un protocole de transfert de fichiers entièrement différent, qui fonctionne sur la base de SSH. Ce tutoriel traite de FTPS.

Pourquoi utiliser FTPS ?

  • Chiffrement : Protège les identifiants de connexion et les données transférées contre l'écoute sur le réseau.
  • Conformité : Requis par de nombreuses normes de sécurité (PCI-DSS, etc.) pour le transfert de données sensibles.
  • Authentification : Utilise des certificats SSL/TLS pour vérifier l'identité du serveur.

Prérequis

  • Un serveur Linux (Ubuntu/Debian, CentOS/RHEL).
  • Accès root ou privilèges sudo.
  • Un pare-feu configuré sur le serveur.

Installation de vsftpd

Nous utiliserons vsftpd (Very Secure FTP Daemon), un serveur FTP populaire et sécurisé.

# Sur Debian / Ubuntu
sudo apt-get update
sudo apt-get install -y vsftpd

# Sur CentOS / RHEL
sudo yum install -y vsftpd

Configuration de FTPS

Étape 1 : Créer un certificat SSL/TLS

Pour le chiffrement, nous avons besoin d'un certificat. Pour un environnement de production, utilisez un certificat d'une autorité de certification (comme Let's Encrypt). Pour ce guide, nous créons un certificat auto-signé valable un an.

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

Remplissez les informations demandées. Pour le "Common Name", vous pouvez utiliser le nom de domaine de votre serveur ou son adresse IP.

Étape 2 : Configurer vsftpd.conf

Sauvegardez le fichier de configuration original et modifiez-le.

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

Assurez-vous que votre configuration ressemble à ceci, en adaptant si nécessaire :

# Désactiver les connexions anonymes
anonymous_enable=NO
# Autoriser les utilisateurs locaux à se connecter
local_enable=YES
# Permettre les commandes d'écriture (upload, delete, etc.)
write_enable=YES
# Enfermer les utilisateurs dans leur répertoire personnel (chroot)
chroot_local_user=YES
# Permettre l'écriture dans le répertoire chroot (nécessaire avec les versions récentes)
allow_writeable_chroot=YES

# --- Configuration FTPS ---
# Activer SSL
ssl_enable=YES

# Forcer les clients à utiliser SSL pour le transfert de données et la connexion
force_local_data_ssl=YES
force_local_logins_ssl=YES

# Utiliser des versions TLS sécurisées
ssl_tlsv1_2=YES
ssl_sslv3=NO
ssl_sslv2=NO

# Chemin vers notre certificat et notre clé (le même fichier pour notre certificat auto-signé)
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

# --- Configuration du mode passif ---
# Le mode passif est nécessaire pour passer les pare-feux et NAT
pasv_enable=YES
# Spécifier une plage de ports pour les connexions passives
pasv_min_port=30000
pasv_max_port=31000

Étape 3 : Configurer le pare-feu

Vous devez ouvrir les ports pour le contrôle FTP et pour la plage de ports passifs que vous avez définie.

# Pour UFW (Ubuntu/Debian)
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw status

# Pour firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --reload

Étape 4 : Redémarrer le service

sudo systemctl restart vsftpd
Serveur FTPS prêt !
Votre serveur est maintenant configuré pour accepter des connexions FTPS sécurisées.

Créer un utilisateur FTP

Créez un utilisateur système standard. Il sera automatiquement un utilisateur FTP.

sudo adduser mon_utilisateur_ftp
# Suivez les instructions pour définir un mot de passe

Cet utilisateur sera confiné à son répertoire /home/mon_utilisateur_ftp lors de la connexion.

Test de la connexion

Utilisez un client FTP moderne comme FileZilla ou WinSCP.

  • Protocole : FTP
  • Hôte : l'adresse IP de votre serveur
  • Chiffrement : Exiger FTP explicite sur TLS (ou "FTPES")
  • Identifiant / Mot de passe : Ceux de l'utilisateur que vous venez de créer.

Comme vous utilisez un certificat auto-signé, le client affichera un avertissement de sécurité. C'est normal. Acceptez le certificat pour continuer.

Dépannage
Si la connexion échoue, les problèmes les plus courants sont : 1. Le pare-feu bloque les ports (notamment la plage passive). 2. Problème de permissions sur les fichiers de certificat. 3. Erreur de syntaxe dans `vsftpd.conf`. Vérifiez les logs de `vsftpd` (souvent dans /var/log/vsftpd.log) et les logs d'authentification (/var/log/auth.log ou /var/log/secure).

Conclusion

La mise en place d'un serveur FTPS avec `vsftpd` est une étape cruciale pour sécuriser les transferts de fichiers. En forçant le chiffrement SSL/TLS, vous vous assurez que les données et les identifiants de vos utilisateurs sont protégés. La configuration est relativement simple et augmente considérablement le niveau de sécurité par rapport à un serveur FTP standard.

MR

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Questions fréquentes

Pourquoi faut-il ouvrir une plage de ports 30000-31000 en plus des ports 20 et 21 ?
FTP sépare le canal de contrôle (port 21) du canal de données. En mode passif, c'est le serveur qui annonce au client un port de données pris dans une plage aléatoire, et le pare-feu ne peut pas le deviner puisque la négociation est chiffrée par TLS. On restreint donc cette plage avec pasv_min_port et pasv_max_port, puis on l'ouvre explicitement : sudo ufw allow 30000:31000/tcp ou sudo firewall-cmd --permanent --add-port=30000-31000/tcp.
vsftpd refuse la connexion avec une erreur de type « refusing to run with writable root inside chroot() », que faire ?
C'est la conséquence directe de chroot_local_user=YES sans son complément. Les versions récentes de vsftpd interdisent par sécurité un répertoire chroot dans lequel l'utilisateur peut écrire. Ajoutez allow_writeable_chroot=YES dans /etc/vsftpd.conf puis relancez avec sudo systemctl restart vsftpd. Sans cette ligne, l'utilisateur ne pourra jamais déposer de fichier dans son propre répertoire personnel.
FTPS ou SFTP : lequel choisir pour un nouveau serveur ?
SFTP est plus simple à exploiter : un seul port (22), pas de plage passive à ouvrir, authentification par clé et réutilisation de l'infrastructure SSH existante. FTPS garde son intérêt quand une contrainte de conformité impose FTP chiffré, ou quand les clients ou partenaires en place ne savent parler que FTP. Si rien ne vous oblige à rester sur FTP, SFTP demande beaucoup moins de travail sur le pare-feu.
Comment configurer FileZilla ou WinSCP pour se connecter à ce serveur ?
Choisissez le protocole FTP (et non SFTP), renseignez l'adresse IP du serveur, puis sélectionnez le chiffrement « Exiger FTP explicite sur TLS », parfois noté FTPES. Utilisez les identifiants du compte système créé avec adduser. Avec un certificat auto-signé, le client affiche un avertissement de sécurité au premier appel : c'est attendu, acceptez le certificat pour continuer.
La connexion échoue sans message clair, par où commencer le diagnostic ?
Trois causes couvrent la quasi-totalité des cas : le pare-feu qui bloque les ports (surtout la plage passive), un problème de permissions sur les fichiers de certificat /etc/ssl/certs/vsftpd.pem et /etc/ssl/private/vsftpd.pem, et une erreur de syntaxe dans vsftpd.conf. Croisez les logs du service dans /var/log/vsftpd.log avec les logs d'authentification dans /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (CentOS/RHEL) : un rejet d'identifiants et un blocage réseau n'y laissent pas la même trace.

Partager ce tutoriel

Cet article vous a plu ?

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Commentaires

Recommandé pour vous

Article de fond sur le sujet

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.