Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
vsftpd [Le 25/10/2013, 13:45]
212.198.146.128 [Installation]
vsftpd [Le 24/10/2022, 15:25] (Version actuelle)
83.202.18.219
Ligne 1: Ligne 1:
-{{tag>Dapper ​ftp serveur sécurité}}+{{tag>​ftp serveur sécurité}}
  
 ---- ----
Ligne 5: Ligne 5:
 <note warning>​Attention cette documentation présentait des failles de sécurité importantes (partie connexion depuis le web)! <note warning>​Attention cette documentation présentait des failles de sécurité importantes (partie connexion depuis le web)!
 Je n'ai pas tout vérifié en détail mais je vous conseille de vérifier les paramètres donnés avec le man du site officiel!</​note>​ Je n'ai pas tout vérifié en détail mais je vous conseille de vérifier les paramètres donnés avec le man du site officiel!</​note>​
-<note warning> En tentant de l'​installer sous Ubuntu 10.10, vous aurez une erreur ''​gpasswd:​ user '​ftp'​ does not exist''​. 
-Il suffit de créer l'​utilisateur ftp en faisant ''​sudo useradd ftp''​ puis de relancer l'​installation de vsftpd.</​note>​ 
  
- +====== Préambule : FTP et "​FTP-Like"​ sécurisés ======
-====== Préambule : FTP et "​FTP-Like"​ sécurisés ====== ​+
  
 Au niveau des protocoles de transfert de fichiers, il y a le FTP classique: Tout y passe en clair (y compris les infos de login/mot de passe). Ce protocole utilise un canal de contrôle et un canal de données (par défaut, port 21 en destination pour le canal contrôle). Au niveau des protocoles de transfert de fichiers, il y a le FTP classique: Tout y passe en clair (y compris les infos de login/mot de passe). Ce protocole utilise un canal de contrôle et un canal de données (par défaut, port 21 en destination pour le canal contrôle).
Ligne 27: Ligne 24:
 Autre corollaire: Ceux qui ont déjà OpenSSH Server sur leur machine peuvent éviter un doublon et préférer utiliser SFTP. Cependant, SFTP donnant accès à toute l'​arborescence (A priori il y a une option pour changer cela dans le CVS), il faudra souvent restreindre l'​accès à l'​utilisateur créé : cet utilisateur sera créé avec un shell restreint (type rssh) ne donnant accès qu'aux commandes SFTP et/ou SCP. Il faudra par ailleurs lui créer un environnement chrooté pour le bloquer dans une sous-arborescence (son home par exemple). D'​autres tutoriels traitent ces points. Autre corollaire: Ceux qui ont déjà OpenSSH Server sur leur machine peuvent éviter un doublon et préférer utiliser SFTP. Cependant, SFTP donnant accès à toute l'​arborescence (A priori il y a une option pour changer cela dans le CVS), il faudra souvent restreindre l'​accès à l'​utilisateur créé : cet utilisateur sera créé avec un shell restreint (type rssh) ne donnant accès qu'aux commandes SFTP et/ou SCP. Il faudra par ailleurs lui créer un environnement chrooté pour le bloquer dans une sous-arborescence (son home par exemple). D'​autres tutoriels traitent ces points.
  
-====== Serveur FTP : Very secure FTP daemon ​======+===== Serveur FTP : Very secure FTP daemon =====
  
 VsFTPd est un serveur FTP conçu avec la problématique d'une sécurité maximale. Contrairement aux autres serveurs FTP (ProFTPd, PureFTPd, etc.), aucune faille majeure de sécurité n'a jamais été décelée dans VsFTPd. VsFTPd est un serveur FTP conçu avec la problématique d'une sécurité maximale. Contrairement aux autres serveurs FTP (ProFTPd, PureFTPd, etc.), aucune faille majeure de sécurité n'a jamais été décelée dans VsFTPd.
  
-Néanmoins deux  [[http://​www.debian.org/​security/​2011/​dsa-2305|failles ​permettent ​un DoS]] avaient été détectées,​ la première était due à une faille d'un vieux noyau linux (avant 2.6.35), et la deuxième ​à été très vite corrigée.+Néanmoins deux  [[https://​www.debian.org/​security/​2011/​dsa-2305|failles ​permettant ​un DoS]] avaient été détectées,​ la première était due à une faille d'un vieux noyau linux (avant 2.6.35), et la deuxième ​été très vite corrigée.
  
-Ce serveur est notamment ​utilisé à grande échelle par des entreprises telles que Red Hat.+Ce serveur est utilisé à grande échelle, notamment ​par des entreprises telles que Red Hat.
  
-La configuration __par défaut__ de VsFTPd est très restrictive : +La configuration __par défaut__ de VsFTPd est très restrictive :
  
   - Seul le compte **anonyme** est autorisé à se connecter au serveur   - Seul le compte **anonyme** est autorisé à se connecter au serveur
Ligne 41: Ligne 38:
   - Les **utilisateurs** ne peuvent pas accéder à leurs répertoires   - Les **utilisateurs** ne peuvent pas accéder à leurs répertoires
 <​note>​ <​note>​
-Remarques :\\ 
 Aussi sécurisé que soit un serveur ftp, le protocole ftp en lui même **n'​est pas sûr** ! En effet l'​échange du nom d'​utilisateur et du mot de passe transite en clair sur le réseau. Aussi sécurisé que soit un serveur ftp, le protocole ftp en lui même **n'​est pas sûr** ! En effet l'​échange du nom d'​utilisateur et du mot de passe transite en clair sur le réseau.
-Si vous utilisez ce serveur sur votre LAN pas de soucis, mais attention si vous comptez utiliser le serveur ftp depuis internet, de fait n'​utilisez pas un compte qui a les droits sudo via ftp (en fait n'​utilisez de l'​extérieur ce compte QUE via ssh ou tout autre protocole sécurisé, POPs, etc.)</​note>​+Si vous utilisez ce serveur sur votre LANpas de soucis, mais attention si vous comptez utiliser le serveur ftp depuis internet. De faitn'​utilisez pas un compte qui a les droits sudo via ftp (en fait n'​utilisez de l'​extérieur ce compte QUE via ssh ou tout autre protocole sécurisé, POPs, etc.)</​note>​
  
  
  
 ===== Installation ===== ===== Installation =====
- +[[:​tutoriel:​comment_installer_un_paquet|Installez le paquet]] **[[apt>vsftpd]]**. 
-[[:​tutoriel:​comment_installer_un_paquet|Installez le paquet]] **[[apt://vsftpd|vsftpd]]** +<code bash> ​sudo apt install vsftpd ​</​code>​ 
- +Il est parfois nécessaire de créer un compte ftp, l'​absence de l'​option *system* crée une faille de sécurité et bloque la désinstallation du paquet. 
-En ligne de commande : +<code bash>sudo useradd --system ftp </​code>​ 
- +Pensez à redémarrer le service :​ 
-  ​sudo apt-get install vsftpd +<code bash>​sudo systemctl restart vsftpd</​code>​ 
- +Vérifier l'​état du service. 
-Il est parfois ​de nécessaire de créer un compte ftp, l'​absence de l'​option *system* crée une faille de sécurité et bloque la désinstallation du paquet. +<code bash>​sudo systemctl status vsftpd</​code>​ 
- +<code bash>​sudo systemctl enable vsftpd</​code>​ 
-  ​sudo useradd --system ftp +Et à ouvrir les ports de votre pare-feu si nécessaire :​ 
 +<code bash>​sudo ufw allow 20/tcp 
 +sudo ufw allow 21/tcp 
 +sudo ufw status</​code>​
 ===== Configuration de vsftpd ===== ===== Configuration de vsftpd =====
  
 La configuration de VsFTPd est centralisée dans un seul et même fichier **/​etc/​vsftpd.conf**. Choisissez [[:​tutoriel:​comment_editer_un_fichier|votre éditeur de texte favori]] (en mode [[:​sudo|super utilisateur]]) et appliquez les modifications suivantes en fonction du mode de fonctionnement de VsFTPd. La configuration de VsFTPd est centralisée dans un seul et même fichier **/​etc/​vsftpd.conf**. Choisissez [[:​tutoriel:​comment_editer_un_fichier|votre éditeur de texte favori]] (en mode [[:​sudo|super utilisateur]]) et appliquez les modifications suivantes en fonction du mode de fonctionnement de VsFTPd.
- 
-**La version 2.3.5 livrée en standard avec Ubuntu est boguée**.\\ 
-L'​utilisation du mode "​prison"​ provoque une erreur : //500 OOPS: vsftpd: refusing to run with writable root inside chroot()//​\\ 
-L'​utilisateur ne peut pas accéder à son répertoire personnel. Une [[#​parade_contre_le_bug_de_la_version_235|"​parade"​]] est décrite plus bas en attendant que la version 3.x soit présente dans les dépôts. 
  
 ==== Configuration de base ==== ==== Configuration de base ====
-  * Vous pouvez personnaliser le texte de connexion au serveur ​  +  * Vous pouvez personnaliser le texte de connexion au serveur : <file bash>ftpd_banner=Bienvenue sur le serveur ftp de LUCAS</file>
- +
-    ​ftpd_banner=Bienvenue sur le serveur ftp de Jonathan +
- +
-  * 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+
  
 +  * Pour permettre des utilisateurs anonymes de se connecter au serveur en lecture seule : <file bash>
 +anonymous_enable=YES
 +anon_upload_enable=NO
 +anon_mkdir_write_enable=NO
 +anon_other_write_enable=NO
 +anon_world_readable_only=YES
 +anon_root=<​Path_du_répertoire_anonyme>​
 +</​file>​
 +  * Pour permettre à vos utilisateurs locaux (ceux qui ont un compte sur la machine) de se connecter au serveur et d'​écrire:​ <file bash>​local_enable=YES
 +write_enable=YES
 +local_umask=022</​file>​
 +  * Pour permettre à vsftpd de charger une liste d'​utilisateurs décommentez la ligne : <file bash>​userlist_enable=YES</​file>​
 +Il faudra alors ajouter le nom des utilisateurs qui auront les accès dans le fichier **/​etc/​vsftpd.userlist**
  
   * Vous pouvez « emprisonner » certains utilisateurs dans leur dossier personnel afin qu'il ne puissent pas naviguer dans le système de fichier.   * 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.+Il faut créer ​le fichier ​dédié à la configuration de vsftpd ​**/​etc/​vsftpd/​chroot.list**,​ [[sudo|avec les droits d'​administration]].
  
-  sudo mkdir /​etc/​vsftpd +Les identifiants des utilisateurs concernés doivent être renseignés dans ///​etc/​vsftpd/​chroot.list//​ sous la forme d'une simple liste : ​<​file>​utilisateur_1 
-  gksu gedit /​etc/​vsftpd/​chroot.list +utilisateur_2 
- +...</​file>​
-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: Il faut ensuite modifier la configuration générale (/​etc/​vsftpd.conf) et ajouter ces lignes:
- +<file bash> 
-  chroot_local_user=NO +# Pas besoin d'​avoir un accès root 
-  chroot_list_enable=YES +chroot_local_user=NO 
-   +# Emprisonner dans son répertoire home les utilisateurs 
-  chroot_list_file=/​etc/​vsftpd/chroot.list +chroot_list_enable=YES 
- +# La lise des prisonniers 
-<note important>​Attention,​ si chroot_local_user ​est à YES, cette liste devient la liste des utilisateurs qui ne seront PAS dans leur "​prison"​ </​note>​+chroot_list_file=/​etc/​vsftpd.chroot_list 
 +# Evite l'​erreur 500 OOPS: vsftpd: refusing to run with writable root inside ​chroot()
 +# Les prisonniers peuvent écrire dans leur propre répertoire 
 +allow_writeable_chroot=YES 
 +</​file>​ 
 +<note important>​Attention,​ si ''​chroot_list_enable'' ​est à NO, cette liste devient la liste des utilisateurs qui ne seront PAS dans leur "​prison"​ </​note>​
  
 ==== Configuration avancée ==== ==== Configuration avancée ====
  
 Si vous voulez changer le port pour transmettre les commandes qui est par défaut (21) : Si vous voulez changer le port pour transmettre les commandes qui est par défaut (21) :
 +<​file>​listen_port=222</​file>​
  
-  ​listen_port=222 +  * Pour avoir un monitoring  ​basique ​(voir les utilisateurs connectés) : 
- +<​file>​setproctitle_enable=YES</​file>​
-  ​* Pour avoir un monitoring  ​basic (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 :  ​Ensuite,​ pour voir la liste des utilisateurs il suffit de taper la commande suivante dans un terminal :
- +<code bash>ps -aef | grep vsftpd</​code>​
-   ps -aef | grep vsftpd+
  
 ou pour suivre les connexions en continu : ou pour suivre les connexions en continu :
- +<code bash>watch -n 1 'ps ax | grep vsftpd | grep -v grep'</​code>​
-   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.**  ​**Attention,​ tous les utilisateurs du système ayant accès à la commande "​ps" ​ pourront également visualiser la liste des utilisateurs connectés.**
Ligne 137: Ligne 124:
    sudo service vsftpd reload    sudo service vsftpd reload
  
-Plus d'​infos sur la configuration de vsftpd: [[http://​vsftpd.beasts.org/​vsftpd_conf.html|Documentation vsFTPd]]+Plus d'​infos sur la configuration de vsftpd: [[http://​vsftpd.beasts.org/​vsftpd_conf.html|(en) Documentation vsFTPd]]
  
  
Ligne 147: Ligne 134:
 La commande à utiliser est mount avec l'​option --bind La commande à utiliser est mount avec l'​option --bind
  
-  ​mkdir ~/​PointDeMontage +<​code>​mkdir ~/​PointDeMontage 
-  sudo mount --bind <​path_complet_du_dossier_à_relier>​ /​home/<​utilisateur>/​PointDeMontage+sudo mount --bind <​path_complet_du_dossier_à_relier>​ /​home/<​utilisateur>/​PointDeMontage</​code>​
  
 +Si vous souhaitez monter ce dossier automatiquement au démarrage de l'​ordinateur il faut éditer le fichier fstab :
  
-==== "​Parade"​ contre le bogue de la version 2.3.5 ====+<​code>​gksu gedit /​etc/​fstab</​code>​
  
-===NOUVELLE METHODE===+et y ajouter cette ligne :
  
-Pour contourner le bug, quelqu'​un a réalisé un backport de l'​option allow_writeable_chroot depuis vsftpd 3+<​code><​path_complet_du_dossier_à_relier>​ /​home/<​utilisateur>/​PointDeMontage ​ none  bind  0  0</​code>​
  
-Ajouter l'​option //​allow_writeable_chroot=YES//​ dans vsftpd.conf,​ puis : 
  
-<​code>​ 
-sudo add-apt-repository ppa:​thefrontiergroup/​vsftpd 
-sudo apt-get update 
-sudo apt-get install vsftpd ​ 
-</​code>​ 
  
  
----- 
-===AUTRE METHODE=== 
  
-  * Dans chaque répertoire utilisateur,​ on crée un répertoire "​FTP"​ appartenant à '​root'​ sur lequel on enlève les droits d'​écriture. 
- 
-  sudo mkdir /​home/<​Utilisateur>/​FTP 
-  sudo chmod 555 /​home/<​Utilisateur>/​FTP 
- 
-On crée ensuite un point de montage à l'​intérieur qui appartient à l'​utilisateur 
- 
-  sudo mkdir /​home/<​Utilisateur>/​FTP/​homedir 
-  sudo chown <​Utilisateur>:<​Utilisateur> ​ /​home/<​Utilisateur>/​FTP/​homedir 
- 
-Et on monte en mode '​bind'​ le répertoire réel dans ce répertoire. 
- 
-  mount --bind ​ /​home/<​Utilisateur> ​ /​home/<​Utilisateur>/​FTP/​homedir 
- 
-Répétez ces opération pour chaque utilisateur "​emprisonné"​ 
- 
-On va maintenant préciser à vsftpd, les chemins exacts où l'​utilisateur doit arriver. Pour cela, en plus du fichier liste, on crée un répertoire contenant un fichier par utilisateur 
- 
-  sudo mkdir /​etc/​vsftpd/​users 
-  gksu gedit /​etc/​vsftpd/​users/​utilisateur_1 
- 
-Dans ce fichier, on précise le chemin FTP avec cette syntaxe: 
- 
-  local_root=/​home/​utilisateur_1/​FTP 
- 
-Si tout vos utilisateurs sont emprisonnés,​ vous pouvez utiliser cette commande qui va créer tous les fichiers du répertoire "​users":​ 
- 
-  sudo -s 
-  for h in `ls -1 /home`; do   if [ ! -f /​etc/​vsftpd/​users/​$h ]; then echo local_root=/​home/​$h/​FTP >/​etc/​vsftpd/​users/​$h;​ fi; done 
-  exit 
- 
-On va signaler à vsftpd que l'on utilise un répertoire de gestion des utilisateurs dans son fichier de configuration (/​etc/​vsftpd.conf) 
- 
-  user_config_dir=/​etc/​vsftpd/​users/​ 
-  ​ 
-Lorsque l'​utilisateur va se connecter en FTP, il n'y aura pas d'​erreur puisque le répertoire FTP est en lecture seule et il se retrouvera face à un répertoire ne contenant que sa "​homedir"​. 
- 
-  * Automatisation au démarrage 
- 
-Ajoutez ces lignes au fichier **/​etc/​rc.local** au dessus de la ligne contenant "​exit":​ 
- 
-<​code>#​ mount en bind pour bogue vsftpd 2.3.5 
-for h in `ls -1 /home`; 
-do 
-  if [ ! -d /​home/​$h/​FTP ]; then mkdir /​home/​$h/​FTP;​fi 
-  chmod 555 /​home/​$h/​FTP 
-  if [ ! -d /​home/​$h/​FTP/​homedir ]; then mkdir /​home/​$h/​FTP/​homedir;​fi 
-  chown $h:$h /​home/​$h/​FTP/​homedir 
-  mount --bind /home/$h/ /​home/​$h/​FTP/​homedir ​ 
-done 
-</​code>​ 
 ===== vsftpd et SSL ===== ===== vsftpd et SSL =====
  
-[[http://​www.brennan.id.au/​14-FTP_Server.html|Principale source d'​informations]] +[[https://​www.brennan.id.au/​14-FTP_Server.html|Principale source d'​informations]]
- +
-le principal défaut du protocole ftp est que les couples nom d'​utilisateur / mot de passe transitent en clair sur le réseau...+
  
-Mais il est possible ​de mettre ​une couche supplémentaire,​ SSL pour chiffrer les échanges d'​authentification et/ou de données+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 ​SSLpour chiffrer les échanges d'​authentification et/ou de données.
  
-Je vous invite à lire le fichier **/​usr/​share/​doc/​vsftpd/​README.ssl** ​qui vient avec vsftpd. Pour les mises en garde de sécurité.+Le fichier **/​usr/​share/​doc/​vsftpd/​README.ssl** ​fourni ​avec vsftpd ​contient certaines ​mises en garde de sécurité.
  
 === Création du certificat === === Création du certificat ===
  
-Il vous faut [[:​tutoriel:​comment_installer_un_paquet|installer le paquet]] **[[apt://openssl|openssl]]**+Il vous faut [[:​tutoriel:​comment_installer_un_paquet|installer le paquet]] **[[apt>openssl]]**
  
    sudo openssl req -new -x509 -days 365 -nodes -out /​etc/​ssl/​private/​vsftpd.cert.pem -keyout /​etc/​ssl/​private/​vsftpd.key.pem    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 : +Openssl va vous poser quelques questions, la plus critique est celle ci :
  
   Common Name (eg, YOUR name) []:   Common Name (eg, YOUR name) []:
  
-Il faut écrire le nom ou l'ip que les clients utiliseront. ​+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 : [[http://​www.debian-administration.org/​articles/​284|Creating and Using a self signed SSL Certificates in debian]] 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 : [[http://​www.debian-administration.org/​articles/​284|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/​. ​+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 : Sécurisons-les :
   sudo chown root:root /​etc/​ssl/​private/​vsftpd.cert.*   sudo chown root:root /​etc/​ssl/​private/​vsftpd.cert.*
Ligne 272: Ligne 199:
 </​file>​ </​file>​
 force_local_data_ssl=NO ​ <-- vous pouvez mettre à "​YES"​ si vous utilisez Kasablanca. force_local_data_ssl=NO ​ <-- vous pouvez mettre à "​YES"​ si vous utilisez Kasablanca.
-A priori, un : +A priori, un :
   sudo service vsftpd reload ​   sudo service vsftpd reload ​
 devrait bien se passer. devrait bien se passer.
Ligne 304: Ligne 231:
  
 **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. **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 : Il vous reste :
 1- à redémarrer le serveur avec la commande suivante 1- à redémarrer le serveur avec la commande suivante
  
-<​code>​ +<​code ​bash>sudo service vsftpd reload
-  ​sudo service vsftpd reload+
 </​code>​ </​code>​
  
Ligne 316: Ligne 245:
 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) 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)
  
-<note important>​Attention : Les versions inférieures ou égales à 2.0.6 de vsFTPd ont un défaut de négociation de la connexion avec SSL et il faut utiliser la version 2.0.7 ou supérieure qui corrige ce problème. À l'​heure actuelle, vous pouvez utiliser la dernière version (hautement recommandé) qui est donc la 2.3.0. Autrement, il faut donc compiler le serveur soi-même (plus compliqué mais bien utile quand on s'en sert correctement). Voir [[http://​forum.filezilla-project.org/​viewtopic.php?​f=2&​t=7688 | ce lien]].</​note>​+<note important>​Attention : Les versions inférieures ou égales à 2.0.6 de vsFTPd ont un défaut de négociation de la connexion avec SSL et il faut utiliser la version 2.0.7 ou supérieure qui corrige ce problème. À l'​heure actuelle, vous pouvez utiliser la dernière version (hautement recommandé) qui est donc la 2.3.0. Autrement, il faut donc compiler le serveur soi-même (plus compliqué mais bien utile quand on s'en sert correctement). Voir [[https://​forum.filezilla-project.org/​viewtopic.php?​f=2&​t=7688 | ce lien]].</​note>​
  
 ===== Configurer VSFTPD pour utiliser des utilisateurs virtuels ===== ===== Configurer VSFTPD pour utiliser des utilisateurs virtuels =====
  
 Nous allons configurer VSFTPD pour utiliser seulement des utilisateurs virtuels et non pas les utilisateurs locaux de votre machine. Nous allons configurer VSFTPD pour utiliser seulement des utilisateurs virtuels et non pas les utilisateurs locaux de votre machine.
-Pour cela nous allons créer des dossiers afin d'y placer nos futurs fichiers de configuration: ​+Pour cela nous allons créer des dossiers afin d'y placer nos futurs fichiers de configuration:​
  
 <​code>​ <​code>​
Ligne 336: Ligne 265:
 ====Créer la base de données des utilisateurs virtuels==== ====Créer la base de données des utilisateurs virtuels====
  
-<note tip>Vous allez avoir maintenant besoin d'​installer un programme permettant d'​interragir avec des fichiers sous forme de base de donnée: [[:​tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt://libdb4.7,db4.7-util,db4.7-doc|libdb4.db4.7-util db4.7-doc]]** . Il est conseillé d'​utiliser la version la plus récente qui est à ce jours la 4.mais qui est susceptible d'​évoluer au cours du temps, n'​oubliez donc pas d'​adapter le tutoriel.</​note>​+<note tip>Vous allez avoir maintenant besoin d'​installer un programme permettant d'​interragir avec des fichiers sous forme de base de donnée: [[:​tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>libdb5.1,db5.1-util,db5.1-doc|libdb4.db4.8-util db4.8-doc]]**. Il est conseillé d'​utiliser la version la plus récente qui est à ce jour la 4.mais qui est susceptible d'​évoluer au cours du temps, n'​oubliez donc pas d'​adapter le tutoriel.</​note>​
  
-<note tip>Si les paquets sont introuvables,​ recherchez une autre version, par exemple : [[:​tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt://libdb5.3,​db5.3-util]]**,​ remplacez plus loin la ligne de commande db4.7_load ​par db5.3_load</​note>​+<note tip>Si les paquets sont introuvables,​ recherchez une autre version, par exemple : [[:​tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>libdb5.3,​db5.3-util]]**,​ remplacez plus loin la ligne de commande db4.8_load ​par db5.3_load</​note>​
  
 Création du fichier PAM : Création du fichier PAM :
-Il faut effacer le contenu du fichier **/​etc/​pam.d/​vsftpd** et le remplacer par : +Il faut effacer le contenu du fichier **/​etc/​pam.d/​vsftpd** et le remplacer par :
  
 <​file>​ <​file>​
Ligne 364: Ligne 293:
 </​note>​ </​note>​
  
-Créons un fichier **login.txt** dans **/​etc/​vsftpd/​** , avec vos utilisateurs et mots de passe : +Créons un fichier **login.txt** dans **/​etc/​vsftpd/​** , avec vos utilisateurs et mots de passe :
  
 <​file>​ <​file>​
Ligne 375: Ligne 304:
 Les 2 utilisateurs sont donc ici ''​util1''​ et ''​util2''​ et leurs mots de passe respectifs ''​mdp1''​ et ''​mdp2''​. Les 2 utilisateurs sont donc ici ''​util1''​ et ''​util2''​ et leurs mots de passe respectifs ''​mdp1''​ et ''​mdp2''​.
  
-<note important>​Attention : le fichier ''​login.txt''​ doit impérativement se terminer par un saut de ligne pour que ''​db4.7_load''​ le lise et l'​interprête ​correctement.</​note>​+<note important>​Attention : le fichier ''​login.txt''​ doit impérativement se terminer par un saut de ligne pour que ''​db4.8_load''​ le lise et l’interprète ​correctement.</​note>​
  
 Il faut maintenant le convertir au format "​db":​ Il faut maintenant le convertir au format "​db":​
  
 <​code>​ <​code>​
-sudo db4.7_load ​-T -t hash -f /​etc/​vsftpd/​login.txt /​etc/​vsftpd/​login.db+sudo db4.8_load ​-T -t hash -f /​etc/​vsftpd/​login.txt /​etc/​vsftpd/​login.db
 </​code>​ </​code>​
  
-on sécurise nos fichiers : +on sécurise nos fichiers :
  
 <​code>​ <​code>​
Ligne 390: Ligne 319:
 ====Configuration du fichier /​etc/​vsftpd.conf==== ====Configuration du fichier /​etc/​vsftpd.conf====
  
-<​file>​+<​file ​bash>
 # Ceci configure vsFTPd en mode "​standalone"​ # Ceci configure vsFTPd en mode "​standalone"​
 listen=YES listen=YES
Ligne 445: Ligne 374:
 </​file>​ </​file>​
  
-Relançons le serveur : +Relançons le serveur :
  
 <​code>​ <​code>​
Ligne 451: Ligne 380:
 </​code>​ </​code>​
  
-<note important>​attention après un **"​YES"​** ou **"​NO"​** dans fichier de configuration il faut bien un **retour a la ligne seul ** et **ne pas laisser trainer** un **espace** suivi du **retour a la ligne**. Vous arriverez peut-être à relancer le démon mais à la connexion vous obtiendrez une erreur du style **"500 OOPS: bad bool value in config file for:"​** suivie du nom de l'​option où il y a l'​espace en fin de ligne, en le supprimant tout revient dans l'​ordre.</​note>​+<note important>​attention après un **"​YES"​** ou **"​NO"​** dans le fichier de configuration il faut bien un **retour a la ligne seul ** et **ne pas laisser trainer** un **espace** suivi du **retour a la ligne**. Vous arriverez peut-être à relancer le démon mais à la connexion vous obtiendrez une erreur du style **"500 OOPS: bad bool value in config file for:"​** suivie du nom de l'​option où il y a l'​espace en fin de ligne, en le supprimant tout revient dans l'​ordre.</​note>​
  
 ==== Gérer les droits des utilisateurs virtuels ==== ==== Gérer les droits des utilisateurs virtuels ====
Ligne 457: Ligne 386:
 Par défaut les utilisateurs virtuels n'ont aucun droit, il faut donc les définir pour chacun d'​entre eux : Par défaut les utilisateurs virtuels n'ont aucun droit, il faut donc les définir pour chacun d'​entre eux :
  
-Pour celà il faut créer un fichier de configuration pour chacun de vos utilisateurs dans le dossier **/​etc/​vsftpd/​vsftpd_user_conf/​**\\ +Pour celà il faut créer un fichier de configuration pour chacun de vos utilisateurs dans le dossier **/​etc/​vsftpd/​vsftpd_user_conf/​**
 Par exemple pour '​util1'​ il faut configurer le fichier **/​etc/​vsftpd/​vsftpd_user_conf/​util1** Par exemple pour '​util1'​ il faut configurer le fichier **/​etc/​vsftpd/​vsftpd_user_conf/​util1**
  
-Exemple de fichier : +Exemple de fichier :
  
 <​file>​ <​file>​
Ligne 487: Ligne 416:
 </​file>​ </​file>​
  
-<note important>​Ne pas oublier de rajouter ​+<note important>​Ne pas oublier de rajouter
   ## Activer la configuration per-user   ## Activer la configuration per-user
   user_config_dir=/​etc/​vsftpd/​vsftpd_user_conf   user_config_dir=/​etc/​vsftpd/​vsftpd_user_conf
 à la fin du fichier /​etc/​vsftpd.conf</​note>​ à la fin du fichier /​etc/​vsftpd.conf</​note>​
 +1
 ==== Script pour automatiser la création/​suppression d'​utilisateurs virtuels ==== ==== Script pour automatiser la création/​suppression d'​utilisateurs virtuels ====
  
Ligne 497: Ligne 427:
 </​code>​ </​code>​
  
-Ce script ​donne tous les droits à chacun de vos utilisateurs virtuels et ne supprime pas le dossier d'un utilisateur lors de sa suppression de la base de données.\\ +Ce scripte ​donne tous les droits à chacun de vos utilisateurs virtuels et ne supprime pas le dossier d'un utilisateur lors de sa suppression de la base de données.
 Libre à vous de modifier ce script ou de changer les droits utilisateurs dans vos fichiers de configuration. Libre à vous de modifier ce script ou de changer les droits utilisateurs dans vos fichiers de configuration.
  
Ligne 566: Ligne 496:
  
 == Sous  Windows== == Sous  Windows==
- FileZilla ou smartFtP option :  "FTP over TLS Explicit" ​+  * FileZilla ou smartFtP option :  "FTP over TLS Explicit
 +  * Winscp 
 +  * CoreFTP Lite 
 +  * FlashFXP option : "Auth TLS"
  
-Winscp 
-  
-CoreFTP Lite 
- 
-FlashFXP option : "Auth TLS" 
 == Sous Mac OS X == == Sous Mac OS X ==
-CyberDuck option "​FTP-SSL (FTP over SSL/​TLS)"​ +  * CyberDuck option "​FTP-SSL (FTP over SSL/​TLS)"​ 
- +  ​* ​Transmit (SSL implicite ou TLS/SSL)
-Transmit (SSL implicite ou TLS/SSL)+
  
 ==Sous Linux== ==Sous Linux==
-ftp-ssl - Le client ftp avec chiffrement SSL ou TLS+  * ftp-ssl - Le client ftp avec chiffrement SSL ou TLS 
 +  * ftp (sans chiffrement) 
 +  * lftp [[http://​lftp.yar.ru/​|home page]] 
 +  * kasablanca - Kasablanca est un client graphique FTP. Parmi ses fonctions, on peut citer le support du chiffrement (par authentification TLS, et non SFTP),FXP (accès direct entre deux serveurs FTP,un gestionnaire de signets et un système de mise en queue. 
 +     ​Tourne sous Kde (mais aussi sous gnome avec les lib Kde) [[http://​kasablanca.berlios.de/​|home page]] 
 +  * Kftpgrabber (FTP utilisant TLS/SSL explicite et implicite) 
 +  * gftp sous Debian/​Ubuntu ne supporte pas ssl [[https://​bugs.debian.org/​cgi-bin/​bugreport.cgi?​bug=251121|rapport de bogue]] 
 +Par contre, il supporte parfaitement le SFTP (selectionner SSH2 à la place de FTP), qui ne pose pas les problèmes de licence de SSL.
  
-ftp (sans chiffrement)+  * FireFTP, extension pour Firefox
  
-lftp [[http://​lftp.yar.ru/|home page]]+  * Filezilla,​ 
 +  * Nautilus, 
 +  * gftp sous ubuntu, 
 +  * et... si vous en connaissez un autre ---> "​Éditer"​ :-D
  
-kasablanca - Kasablanca est un client graphique FTP. Parmi ses fonctions, on peut citer le support du chiffrement (par authentification TLS, et non SFTP),FXP (accès direct entre deux serveurs FTP,un gestionnaire de signets et un système de mise en queue. ​ 
-- Tourne sous Kde (mais aussi sous gnome avec les lib Kde) [[http://​kasablanca.berlios.de/​|home page]] 
  
-Kftpgrabber (FTP utilisant TLS/SSL explicite et implicite)+===== Problèmes courants =====
  
-gftp sous Debian/​Ubuntu ne supporte pas ssl [[http://​bugs.debian.org/​cgi-bin/​bugreport.cgi?​bug=251121|rapport de bogue]] +==== 500 OOPS: vsftpd: refusing to run with writable root inside chroot() ====
-Par contre, il supporte parfaitement le SFTP (selectionner SSH2 à la place de FTP), qui ne pose pas les problèmes de licence de SSL.+
  
-FireFTPextension pour Firefox+La version 2.3.5 de vsftpd contient une sécurité qui empêche l'​utilisation du mode « prison » (chroot) avec accès en écriture dans le dossier racined'où l'​erreur « //500 OOPS: vsftpd: refusing to run with writable root inside chroot()//​ ».
  
-Filezilla, Nautilus, ftp-ssl et gftp sous ubuntu, et... si vous en connaissez un autre ---> "​Éditer"​ :-D+Une des raison de cette sécurité est décrite [[https://​unix.stackexchange.com/​questions/​323711/​what-are-the-dangers-of-having-writable-chroot-directory-for-ftp/​332571#​332571|ici]].
  
 +=== Retirer l'​accès en écriture ===
 +
 +La solution préférable d'un point de vue sécurité consiste à suivre la recommandation de vsftp et de supprimer l'​accès en écriture du répertoire racine, et à ajouter un sous-répertoire avec accès en écriture.
 +
 +Ainsi, pour la configuration proposée plus haut pour les utilisateurs virtuels, il suffit d'​avoir les répertoires suivants :
 +
 +  $ ls -ld /​chemin_du_dossier
 +  dr-xr-xr-x 3 ftp ftp 4096 févr. ​ 3 11:45 /​chemin_du_dossier
 +
 +  $ ls -ld /​chemin_du_dossier/​sous-dossier
 +  drwxr-xr-x 2 ftp ftp 4096 févr. ​ 3 13:03 /​chemin_du_dossier/​sous-dossier
 +
 +Les utilisateurs ne peuvent pas écrire dans le dossier racine /​chemin_du_dossier (erreur « //553 Could not create file.//​ »),​ mais peuvent écrire dans le sous-dossier.
 +
 +=== Forcer vsftp à passer outre la protection par défaut ===
 +
 +Il est possible de forcer vsftp à démarrer même avec une racine accessible en lecture via le fichier /​etc/​vsftpd.conf :
 +
 +  allow_writeable_chroot=YES
 +
 +et redémarrer Vsftpd
 +
 +  $ service vsftpd restart
 +
 +====Voir aussi====
 +  * [[https://​www.tecmint.com/​install-ftp-server-in-ubuntu/​|Procédure complète d'​installation d'un serveur ftp]] (en)
 ---- ----
  
-//​Contributeur : [[utilisateurs:​ju]],​ [[utilisateurs:​sginer]],​ Yoann Vareille, [[utilisateurs:​snoopy_p]],​ [[utilisateurs:​capripot]],​ [[utilisateurs:​kujakuchan]],​ [[utilisateurs:​kwakpiper]]//​+//​Contributeur : [[utilisateurs:​ju]],​ [[utilisateurs:​sginer]],​ Yoann Vareille, [[utilisateurs:​snoopy_p]],​ [[utilisateurs:​capripot]],​ [[utilisateurs:​kujakuchan]],​ [[utilisateurs:​kwakpiper]], [[utilisateurs:​McPeter]]// 
  • vsftpd.1382701534.txt.gz
  • Dernière modification: Le 25/10/2013, 13:45
  • par 212.198.146.128