Cours – Transfert de fichiers : FTP et SFTP
BTS SIO SISR 1re année – Bloc 2 – S15
I. FTP et SFTP — Deux Protocoles pour le Transfert de Fichiers
I.A. FTP — File Transfer Protocol
FTP (RFC 959) est un protocole de transfert de fichiers entre un client et un serveur. Il utilise deux connexions TCP :
| Connexion | Port | Rôle |
|---|---|---|
| Contrôle | TCP 21 | Envoi des commandes (login, liste, navigation) |
| Données | TCP 20 (actif) ou aléatoire (passif) | Transfert effectif des fichiers |
Légende : Fonctionnement FTP avec ses deux connexions. La connexion de contrôle (port 21) reste ouverte pendant toute la session et transporte les commandes textuelles. Pour chaque transfert de fichier ou listage, une connexion de données séparée est établie (port 20 en mode actif, ou port aléatoire en mode passif).
Sécurité FTP : Le FTP transmet les données en clair, y compris l'identifiant et le mot de passe. Il ne doit jamais être utilisé pour des données sensibles sur un réseau non maîtrisé. En production, on lui préfère systématiquement SFTP ou FTPS.
I.B. SFTP — SSH File Transfer Protocol
SFTP n'est pas FTP sur SSL — c'est un protocole entièrement distinct, conçu pour fonctionner comme sous-système de SSH. Toutes les données transitent dans le tunnel SSH chiffré.
| Critère | FTP | SFTP |
|---|---|---|
| Port | 21 (contrôle) + 20 (données) | 22 (SSH uniquement) |
| Chiffrement | Aucun (texte clair) | Intégral (AES, ChaCha20) |
| Authentification | Login/Mot de passe (clair) | Mot de passe chiffré ou clés SSH |
| Pare-feu | Difficile (2 ports, passif = ports aléatoires) | Simple (1 seul port TCP 22) |
| Intégrité des données | Non garantie | Garantie (MAC SSH) |
| Usage recommandé | Réseau interne maîtrisé uniquement | Tout réseau |
Lien ITIL — Gestion de la Sécurité des Informations : Le choix entre FTP et SFTP est une décision de sécurité. En ITIL 4, la pratique de Gestion de la Sécurité des Informations impose de choisir des protocoles conformes au niveau de sensibilité des données échangées. SFTP est le choix par défaut dès que les fichiers transférés sont liés à l'activité de l'entreprise.
I.C. vsftpd — Le Serveur FTP/SFTP sur Linux
vsftpd (Very Secure FTP Daemon) est le serveur FTP le plus répandu sur les distributions Linux. Malgré son nom, il gère aussi le mode SFTP via SSH.
Fichiers importants :
| Chemin | Rôle |
|---|---|
/etc/vsftpd.conf |
Fichier de configuration principal |
/etc/ftpusers |
Liste des utilisateurs interdits de FTP |
/etc/vsftpd.userlist |
Liste des utilisateurs autorisés (si activé) |
/var/log/vsftpd.log |
Journal d'accès FTP |
/srv/ftp/ |
Répertoire racine FTP anonyme (par convention) |
I.D. Paramètres Clés de vsftpd
# /etc/vsftpd.conf — Paramètres essentiels et leur signification
# ─── FTP anonyme ──────────────────────────────────────────────────────
anonymous_enable=YES # Autoriser les connexions sans authentification
anon_root=/srv/ftp/public # Répertoire racine de l'utilisateur anonyme
no_anon_password=YES # Pas de mot de passe pour l'anonyme
anon_upload_enable=NO # Interdire l'upload anonyme
anon_mkdir_write_enable=NO # Interdire la création de dossiers en anonyme
# ─── FTP authentifié ──────────────────────────────────────────────────
local_enable=YES # Autoriser les utilisateurs locaux Linux
write_enable=YES # Autoriser l'écriture (upload, mkdir...)
local_umask=022 # Masque de permissions pour les fichiers créés
# ─── Chroot (isolation de l'utilisateur) ─────────────────────────────
chroot_local_user=YES # Confiner chaque utilisateur dans son home
allow_writeable_chroot=YES # Permettre l'écriture dans le répertoire confiné
# (ou mieux : créer un sous-répertoire writable)
# ─── Mode passif (recommandé pour les pare-feux) ──────────────────────
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
# ─── Sécurité ─────────────────────────────────────────────────────────
userlist_enable=YES # Activer la liste blanche d'utilisateurs
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO # NO = la liste est une liste BLANCHE (autorisés)
# YES = la liste est une liste NOIRE (interdits)
xferlog_enable=YES # Activer le journal de transfert
log_ftp_protocol=YES # Journaliser le protocole complet
I.E. SFTP avec Restriction Chroot via SSH
Le moyen le plus sécurisé de proposer un accès SFTP est de l'intégrer directement dans OpenSSH avec un chroot jail : l'utilisateur est enfermé dans son répertoire et ne peut pas naviguer dans le reste du système de fichiers.
Configuration dans /etc/ssh/sshd_config :
# ─── À la FIN du fichier sshd_config ──────────────────────────────────
# Groupe dont les membres auront accès SFTP uniquement (pas SSH)
Match Group sftpusers
# Forcer l'utilisation du sous-système SFTP interne
ForceCommand internal-sftp
# Confiner l'utilisateur dans son répertoire (chroot)
ChrootDirectory /srv/sftp/%u
# Interdire le transfert X11 et le port forwarding
X11Forwarding no
AllowTcpForwarding no
Structure des répertoires pour le chroot SFTP :
/srv/sftp/
├── alice/ ← Répertoire racine (chroot) de alice
│ │ DOIT appartenir à root:root, chmod 755
│ └── upload/ ← Répertoire où alice peut écrire
│ Propriétaire : alice:alice, chmod 755
│
├── bob/ ← Répertoire racine (chroot) de bob
│ └── upload/
│
└── commun/ ← Pour un groupe partagé
└── partage/
Contrainte critique du chroot : Le répertoire de chroot (racine de l'utilisateur) doit appartenir à root et ne pas être accessible en écriture à l'utilisateur lui-même. C'est une exigence de sécurité OpenSSH. L'utilisateur écrit dans un sous-répertoire du chroot.
IV. Vocabulaire Clé — FTP/SFTP
| Terme | Définition |
|---|---|
| FTP | File Transfer Protocol — protocole de transfert de fichiers non chiffré (ports 21/20) |
| SFTP | SSH File Transfer Protocol — transfert de fichiers via tunnel SSH chiffré (port 22) |
| FTPS | FTP Secure — FTP avec chiffrement TLS/SSL (ne pas confondre avec SFTP) |
| Mode actif | Le serveur FTP initie la connexion de données vers le client (port 20) |
| Mode passif | Le client initie la connexion de données (port aléatoire côté serveur) |
| vsftpd | Very Secure FTP Daemon — serveur FTP/FTPS open source pour Linux |
| Chroot jail | Mécanisme enfermant un utilisateur dans un répertoire racine virtuel |
| Utilisateur anonyme | Connexion FTP sans authentification (login "anonymous" ou "ftp") |
ForceCommand internal-sftp |
Directive SSH forçant l'utilisateur à utiliser SFTP (interdisant le shell SSH) |
| ChrootDirectory | Directive SSH définissant le répertoire racine pour le chroot SFTP |
sftpusers |
Groupe Linux regroupant les utilisateurs ayant accès SFTP uniquement |