Configuration de VsFTPd sous Ubuntu
Publié le 25 novembre 2008 - GNU/Linux
Dernière mise à jour le 30 août 2011
- Article
- |
- Commentaires (2)
- |
- Fichiers attachés (0)
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 :
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.
-
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 · 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.

