117 lines
4.9 KiB
Markdown
117 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 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
|
|
```
|