# VSFTPD VSFTPD est une implémentation de serveur ftp connue pour être très sécurisée (comme son nom, very secure FTP daemon, l'indique). Un serveur FTP est un serveur d'échange de fichier un peu daté qui permet à des clients de récuperer des fichiers d'un serveur, et de les y pousser. Aujourd'hui on lui préferait l'utilisation de sftp qui utilise le protocole ssh comme support si le client a besoin d'un accès en écriture au serveur ou simplement du protocole http/https sinon. Cependant certaines technologies ainsi que des sysadmins vieillissant ne savent pas faire autre chose que du ftp. C'est pour ça entre autre qu'on continue de supporter le protocole à certains endroits dans l'infrastructure. ## Principe Comme décrit plus tôt, le protocole FTP est un ancêtre de l'internet (la première RFC qui le mentionne prédate l'utilisation de la stack TCP/IP). En particulier il n'a initialement pas été prévu pour opérer à travers des pare-feu et des NAT. C'est pourquoi aujourd'hui un serveur FTP peut fonctionner de deux manières différentes : ### FTP actif Quand un client initie une connection avec un serveur FTP, il fournit au serveur un numéro de port sur lequel le serveur pourra tenter de se connecter pour procéder à l'échange de données. Cependant au moment où le client redirige le serveur sur un autre port, rien ne permet d'affirmer que celui sera contactable par le serveur (en fait de nos jours, si les deux machines ne sont pas sur le même réseau local, il est quasiment certain que le serveur n'arrivera pas à contacter le client). ### FTP passif Pour remedier à ça, le protocole ftp surporte maintenant un mode passif, où c'est à la charge du serveur de rediriger l'utilisateur sur un port contactable du serveur. ### Connexion au serveur Pour se connecter à un serveur ftp un client peut le faire de manière anonyme si le serveur lui permet. Mais il est possible de restreindre l'accès à une base d'utilisateurs sécurisée par mot de passe. Cependant, le protocole ne prévoit pas que le message soit chiffrée pendant le transfert. ### Support de TLS Le support de TLS a été ajouté au protocole. Il est possible pour le client de demander à l'initialisation de la connexion que celle-ci s'effectue de manière chiffrée. Cela permet en particulier d'éviter de faire transiter des messages en clair sur le réseau. ## Installation On se contente de tirer le logiciels des dépots de logiciels de debian : `sudo apt install vsftpd`. ## Configuration Munissez vous de votre `man 5 vsftpd.conf` préférée et d'un bon remontant parce que mes ailleux c'est pas clair. ### Configuration réseau L'option `listen_ipv6=YES` permet de dire au daemon d'écouter **aussi** en ipv6. Elle ne doit donc pas être utilisée avec l'option `listen=YES` qui ne ne configurera qu'un socket ipv4. Comme expliquer précedemment pour fonctionner de nos jours il est assez fréquent qu'un serveur ftp doivent supporter le mode passif. ```txt # Autorise le client à demander au serveur l'utilisation du mode passif pasv_enable=YES # Configure la range de ports du serveurs vers l'un desquels le serveur pourra # rediriger le client pasv_min_port=45000 pasv_max_port=48000 ``` ### Configuration SSL Il est possible de fournir à vsftpd un certificat et une clé privée pour qu'un client puisse demander l'établissement d'une connexion chiffrée. ```txt # Active le chiffrement ssl_enable=YES # Rensigne l'emplacement des certificats rsa_cert_file= /etc/letsencrypt/live/crans.org/cert.pem rsa_private_key_file= /etc/letsencrypt/live/crans.org/privkey.pem # Autorise les clients anonymes à bénéficier du chiffrement allow_anon_ssl=YES ``` ### Écriture des logs On peut demander à vsftpd de logger les connexions, les téléchargements et les téléversements au serveurs. ```txt xferlog_enable=YES ``` ### Configuration des utilisateurs Ici la configuration des utilisateurs dépend principalement de ce que l'on souhaite faire avec le serveur. Je couvrirais donc les deux cas d'utilisations qu'on a au crans, le cas d'un mirroir de logiciel (donc accesible pour des utilisateurs non privilégiés en lecture seule uniquement) et le cas d'un serveur où une liste d'utilisateur peut venir déposer des fichiers. Pour notre premier cas d'utilisation, la configuration est triviale : ```txt # Autorise les utilisateurs anonymes à se connecter anonymous_enable=YES # Expose le dossier /pool/mirror/pub à ces utilisateurs en lecture seule anon_root=/pool/mirror/root ``` Pour le second, c'est un peu plus déclicat : ```txt # Autorise la connexion aux utilisateurs locaux (compte unix) local_enable=YES # Restreint les utilisateurs qui peuvent se connecter à ceux présent dans # /etc/vsftpd.user_list userlist_enable=YES userlist_deny=NO # Autorise les utilisateurs à écrire sur le serveur write_enable=YES # Restreint l'accès en écriture au home des utilisateurs chroot_local_user=YES ```