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 27/01/2013, 15:13]
maisondouf [Configuration anvancée]
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 ​FTPd ======+===== 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 ​(Néanmoins deux  [[http://​www.debian.org/​security/​2011/​dsa-2305|failles permettent un DoS]] ont été détectées,​ mais toute fois, la première était due à une faille d'un vieux noyau linux, et la deuxième à été très vite corrigée). Ce serveur est notamment utilisé à grande échelle par des entreprises telles que Red Hat.+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.
  
-La configuration __par défaut__ de VsFTPd est très restrictive : +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 a été très vite corrigée. 
 + 
 +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 :
  
   - Seul le compte **anonyme** est autorisé à se connecter au serveur   - Seul le compte **anonyme** est autorisé à se connecter au serveur
   - En **lecture seule**   - En **lecture seule**
-  - Les utilisateurs ne peuvent accéder ​**qu'à leur** compte+  - 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. 
 +<code bash>sudo systemctl status ​vsftpd</​code>​ 
 +<code bash>​sudo systemctl enable vsftpd</​code>​ 
 +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 =====
  
Ligne 56: Ligne 62:
  
 ==== 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 : <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**
  
-  * Pour permettre des utilisateurs ​anonymes ​de se connecter au serveur en lecture seule.+  * 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 le fichier dédié à la configuration de vsftpd **/​etc/​vsftpd/​chroot.list**,​ [[sudo|avec les droits d'​administration]].
  
-  anonymous_enable=YES +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 
-  anon_upload_enable=NO +utilisateur_2 
-  anon_mkdir_write_enable=NO +...</file>
-  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 machinede se connecter au serveur ​et d'écrire. +Il faut ensuite modifier ​la configuration générale (/​etc/​vsftpd.conf) et ajouter ces lignes: 
- +<file bash> 
-  local_enable=YES +# Pas besoin ​d'avoir un accès root 
-  ​write_enable=YES +chroot_local_user=NO 
-  local_umask=022 +# Emprisonner dans son répertoire home les utilisateurs 
- +chroot_list_enable=YES 
- +# La lise des prisonniers 
-  * Vous pouvez « emprisonner » certains ​utilisateurs ​dans leur dossier personnel grâce à la configuration suivante : +chroot_list_file=/​etc/​vsftpd.chroot_list 
- +# Evite l'​erreur 500 OOPS: vsftpd: refusing to run with writable root inside chroot(). 
-  chroot_local_user=NO +Les prisonniers peuvent écrire ​dans leur propre répertoire 
-  chroot_list_enable=YES +allow_writeable_chroot=YES 
-   +</​file>​ 
-  chroot_list_file=/​etc/​vsftpd.chroot_list +<note important>​Attention,​ si ''​chroot_list_enable'' ​est à NO, cette liste devient la liste des utilisateurs qui ne seront PAS dans leur "​prison"​ </​note>​
- +
-Les identifiants des utilisateurs concernés doivent êtres renseignés ​dans ///​etc/​vsftpd.chroot_list//​. +
- +
-<note important>​Attention,​ si chroot_local_user ​est à YES, cette liste devient la liste des utilisateurs qui ne seront PAS dans leur "​prison"​ </​note>​+
  
-==== Configuration ​anvancé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 ​visualisés ​la liste des utilisateurs connectés.**+
  
 * Monitoring d'​après le fichier de log * Monitoring d'​après le fichier de log
Ligne 114: Ligne 122:
 Après chaque changement sur la configuration,​ pensez à relancer le serveur pour les prendre en compte : Après chaque changement sur la configuration,​ pensez à relancer le serveur pour les prendre en compte :
  
-   ​sudo ​sevice ​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 126: Ligne 134:
 La commande à utiliser est mount avec l'​option --bind La commande à utiliser est mount avec l'​option --bind
  
-  ​sudo mount --bind ​dossier_ftp dossier_home+<​code>​mkdir ~/​PointDeMontage 
 +sudo mount --bind ​<​path_complet_du_dossier_à_relier>​ /​home/<​utilisateur>/​PointDeMontage</​code>​
  
-Pour l'avoir au boot éditer ​///etc/fstab// et ajouter ​:+Si vous souhaitez monter ce dossier automatiquement au démarrage de l'ordinateur il faut éditer ​le fichier ​fstab :
  
-  dossier_source dossier_ftp ​   none  bind,​defaults,​auto ​    ​0 ​   0 +<​code>​gksu gedit /​etc/​fstab</​code>​
-   +
-   +
-  Remarque: selon les besoins, le paramètre local_root permet de faire atterrir les utilisateurs où l'on souhaite, puis de les y chrooter avec le paramètre chroot_local_user. +
-===== vsftpd et SSL =====+
  
-[[http://www.brennan.id.au/14-FTP_Server.html|Principale source d'​informations]]+et y ajouter cette ligne : 
 + 
 +<​code><​path_complet_du_dossier_à_relier> ​/home/<​utilisateur>​/PointDeMontage ​ none  bind  0  0</​code>​ 
 + 
 + 
 + 
 + 
 + 
 +===== vsftpd et SSL =====
  
-le principal défaut du protocole ftp est que les couples nom d'​utilisateur ​mot de passe transitent en clair sur le réseau...+[[https://www.brennan.id.au/​14-FTP_Server.html|Principale source d'​informations]]
  
-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 186: 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 /​etc/​init.d/​vsftpd reload ​+  sudo service ​vsftpd reload ​
 devrait bien se passer. devrait bien se passer.
  
Ligne 218: 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 /​etc/​init.d/​vsftpd reload+
 </​code>​ </​code>​
  
Ligne 230: 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 250: 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 fichier ​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.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 264: Ligne 282:
 account required /​lib64/​security/​pam_userdb.so db=/​etc/​vsftpd/​login account required /​lib64/​security/​pam_userdb.so db=/​etc/​vsftpd/​login
 </​file>​ </​file>​
-Sinon il risque d'​avoir des problemes ​de liens symboliques dans certains cas.+Sinon il risque d'​avoir des problèmes ​de liens symboliques dans certains cas.
 </​note>​ </​note>​
  
Ligne 272: Ligne 290:
 account required /​lib/​x86_64-linux-gnu/​security/​pam_userdb.so db=/​etc/​vsftpd/​login account required /​lib/​x86_64-linux-gnu/​security/​pam_userdb.so db=/​etc/​vsftpd/​login
 </​file>​ </​file>​
-Sinon il risque d'​avoir des problemes ​de liens symboliques dans certains cas.+Sinon il risque d'​avoir des problèmes ​de liens symboliques dans certains cas.
 </​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 286: 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 301: 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 356: Ligne 374:
 </​file>​ </​file>​
  
-Relançons le serveur : +Relançons le serveur :
  
 <​code>​ <​code>​
Ligne 362: 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 368: 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 398: 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 408: 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 441: Ligne 460:
               echo "​[warning]:​ /​home/​ftp/​$user:​ omission, ce répertoire existe déja."​               echo "​[warning]:​ /​home/​ftp/​$user:​ omission, ce répertoire existe déja."​
           fi           fi
-          ## Chrootage ​des utilisateurs virtuels+          ## Mise en place chroot ​des utilisateurs virtuels
           if ! grep -q "​^local_root="​ $USER_CONFIG_DIR/​$user 2>/​dev/​null;​ then           if ! grep -q "​^local_root="​ $USER_CONFIG_DIR/​$user 2>/​dev/​null;​ then
               echo ": on chroote '​$user'"​               echo ": on chroote '​$user'"​
Ligne 451: Ligne 470:
               echo "​anon_other_write_enable=YES"​ >> ​ $USER_CONFIG_DIR/​$user               echo "​anon_other_write_enable=YES"​ >> ​ $USER_CONFIG_DIR/​$user
           else           else
-              echo "​[warning]:​ $USER_CONFIG_DIR/​$user:​ '​$user'​ est déjà ​chrooté."+              echo "​[warning]:​ $USER_CONFIG_DIR/​$user:​ '​$user'​ est déjà ​en chroot."
           fi           fi
         done         done
Ligne 477: 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 autentification 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|bug report]] +==== 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 license 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, ftp-ssl et gftp sous ubuntu, et... si vous en connaissez un autre ---> "​Editer"​ :-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.1359296001.txt.gz
  • Dernière modification: Le 27/01/2013, 15:13
  • par maisondouf