diff --git a/ROADMAP.md b/ROADMAP.md index 6ca9df7..0cada4f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -49,6 +49,6 @@ ├── gitea.md [shirenn] ├── jitsi.md ├── linx.md - ├── vsftpd.md [shirenn] + ├── vsftpd.md [DONE] └── zerobin.md [shirenn] ``` diff --git a/services/vsftpd.md b/services/vsftpd.md new file mode 100644 index 0000000..bcfab01 --- /dev/null +++ b/services/vsftpd.md @@ -0,0 +1,116 @@ +# 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 parefeu +et des nats. 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équen qu'un serveur ftp doivent supporter le mode passif. +``` +# 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. +``` +# 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. +``` +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 : +``` +# 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 : +``` +# 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 +```