documentation/services/vsftpd.md

135 lines
4.9 KiB
Markdown

# 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
```