14.2. FTP
Le protocole de transfert de fichiers (File Transfer Protocol,
FTP
) est l'un des protocoles les plus anciens et des plus couramment utilisés sur Internet de nos jours. Son but est de permettre un transfert fiable entre ordinateurs hôtes sur un réseau sans que l'utilisateur ait besoin de se connecter directement à l'hôte distant ou ne possède de connaissances sur l'utilisation d'un système distant. Il permet aux utilisateurs d'accéder à des fichiers sur des systèmes distants en utilisant un ensemble standard de commandes simples.
Cette section énonce les bases du protocole
FTP
et présente vsftpd
, qui est le serveur FTP
préféré sur Red Hat Enterprise Linux.
14.2.1. Le protocole de transfert de fichiers
FTP utilise une architecture client-serveur pour transférer des fichiers en utilisant le protocole réseau
TCP
. Comme FTP
est une protocole relativement ancien, l'authentification du nom d'utilisateur et du mot de passe n'est pas chiffrée. Pour cela, FTP est considéré comme un protocole non sécurisé et ne doit pas être utilisé sauf si absolument nécessaire. Cepedant, FTP
est si répandu sur Internet qu'il est souvent requis pour partager des fichiers avec le public. Ainsi, les administrateurs doivent avoir connaissanece des caractéristiques uniques de FTP
.
Cette section décrit comment configurer vsftpd pour établir des connexions sécurisées par
TLS
et comment sécuriser un serveur FTP
à l'aide de SELinux. Un bon protocole de substitution de FTP
est sftp, de la suite d'outils OpenSSH. Pour obtenir des informations sur la configuration d'OpenSSH et sur le protocole SSH
en général, veuillez consulter le Chapitre 10, OpenSSH.
Contrairement à la plupart des protocoles utilisés sur internet,
FTP
requiert de multiples ports réseau pour fonctionner correctement. Lorsqu'une application cliente FTP
initie une connexion vers un serveur FTP
, celle-ci ouvre le port 21
sur le serveur — qui est également appelé port des commandes. Ce port est utilisé pour exécuter toutes les commandes sur le serveur. Toutes les données requises du serveur sont retournées vers le client via un port de données. Le numéro de port pour les connexions de données et la manière par laquelle celles-ci sont initialisées dépendent de si le client requiert les données en mode actif ou passif.
Ce qui suit définit les modes :
- mode actif
- Le mode actif est la méthode d'origine utilisée par le protocole
FTP
pour transférer des données vers l'application cliente. Lorsqu'un transfert de données en mode actif est initié par le clientFTP
, le serveur ouvre une connexion sur le port20
du serveur pour l'adresseIP
ainsi qu'un port aléatoire, non privilégié (supérieur à1024
), spécifié par le client. Cet arrangement signifie que la machine cliente doit être autorisée à accepter des connexions sur tout port supérieur à1024
. Avec l'augmentation des réseaux non sécurisés, comme internet, l'utilisation de pare-feux pour protéger les machines clientes s'est répandue. Comme les pare-feux du côté client refusent souvent des connexions entrantes en provenance de serveursFTP
en mode actif, un mode passif a été conçu. - mode passif
- Le mode passif, tout comme le mode actif, est initié par l'application cliente
FTP
. Lorsque des données sont requises du serveur, le clientFTP
indique qu'il souhaite accéder aux données en mode passif et le serveur fournit l'adresseIP
ainsi qu'un port aléatoire, non-privilégié (supérieur à1024
) sur le serveur. Le client se connecte ensuite à ce port sur le serveur pour télécharger les informations requises.Même si le mode passif résout des problèmes d'interférences du pare-feu côté client avec les connexions de données, il peut également compliquer l'administration du pare-feu côté serveur. Vous pouvez réduire le nombre de ports ouverts sur un serveur en limitant la plage de ports non-privilégiés sur le serveurFTP
. Cela simplifie également le processus de configuration des règles du pare-feu pour le serveur.
14.2.2. Serveur vsftpd
Le démon
vsftpd
(Very Secure FTP Daemon) a été conçu dès le début pour être rapide, stable, et surtout sécurisé. vsftpd
est le seul serveur FTP
autonome distribué avec Red Hat Enterprise Linux, grâce à sa capacité de gestion efficace et sécurisée de grands nombres de connexion.
Le modèle de sécurité utilisé par
vsftpd
offre trois aspects principaux :
- Une importante séparation entre les processus privilégiés et non-privilégiés — les processus séparés gèrent différentes tâches, et chacun de ces processus est exécuté avec les privilèges minimaux requis pour la tâche.
- Les tâches qui requièrent des privilèges élevés sont gérées par des processus avec le minimum des privilèges nécessaires — en tirant profit des compatibilités trouvées dans la bibliothèque
libcap
, les tâches qui requièrent normalement la totalité des privilèges root peuvent être exécutées de manière plus sécurisée à partir d'un processus moins privilégié. - La plupart des processus sont exécutés dans une prison
chroot
— lorsque c'est possible, les processus sont « change-rooted » sur le répertoire en cours de partage ; ce répertoire est ensuite considéré comme une prisonchroot
. Par exemple, si le répertoire/var/ftp/
est le répertoire principal partagé,vsftpd
réassigne/var/ftp/
au nouveau répertoire root, nommé/
. Ceci prévient toute activité pirate potentielle d'une personne malveillante sur tous les répertoires qui ne sont pas contenus dans le nouveau répertoire root.
L'utilisation de ces pratiques de sécurité a l'effet suivant sur la manière dont
vsftpd
traite les requêtes :
- Le processus parent est exécuté avec le minimum de privilèges requis — le processus parent calcule dynamiquement le niveau de privilèges requis pour minimiser le niveau de risques. Les processus enfants gèrent les interactions directes avec les clients
FTP
et sont exécutés avec aussi peu de privilèges que possible. - Toutes les opérations nécessitant une élévation de privilèges sont gérées par un petit processus parent — tout comme avec le serveur
HTTP
Apache,vsftpd
lance des processus enfants non privilégiés pour gérer les connexions entrantes. Ceci permet au processsus parent privilégié d'être aussi petit que possible et de gérer un nombre de tâches relativement faible. - Le processus parent se méfie de toutes les requêtes des processus enfants non privilégiés — Les communications avec les processus enfants sont reçues via un socket, et la validité des information en provenance d'un processus enfant est vérifiée avant qu'une action ne soit déclenchée.
- La plupart des interactions avec des clients
FTP
sont gérées par des processus enfants non privilégiés dans une prisonchroot
— comme ces processus enfants ne sont pas privilégiés et ont uniquement accès au répertoire partagé, tout processus ayant échoué n'autorisera une personne malveillante à n'accéder qu'aux fichiers partagés.
14.2.2.1. Démarrage et arrêt de vsftpd
Pour démarrer le service
vsftpd
dans la session actuelle, veuillez saisir ce qui suit dans l'invite de shell en tant qu'utilisateur root
:
~]# systemctl start vsftpd.service
Pour arrêter le service dans la session actuelle, saisissez ce qui suit en tant qu'utilisateur
root
:
~]# systemctl stop vsftpd.service
Pour redémarrer le service
vsftpd
, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# systemctl restart vsftpd.service
Cette commande arrête puis démarre immédiatement le service
vsftpd
, ce qui est la manière la plus efficace de faire en sorte que les changements entrent en vigueur après avoir modifié le fichier de configuration de ce serveur FTP
. De manière alternative, vous pouvez utiliser la commande suivante pour redémarrer le service vsftpd
, uniquement s'il est déjà en cours d'exécution :
~]# systemctl try-restart vsftpd.service
Par défaut, le service
vsftpd
n'est pas lancé automatiquement pendant l'initialisation. Pour configurer le service vsftpd
pour qu'il soit lancé pendant le démarrage, veuillez saisir ce qui suit dans une invite de shell en tant qu'utilisateur root
:
~]# systemctl enable vsftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Pour obtenir des informations supplémentaires sur la gestion des services système sur Red Hat Enterprise Linux 7, veuillez consulter le Chapitre 9, Gérer les services avec systemd.
14.2.2.2. Lancer de multiples copies de vsftpd
De temps à autres, un ordinateur est utilisé pour servir de multiples domaines
FTP
. Cette technique est nommée multihoming (multiréseaux). Une manière d'effectuer un multihome en utilisant vsftpd
consiste à exécuter de multiples copies du démon, chacune avec son propre fichier de configuration.
Pour faire ceci, commencez par assigner toutes les adresses
IP
à des périphériques réseau ou à des alias de périphériques réseau sur le système. Pour obtenir davantage d'informations sur la configuration des périphériques réseau, des alias de périphériques, ainsi que des informations sur les scripts de configuration réseau, veuillez consulter le Guide de mise en réseau Red Hat Enterprise Linux 7.
Esuite, le serveur DNS des domaines
FTP
devra être configuré pour faire référence à la machine qui convient. Pour obtenir des informations sur BIND, le protocole d'implémentation DNS
utilisé sur Red Hat Enterprise Linux, ainsi que sur ses fichiers de configuration, veuillez consulter le Guide de mise en réseau Red Hat Enterprise Linux 7.
Pour que
vsftpd
réponde à des requêtes sur différentes adresses IP
, de multiples copies du démon doivent être en cours d'exécution. Pour faciliter le lancement de multiples instances du démon vsftpd
, une unité spéciale du service systemd (vsftpd@.service
) pour lancer vsftpd
en tant que service instancié est fournie dans le paquet vsftpd.
Afin de pouvoir utiliser cette unité du service, un fichier de configuration
vsftpd
séparé pour chaque instance du serveur FTP
requise devra être créé et placé dans le répertoire /etc/vsftpd/
. Remarquez que chacun de ces fichiers de configuration doit posséder un nom unique (tel que /etc/vsftpd/vsftpd-site-2.conf
) et doit uniquement être accessible en lecture et écriture par l'utilisateur root
.
Dans chaque fichier de configuration pour chaque serveur
FTP
écoutant sur un réseau IPv4
, la directive suivante doit être unique :
listen_address=N.N.N.N
Remplacez N.N.N.N par une adresse
IP
unique pour le site FTP
servi. Si le site utilise IPv6
, veuillez utiliser la directive listen_address6
à la place.
Une fois que de multiples fichiers de configuration sont présents dans le répertoire
/etc/vsftpd/
, des instances individuelles du démon vsftpd
peuvent être lancées par la commande suivante en tant qu'utilisateur root
:
~]# systemctl start vsftpd@configuration-file-name.service
Dans la commande ci-dessus, remplacez configuration-file-name par le nom unique du fichier de configuration du serveur requis, tel que
vsftpd-site-2
. Remarquez que l'extension .conf
du fichier de configuration ne doit pas être incluse dans la commande.
Si vous souhaitez lancer plusieurs instances du démon
vsftpd
à la fois, vous pouvez utiliser un fichier d'unité cible systemd (vsftpd.target
), qui est fourni dans le paquet vsftpd. Cette cible systemd entraîne le lancement d'un démon indépendant vsftpd
pour chaque fichier de configuration vsftpd
qui se trouve dans le répertoire /etc/vsftpd/
. Veuillez exécuter la commande suivante en tant qu'utilisateur root
pour activer la cible :
~]# systemctl enable vsftpd.target
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.target to /usr/lib/systemd/system/vsftpd.target.
La commande ci-dessus configure le gestionnaire de services systemd pour qu'il lance le service
vsftpd
(avec les instances configurées du serveur vsftpd
) pendant l'initialisation. Pour lancer le service immédiatement, sans redémarrer le système, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# systemctl start vsftpd.target
Veuillez consulter la Section 9.3, « Travailler avec des cibles Systemd » pour obtenir des informations supplémentaires sur la manière d'utiliser des cibles systemd pour gérer les services.
Les autres directives pouvant être altérées sur une base « par serveur » incluent :
anon_root
local_root
vsftpd_log_file
xferlog_file
14.2.2.3. Chiffrer des connexions vsftpd en utilisant TLS
Dans le but de contrer la nature non sécurisée inhérente de
FTP
, qui transmet les noms d'utilisateur, mots de passe, et données sans chiffrement par défaut, le démon vsftpd
peut être configuré pour utiliser le protocole TLS
afin d'authentifier les connexions et de chiffrer tous les transferts. Remarquez qu'un client FTP
prenant en charge TLS
est nécessaire pour communiquer avec vsftpd
avec TLS
activé.
Note
SSL
(« Secure Sockets Layer ») est le nom d'une ancienne implémentation du protocole de sécurité. Les nouvelles versions sont appelées TLS
(« Transport Layer Security »). Seules les nouvelles versions (TLS
) doivent être utilisées car SSL
connaît de graves défaillances de sécurité. La documentation incluse avec le serveur vsftpd, ainsi que les directives de configuration utilisées dans le fichier vsftpd.conf
, utilisent le nom SSL
lorsqu'elles font référence à des sujets liés à la sécurité, mais TLS
est pris en charge et est utilisé par défaut lorsque la directive ssl_enable
est paramétrée sur YES
.
Veuillez définir la directive de configuration
ssl_enable
du fichier vsftpd.conf
sur YES
pour activer la prise en charge TLS
. Les paramètres par défaut des autres directives liées à TLS
qui sont automatiquement activés lorsque l'option ssl_enable
est activée elle-même, fournissent une installation TLS
relativement bien configurée. Ceci exige, entre autre, d'utiliser le protocole TLS
v1 pour toutes les connexions (l'utilisation des versions non sécurisées du protocole SSL
est désactivée par défaut) ou de forcer toutes les connexions non anonymes à utiliser TLS
pour envoyer des mots de passe et des transferts de données.
Exemple 14.3. Configurer vsftpd pour utiliser TLS
Dans cet exemple, les directives de configuration désactivent explicitement les versions plus anciennes du protocole de sécurité
SSL
dans le fichier vsftpd.conf
:
ssl_enable=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
Redémarrez le service
vsftpd
après avoir modifié sa configuration :
~]# systemctl restart vsftpd.service
See the vsftpd.conf(5) manual page for other
TLS
-related configuration directives for fine-tuning the use of TLS
by vsftpd
.
14.2.2.4. Politique SELinux pour vsftpd
La politique SELinux gouvernant le démon
vsftpd
(ainsi que d'autres processus ftpd
) définit un contrôle d'accès obligatoire qui est, par défaut, basé sur le moins d'accès requis. Dans le but d'autoriser le démon FTP
à accéder à des fichiers ou répertoires spécifiques, des étiquettes appropriées devront leur être assignés.
Par exemple, pour être en mesure de partager des fichiers de manière anonyme, l'étiquette
public_content_t
doit être assignée aux fichiers et répertoires à partager. Vous pouvez effectuer ceci en utilisant la commande chcon
en tant qu'utilisateur root
:
~]# chcon -R -t public_content_t /path/to/directory
Dans la commande ci-dessus, veuillez remplacer /path/to/directory par le chemin du répertoire sur lequel vous souhaitez assigner l'étiquette. De même, si vous souhaitez paramétrer un répertoire pour téléverser des fichiers, vous devrez assigner l'étiquette
public_content_rw_t
à ce répertoire en particulier. En outre, l'option du booléen SELinux allow_ftpd_anon_write
doit être paramétrée sur 1
. Veuillez utiliser la commande setsebool
en tant qu'utilisateur root
pour cela :
~]# setsebool -P allow_ftpd_anon_write=1
Si vous souhaitez que les utilisateurs locaux puissent accéder à leur répertoire personnel via
FTP
, ce qui est le paramètre par défaut sur Red Hat Enterprise Linux 7, l'option du booléen ftp_home_dir
doit être définie sur 1
. Si vsftpd
est autorisé à être exécuté en mode autonome, ce qui est également le cas par défaut sur Red Hat Enterprise Linux 7, l'option ftpd_is_daemon
devra également être définie sur 1
.
See the ftpd_selinux(8) manual page for more information, including examples of other useful labels and Boolean options, on how to configure the SELinux policy pertaining to
FTP
. Also, see the Red Hat Enterprise Linux 7 SELinux User's and Administrator's Guide for more detailed information about SELinux in general.
14.2.3. Ressources supplémentaires
Pour obtenir davantage d'informations sur
vsftpd
, veuillez consulter les ressources suivantes.
14.2.3.1. Documentation installée
/usr/share/doc/vsftpd-version-number/
directory — Remplacez version-number par la version installée du paquet vsftpd. Ce répertoire contient un fichierREADME
avec des informations de base sur le logiciel. Le fichierTUNING
contient des conseils de réglage de base des performances et le répertoireSECURITY/
contient des informations sur le modèle de sécurité employé parvsftpd
.- Pages de manuel liées à
vsftpd
— il existe des pages de manuel pour le démon et les fichiers de configuration. Ci-dessous figure une liste des pages de manuel les plus importantes.- Applications du serveur
- vsftpd(8) — Describes available command-line options for
vsftpd
.
- Fichiers de configuration
- vsftpd.conf(5) — Contains a detailed list of options available within the configuration file for
vsftpd
. - hosts_access(5) — Describes the format and options available within the
TCP
wrappers configuration files:hosts.allow
andhosts.deny
.
- Interaction avec SELinux
- ftpd_selinux(8) — Contains a description of the SELinux policy governing
ftpd
processes as well as an explanation of the way SELinux labels need to be assigned and Booleans set.
14.2.3.2. Documentation en ligne
- À propos de vsftpd et de FTP en général
- http://vsftpd.beasts.org/ — la page du projet
vsftpd
est un bon emplacement pour trouver la documentation la plus récente et contacter l'auteur du logiciel. - http://slacksite.com/other/ftp.html — Ce site web fournit une explication détaillée des différences entre les modes
FTP
actifs et passifs.
- Documentation Red Hat Enterprise Linux
- Guide de mise en réseau Red Hat Enterprise Linux 7 — Le Guide de mise en réseau de Red Hat Enterprise Linux 7 documente les informations pertinentes à la configuration et à l'administration des interfaces réseau et des services réseau sur ce système. Il fournit une introduction à l'utilitaire
hostnamectl
et explique comment l'utiliser pour afficher et définir des noms d'hôtes sur la ligne de commande localement et à distance. - Guide de l'utilisateur et de l'administrateur SELinux Red Hat Enterprise Linux 7 — le Guide de l'utilisateur et de l'administrateur SELinux Red Hat Enterprise Linux 7 décrit les principes de base de SELinux et documente en détails comment configurer et utiliser SELinux avec divers services, tels que Apache HTTP Server, Postfix, PostgreSQL, ou OpenShift. Celui-ci explique comment configurer les permissions d'accès SELinux pour les services système gérés par
systemd
. - Guide de sécurité Red Hat Enterprise Linux 7 — le Guide de sécurité Red Hat Enterprise Linux 7 assiste les utilisateurs et administrateurs dans leur apprentissage des processus et pratiques de sécurisation de leurs stations de travail et serveurs contre des intrusions locales et distantes, les exploitations, et autres activités malicieuses. Celui-ci explique également comment sécuriser des services de système critiques.
- Documents RFC pertinents
- RFC 0959 — Demande de commentaires (RFC de l'anglais Request For Comments) d'origine du protocole
FTP
formulée par IETF. - RFC 1123 — la petite section concernant
FTP
étend et clarifie la demande RFC 0959. - RFC 2228 — extensions de sécurité
FTP
. vsftpd implémente le mini sous-ensemble qu'il faut pour prendre en charge les connexions TLS et SSL. - RFC 2428 — prise en charge
IPv6
.