Sélectionner une page

Installer et configurer vsFTPd

vsFTPd (pour Very Secure FTP Daemon) s’annonce lui-même comme étant « probablement le plus sur et le plus rapide des serveurs FTP pour systèmes Unix« .

1 – Installer vsFTPd

La version 2.3.5 est disponible sur les dépôts Ubuntu, l’installation est donc la plus aisée :
# apt-get install vsftpd


2 – Configurer vsFTPd

La configuration de VsFTPd est centralisée dans un seul et même fichier /etc/vsftpd.conf. Choisissez votre éditeur de texte favori (en mode super utilisateur) et appliquez les modifications suivantes en fonction du mode de fonctionnement de VsFTPd.

2.1 – Configuration de base

  • Vous pouvez personnaliser le texte de connexion au serveur

ftpd_banner=Bienvenue sur le serveur ftp de LUCAS

  • Pour permettre des utilisateurs anonymes de se connecter au serveur en lecture seule.

anonymous_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=YES
local_root=<Path_du_répertoire_anonyme>

  • Pour permettre à vos utilisateurs locaux (ceux qui ont un compte sur la machine) de se connecter au serveur et d’écrire.

local_enable=YES
write_enable=YES
local_umask=022

  • Vous pouvez « emprisonner » certains utilisateurs dans leur dossier personnel afin qu’il ne puissent pas naviguer dans le système de fichier.

Il faut créer un répertoire dédié à la configuration de vsftpd et y mettre le fichier liste.
sudo mkdir /etc/vsftpd
gksu gedit /etc/vsftpd/chroot.list

Les identifiants des utilisateurs concernés doivent être renseignés dans /etc/vsftpd/chroot.list sous la forme d’une simple liste:
utilisateur_1
utilisateur_2
...

Il faut ensuite modifier la configuration générale (/etc/vsftpd.conf) et ajouter ces lignes:
chroot_local_user=YES
chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot.list

2.2 – Configuration avancée

Si vous voulez changer le port pour transmettre les commandes qui est par défaut (21) :
listen_port=222

  • Pour avoir un monitoring basique (voir les utilisateurs connectés) :

setproctitle_enable=YES
Ensuite, pour voir la liste des utilisateurs il suffit de taper la commande suivante dans un terminal :
ps -aef | grep vsftpd
ou pour suivre les connexions en continu :
watch -n 1 'ps ax | grep vsftpd | grep -v grep'
Attention, tous les utilisateurs du système ayant accès à la commande « ps » pourront également visualiser la liste des utilisateurs connectés.

* Monitoring d’après le fichier de log

Aucun changement à effectuer dans vsftp.conf. Pas de problème de sécurité car la commande est accessible en mode super-utilisateur seulement. Tapez dans un terminal :
sudo tail -f /var/log/vsftpd.log
Après chaque changement sur la configuration, pensez à relancer le serveur pour les prendre en compte :
sudo service vsftpd reload
Plus d’infos sur la configuration de vsftpd: Documentation vsFTPd

2.3 – Partage de dossier et chroot

Les utilisateurs étant chrootés dans leur home (ce n’est pas obligatoire mais conseillé) il faut trouver un moyen de leur permettre de naviguer dans un dossier a l’extérieur de leur home.
ln pour faire un lien symbolique ne fonctionne pas : problème de droit.
La commande à utiliser est mount avec l’option –bind
mkdir ~/PointDeMontage
sudo mount --bind <path_complet_du_dossier_à_relier> /home/<utilisateur>/PointDeMontage

Si vous souhaitez monter ce dossier automatiquement au démarrage de l’ordinateur il faut éditer le fichier fstab :
nano /etc/fstab
et y ajouter cette ligne :
<path_complet_du_dossier_à_relier> /home/<utilisateur>/PointDeMontage none bind 0 0


3 – vsftps et SSL

Le principal défaut du protocole FTP est que le couple nom d’utilisateur / mot de passe transite en clair sur le réseau. Il est cependant possible d’ajouter une couche de sécurité supplémentaire, à savoir SSL, pour chiffrer les échanges d’authentification et/ou de données.

Le fichier /usr/share/doc/vsftpd/README.ssl fourni avec vsftpd contient certaines mises en garde de sécurité.

Création du certificat

sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/private/vsftpd.cert.pem -keyout /etc/ssl/private/vsftpd.key.pem
Openssl va vous poser quelques questions, la plus critique est celle ci :
Common Name (eg, YOUR name) []:
Il faut écrire le nom ou l’ip que les clients utiliseront. Il est possible de faire un certificat signé par sa propre autorité de certification et donc générer des certificats valides, une fois que vos clients ont reconnu votre autorité de certification : Creating and Using a self signed SSL Certificates in debian

Un certificat (vsftpd.cert.pem) ainsi qu’une clé privée (vsftpd.key.pem) ont été générés dans le dossier /etc/ssl/private/. Sécurisons-les :
sudo chown root:root /etc/ssl/private/vsftpd.cert.*
sudo chmod 600 /etc/ssl/private/vsftpd.cert.*
Vsftp s’exécute avec les droits de l’utilisateur nobody mais il se lance en tant que root et donc lit le certificat en tant que root.

Configuration de vsftpd.conf / Partie SSL

À la fin de votre fichier /etc/vsftpd.conf
# Options for SSL
# encrypted connections.

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
# require_ssl_reuse=NO # Certains clients FTP nécessitent cette ligne

ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

rsa_cert_file=/etc/ssl/private/vsftpd.cert.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key.pem

force_local_data_ssl=NO ←- vous pouvez mettre à « YES » si vous utilisez Kasablanca. A priori, un :
sudo service vsftpd reload
devrait bien se passer.

Configuration du serveur pour un accès à partir d’Internet

Si vous voulez accéder à votre serveur FTP depuis internet, ou si celui-ci se trouve derrière un firewall ou un routeur, il est nécessaire de rajouter les lignes suivantes dans votre fichier /etc/vsftpd.conf. Ces lignes font passer votre serveur ftp en mode passif.
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=40000
pasv_max_port=40100
pasv_address=XX.XX.XX.XX ou domaine.com avec pasv_addr_resolve=YES
port_promiscuous=NO

pasv_enable Utilisez cette option pour activer le mode passif.

pasv_promiscuous Si vous voulez désactiver le contrôle de sécurité PASV qui assure que la connexion de données provienne de la même adresse IP que le contrôle de connexion. Utilisez si vous savez ce que vous faites! Le seul usage légitime à cela est dans un environnement de tunnels sécurisés, ou peut-être pour faciliter l’utilisation de FXP. Défaut: NO

pasv_address Utilisez cette option pour écraser l’adresse IP à laquelle vsftpd répondra à la commande PASV. Fournissez une adresse IP numérique.

[On peut toutefois lui donner un nom de domaine en lui ajoutant l’option de résolution DNS: pasv_addr_resolve=YES.]

Cette option est par défaut à NON: L’adresse est reprise de la précédente socket .

port_promiscuous Utilisez cette option si vous voulez désactiver le PORT contrôle de sécurité qui garantit que les connexions de données sortantes peuvent uniquement se connecter au client. A modifier si vous savez ce que vous faites! Défaut: NO

pasv_min_port et pasv_max_port correspondent respectivement au port d’écoute mini et maxi du serveur ftp en mode passif (les valeurs saisies ici sont arbitraires, vous pouvez en saisir d’autres). Cette plage de port doit être ouverte sur votre pare-feu (udp et tcp) et redirigée vers votre serveur FTP.
sudo ufw allow proto tcp to any port 40000:40100
sudo ufw allow proto udp to any port 40000:40100

Il vous reste : 1- à redémarrer le serveur avec la commande suivante
sudo service vsftpd reload
2- puis éventuellement configurez votre routeur (e.g. Freebox) pour que cette même plage de ports (TCP:40000 à TCP:40100) soit redirigée vers l’adresse IP locale de votre serveur FTP.

3- et à configurer votre client ftp de façon à ce que celui-ci réalise des connexions en mode passif (mode passif dans les paramètres du pare-feu de Filezilla par exemple)