Pas Tout A Fait

Aller au contenu | Aller au menu | Aller à la recherche

Configuration de VsFTPd sous Ubuntu

Dernière mise à jour le 30 août 2011

Le protocole FTP est encore aujourd'hui très largement répandu, malgré son grand age. Tout comme SMTP, POP ou TELNET, FTP est un protocole en mode texte, et sans aucune sécurité... Les critiques à ce sujet sont nombreuses, mais force est de constater que le simplicité de déploiement et d'emploi de FTP lui permette d'être encore présent pour bien des échanges de données.

Un serveur FTP peut-être mis en place très facilement sous GNU/Linux, et il peut rendre de grand service pour partager des fichiers un peu trop lourd pour les méthodes classiques. De plus, l'amélioration des capacités du débit montant sur les connexions ADSL permet d'envisager une telle installation avec une efficacité correct dans l'optique d'un partage de fichiers en tout genres.

Il existe de nombreux projets qui le proposent, comme ProFTPd, PureFTPd ou encore FileZilla. VsFTPd, pour Very Secure FTP Daemon, et une excellente alternative utilisée par un grand nombre de distributions GNU/Linux pour gérer leurs propres FTP.


Installation

L'installation sous Ubuntu est comme toujours des plus simples :

$ sudo apt-get install vsftpd

Configuration

VsFTPd se configure via le fichier vsftpd.conf, positionné dans /etc sur la majorité des distributions.

Le fichier de configuration par défaut est très restrictif, il n'autorise que les connexions anonymes, en lecture seul. Il fait écouter le serveur sur toutes les interfaces disponibles, sur le port 21, et peut être tout à fait suffisant pour mettre en place un simple partage de fichier accessible à tous.


Voici un exemple de configuration plus complexe, qui permet d'autoriser les comptes utilisateurs présents sur le serveur à se connecter à leurs dossiers personnels, sans autoriser l'accès anonyme :

# On indique la banniere
ftpd_banner=Bienvenue sur mon serveur

# Le serveur doit-il fonctionner en mode standalone
listen=YES

# On indique le port d'ecoute tcp du serveur, par defaut 21
#listen_port=6996

# Accepte t-on les connexions anonymes
anonymous_enable=NO

# On interdit l’ecriture anonyme
anon_upload_enable=NO

# On interdit la creation de repertoires anonyme
anon_mkdir_write_enable=NO

# On interdit la creation, suppression, et le renommage de repertoire ...
anon_other_write_enable=NO

# Accepte t-on les connexions des utilisateurs locaux
local_enable=YES

# Accepte t-on l'ecriture de fichier (commandes STOR, DELE, RNFR, RNTO, MKD, RMD, APPE et SITE)
write_enable=YES

# On indique que tout les utilisateurs sont limités à leurs propres repertoires
chroot_local_user=YES
chroot_list_enable=NO

# On fixe le masque local a 022 (les fichiers ecrits auront les droits 755)
local_umask=022

# On active le log des actions des utilisateurs
xferlog_enable=YES

# Indique le chemin du fichier  de log
xferlog_file=/var/log/vsftpd.log

# On verifie que la commande PORT provienne bien du port 20 de la machine cliente
connect_from_port_20=YES

# On indique les valeurs des timeout
idle_session_timeout=300
data_connection_timeout=120
connect_timeout=60
accept_timeout=60

# On interdit la commande ABOR
async_abor_enable=NO

# On interdit les transferts ASCII
ascii_upload_enable=NO
ascii_download_enable=NO

# L'heure locale sera utilisee pour l'enregistrement des fichiers
use_localtime=YES

Nous voilà donc avec un serveur qui autorise tout les utilisateurs locaux à accéder à leurs répertoires personnels, et qui refuse toute forme de connexion anonyme. Il peut être intéressant de mettre en place un répertoire commun aux utilisateurs, pour faire cela, il faut créer un utilisateur, disons "partage" :

sudo adduser partage

Puis indiquer correctement les droits :

$ sudo chmod -R 755 /home/partage
$ sudo chown partage.partage -R /home/partage

Créer ensuite un répertoire "/home/utilisateur/partage" dans le dossier personnel de chaque utilisateur :

$ mkdir /home/utilisateur/partage
$ sudo chown utilisateur:utilisateur /home/utilisateur/partage
$ sudo chmod 755 /home/utilisateur/partage

Et enfin modifier le fichier" /etc/fstab" pour mounter automatiquement le répertoire partagé dans le home de chaque utilisateur. Pour ce faire, il faut ajouter la ligne suivante dans le fstab, une ligne par utilisateur différent :

/home/partage /home/utilisateur/partage auto bind,defaults 0 0

Et voilà, tout les utilisateurs disposeront d'un répertoire "partage" commun.
Pour allez plus loin, il peut aussi être intéressant de disposer d'un répertoire commun accessible en écriture. Pour cela, il suffit de créer un répertoire dans le "home" de l'utilisateur "partage", et de lui donner les droits adéquates:

$ sudo mkdir /home/partage/upload
$ sudo chown partage:partage /home/partage/upload
$ sudo chmod 777 /home/partage/upload

Mise en place de SSL

Comme dit en préambule, le protocole FTP n'est pas du tout sécurisé, les informations, logins et mots de passe transitent en claire sur le réseau. Ainsi, toutes personnes ayant la possibilités de mettre en place une capture de paquets sur ce réseau sera à même de découvrir aisément les mots de passe. Pour rendre les choses plus sûr, il est intéressant de mettre en place une couche supplémentaire pour sécurisé le transit. Cette opération est réalisable via SSH, mais aussi SSL, que nous allons utiliser ici.

Il vous faut le paquet OpenSSL, a installer si besoin :

$ sudo apt-get install openssl
$ mkdir ~/SSL-cert-vsftpd && cd ~/SSL-cert-vsftpd
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

Openssl va vous poser quelques questions, la plus importante est celle ci :

Common Name (eg, YOUR name) :

Il faut écrire le nom ou l'ip que les clients utiliseront pour se connecter au serveur. 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.

Une fois toutes les questions renseignées, un certificat "vsftpd.pem" est généré dans le dossier SSL-cert-vsftpd de votre dossier personnel. Celui-ci sera valable 365 jours. Copions le dans /etc/ssl/certs/ :

$ sudo cp ~/SSL-cert-vsftpd/vsftpd.pem /etc/ssl/certs/

Sécurisons le :

sudo chown root:root /etc/ssl/certs/vsftpd.pem
sudo chmod 600 /etc/ssl/certs/vsftpd.pem

Puis éditons le fichier /etc/vsftpd.conf pour y ajouter ceci à la fin :

# Options for SSL
#
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem

Redémarrer VsFTPd, et votre accès SSL est en place au niveau de l'authentification des utilisateurs.


Mise en place du mode passif

Le mode passif permet au serveur FTP de déterminer lui-même le port de connexion à utiliser pour permettre le transfert des données, et de le communiquer au client. Il est très utile pour régler les problèmes que posent la présence d'une passerelle faisant de la translation d'adresse NAT entre clients et serveur.

Il est très simple de le mettre en place via votre fichier de configuration. Ajouter ce qui suit à votre vsftpd.conf :

#pasv_promiscuous=NO
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
#pasv_address=mimayin.org
#pasv_addr_resolve=YES
#port_promiscuous=NO

Le chroot des utilisateurs

Il y a trois possibilités de configuration en ce qui concerne le chroot des utilisateurs. La prison est le répertoire de l'utilisateur.

1. Tous les utilisateurs sont dans une prison :

chroot_local_user=YES
chroot_list_enable=NO

2. Seul quelques utilisateurs sont dans une prison :

chroot_local_user=NO
chroot_list_enable=YES

3. Seul quelques utilisateurs sont "libres" :

chroot_local_user=YES
chroot_list_enable=YES

Pour les cas 2 et 3, il vous faudra créer un fichier /etc/vsftpd.chroot_list contenant la liste des utilisateurs "en prison" (pour le cas 2) ou "libres" (pour le cas 3).


Utilisateurs virtuels

L'authentification sera réalisée grâce à PAM. Nous avons besoin du paquet "libpam-pwdfile" :

apt-get install libpam-pwdfile

Pour utiliser PAM vous devez éditer le fichier "/etc/pam.d/vsftpd" et y ajouter les lignes suivantes :

auth    required pam_pwdfile.so pwdfile /etc/vsftpd/passwd
account required pam_permit.so

Prenez soin de commenter ou retirer toutes les autres lignes présentes dans le fichier. Attention, avec cette configuration, les utilisateurs locaux ne seront plus capables de se connecter.

Attaquons nous maintenant au fichier de configuration de vsFTPd, il doit contenir les lignes suivantes :

listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES

Il faut maintenant créer nos utilisateurs virtuels :

htpasswd -c /etc/vsftpd.passwd utilisateur1

Pour les utilisateurs suivants :

htpasswd /etc/vsftpd.passwd utilisateurX

Puis les répertoires de ces utilisateurs :

mkdir /var/www/utilisateurX
chmod 755 /var/www/utilisateurX

Et voilà, reste à tester la connexion avec utilisateurX !


No SSL session reuse on data channel

Ce message d'erreur peut être évité en appliquant l'option suivante dans /etc/vsftpd.conf :

require_ssl_reuse=NO

Cette option, par défaut à YES, implique la vérification que les connexions de données connaissent le même "master secret" que le canal de contrôle. C'est un atout pour la sécurité, qui pose malheureusement problème avec certains clients FTP. À désactiver si besoin donc.

Matthieu Patout

Auteur: Matthieu Patout

Restez au courant de l'actualité et abonnez-vous au Flux RSS

olivier olivier ·  10 juin 2010, 00:09

Remarque sur la sécurité.

Après l'installation de vsftpd sur Ubuntu 10.04 serveur j'ai fait un test sur un PC du réseau local sans faire aucune modification au fichier de configuation.

Résultat : en me loggant avec le compte créé à l'installation, je peux accéder à l'ensemble du système de fichiers, y compris les disques montés.

Prudence donc...

Matthieu Patout Matthieu Patout ·  12 juin 2010, 10:28

@olivier : Hello,

La configuration par défaut sous Ubuntu 10.04 permet aux utilisateurs locaux de se connecter sans chroot, et n'autorise plus les connexions anonymes.

Ajouter un commentaire Fil des commentaires de ce billet

aucune annexe



Voir Aussi

logo-debian.png

Mise à jour automatique avec Cron-APT

Maintenir à jour les logiciels d'un serveur est la première étape d'une bonne politique de sécurité....

Lire la suite

Présentation de Seeks et installation sous Debian Lenny

La recherche sur internet est l'affaire aujourd'hui de quelques grands groupes commerciaux, dominés...

Lire la suite


Découvrez le Nouveau « Pack Liberté »