Serveur FTP

File Transfer Protocol (FTP) is a TCP protocol for downloading files between computers. In the past, it has also been used for uploading but, as that method does not use encryption, user credentials as well as data transferred in the clear and are easily intercepted. So if you are here looking for a way to upload and download files securely, see the section on OpenSSH in Administration à distance instead.

FTP works on a client/server model. The server component is called an FTP daemon. It continuously listens for FTP requests from remote clients. When a request is received, it manages the login and sets up the connection. For the duration of the session it executes any of commands sent by the FTP client.

L'accès à un serveur FTP peut être pris en charge de deux façons :

  • Anonyme

  • Authentifié

In the Anonymous mode, remote clients can access the FTP server by using the default user account called "anonymous" or "ftp" and sending an email address as the password. In the Authenticated mode a user must have an account and a password. This latter choice is very insecure and should not be used except in special circumstances. If you are looking to transfer files securely see SFTP in the section on OpenSSH-Server. User access to the FTP server directories and files is dependent on the permissions defined for the account used at login. As a general rule, the FTP daemon will hide the root directory of the FTP server and change it to the FTP Home directory. This hides the rest of the file system from remote sessions.

vsftpd - Installation du serveur FTP

vsftpd est un démon FTP disponible dans Ubuntu. Il est facile à installer, à configurer et à entretenir. Pour installer vsftpd vous pouvez exécuter la commande suivante :

sudo apt-get install vsftpd

Configuration d'un FTP anonyme

Par défaut, vsftpd n'est pas configuré pour permettre le téléchargement anonyme. Si vous souhaitez activer le téléchargement anonyme, modifiez le fichier de configuration /etc/vsftpd.conf en changeant :

anonymous_enable=Yes

Lors de l'installation, un utilisateur ftp est créé avec un répertoire personnel nommé /srv/ftp. Il s'agit du répertoire FTP par défaut.

Si vous souhaitez modifier cet emplacement en /srv/files/ftp par exemple, il suffit de créer un répertoire dans un autre emplacement et de changer le répertoire personnel de l'utilisateur /srv/files/ftp :

sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp ftp 

Les changements effectués, redémarrez vsftpd :

sudo restart vsftpd

Enfin, copiez les fichiers et répertoires que vous voulez rendre disponibles via le serveur FTP anonyme dans /srv/files/ftp, ou alors /srv/ftp si vous souhaitez utiliser le dossier par défaut .

Configuration d'un serveur FTP avec authentification des utilisateurs

Par défaut, vsftpd est configuré pour authentifier les utilisateurs système et leur permettre de télécharger des fichiers. Si vous voulez que les utilisateurs puissent envoyer des fichiers sur le serveur, modifiez /etc/vsftpd.conf :

write_enable=YES

Redémarrez maintenant vsftpd :

sudo restart vsftpd

Maintenant lorsque des utilisateurs de votre système se connectent au FTP, leur répertoire racine sera leur répertoire personnel (/home/utilisateur) dans lequel ils pourront télécharger (download/upload), créer des répertoires etc…

De même, par défaut, les utilisateurs anonymes ne sont pas autorisés à envoyer des fichiers vers le serveur FTP. Pour modifier ce paramètre, vous pouvez supprimer le commentaire de la ligne suivante puis redémarrer vsftpd :

anon_upload_enable=YES

Autoriser des téléchargements (upload) anonymes d'Internet vers le serveur est une faille de sécurité majeure. Il est préférable de ne pas l'autoriser pour des serveurs branchés directement sur Internet.

Le fichier de configuration est composé de plusieurs paramètres de configuration. Les informations à propos de chaque paramètre sont disponibles dans le fichier de configuration. Vous pouvez aussi vous référer à la page du manuel (man page), man 5 vsftpd.conf pour les détails de chaque paramètre.

Sécuriser le serveur FTP

Des options de /etc/vsftpd.conf permettent de sécuriser un tant soit peu vsftpd. Par exemple, les utilisateurs peuvent être confinés dans leur répertoire personnel en dé-commentant :

chroot_local_user=YES

Vous pouvez aussi définir les utilisateurs qui seront confinés dans leur répertoire personnel (home) :

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Après avoir dé-commenté l'option ci-dessus, créez le fichier /etc/vsftpd.chroot_list contenant la liste des utilisateurs à restreindre. Mettez un utilisateur par ligne. Redémarrez ensuite vsftpd :

sudo restart vsftpd

De manière similaire, le fichier /etc/ftpusers contient les utilisateurs qui ne sont pas autorisés à se connecter au serveur FTP. la liste par défaut inclut root, daemon, nobody, etc. Écrivez dans cette liste les utilisateurs que vous ne souhaitez pas voir connectés au FTP.

FTP can also be encrypted using FTPS. Different from SFTP, FTPS is FTP over Secure Socket Layer (SSL). SFTP is a FTP like session over an encrypted SSH connection. A major difference is that users of SFTP need to have a shell account on the system, instead of a nologin shell. Providing all users with a shell may not be ideal for some environments, such as a shared web host. However, it is possible to restrict such accounts to only SFTP and disable shell interaction. See the section on OpenSSH-Server for more.

Pour configurer FTPS, modifiez /etc/vsftpd.conf et ajoutez en fin de fichier :

ssl_enable=Yes

Prenez garde aux options certificat et clef :

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

Par défaut, ces options sont définies dans le certificat et la clé fournie par le paquet ssl-cert. Dans un environnement de production, ceux-ci doivent être remplacés par un certificat et une clé générés pour l'hôte spécifique. Pour plus d'informations sur les certificats, voir Certificats.

Redémarrez maintenant vsftpd, et les utilisateurs non-anonymes seront désormais forcés d'utiliser FTPS :

sudo restart vsftpd

Pour permettre aux utilisateurs avec un shell /usr/sbin/nologin de se connecter au FTP, mais sans accès shell, il est nécessaire d'ajouter le shell nologin au fichier /etc/shells :

# /etc/shells: shells de connexion valides
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/sbin/nologin

En effet, par défaut, vsftpd utilise PAM pour l'identification et le fichier de configuration /etc/pam.d/vsftpd stipule :

auth    required        pam_shells.so

Le module PAM shells a pour effet de n'autoriser que les shells listés dans le fichier /etc/shells.

Les clients FTP les plus populaires peuvent être configurés pour se connecter en utilisant FTPS. Le client FTP en ligne de commande lftp a aussi la possibilité d'utiliser FTPS.

Références