3 votes

configurer vsftpd pour le téléchargement anonyme. Crée des fichiers mais se bloque à 0 octet

Vsftpd sur ubuntu après sudo apt-get install vsftpd Puis j'ai fait la configuration comme dans le fichier /etc/vsftpd.conf ci-joint. Le ftp anonyme permet de se rendre directement sur le téléchargement et permet de mettre monfichier.txt qui est créé sur le serveur mais ensuite le client se bloque et ne continue pas. Le fichier sur le serveur reste à 0 octet.

Voici les dossiers et les permissions :

root@support:/home/ftp# ls -ld .
drwxr-xr-x 3 root root 4096 Jun 22 00:00 .
root@support:/home/ftp# ls -ld pub
drwxr-xr-x 3 root root 4096 Jun 21 23:59 pub
root@support:/home/ftp# ls -ld pub/upload
drwxr-xr-x 2 ftp ftp 4096 Jun 22 00:06 pub/upload
root@support:/home/ftp#

Voici le fichier vsftpd.conf :

root@support:/home/ftp# grep -v '#' /etc/vsftpd.conf
listen=YES
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
anon_root=/home/ftp/pub/
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
nopriv_user=ftp
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Voici un exemple de fichier qui a tenté de se télécharger :

root@support:/home/ftp/pub/upload# ls -l
total 0
-rw------- 1 ftp nogroup 0 Jun 22 00:06 build.out

Voici le client qui tente de télécharger... il est gelé à ce stade :

$ ftp 173.203.89.78
Connected to 173.203.89.78.
220 (vsFTPd 2.0.6)
User (173.203.89.78:(none)): ftp
331 Please specify the password.
Password:
230 Login successful.
ftp> put build.out
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp> cd upload
250 Directory successfully changed.
ftp> put build.out
200 PORT command successful. Consider using PASV.
150 Ok to send data.

EDITAR: Il s'avère que les clients ftp fonctionnent à partir d'autres systèmes sous Linux. Les messages d'erreur ci-dessus ne se produisent qu'en utilisant ftp sur un hôte Windows 7 en utilisant la ligne de commande ftp.

En fait, sur la même machine Windows 7, si vous mettez l'adresse dans l'explorateur Windows, cela fonctionne. Il peut copier et coller les fichiers et ils apparaissent sur le serveur correctement téléchargés.

Ce problème ne se produit donc que sur le ftp de la ligne de commande de Windows 7. NOTE : J'ai vérifié deux fois que le pare-feu est entièrement désactivé sur cette machine.

0 votes

Dans mon cas, c'était la solution au problème : serverfault.com/questions/806959/

4voto

NathanG Points 1286

Il semble que vous essayez d'utiliser le FTP actif, mais qu'un pare-feu situé entre le serveur et (ou sur) votre client bloque le canal de données. Une transaction FTP se compose de deux canaux, ou connexions : le canal de commande (sur le port 21) et le canal de données (généralement associé au port 20). Le client envoie des commandes sur le canal de commande, tandis que les données utiles (contenu des fichiers et sortie de commandes telles que ls ) va sur le canal de données. Si un pare-feu ou un routeur interfère avec le canal de données, vous pouvez vous connecter et tout semblera fonctionner jusqu'à ce que vous essayiez de recevoir ou d'envoyer des informations vers/depuis le serveur - à ce moment-là, tout semblera se bloquer. Le serveur essaie de se reconnecter au client, mais il n'y parvient pas.

En mode actif (par défaut, sauf si vous envoyez la commande PASV commande [et notez que vsftpd suggère que vous Consider using PASV ]), le serveur tente d'ouvrir une connexion au client pour le canal de données. C'est exact - le serveur se reconnecte au client, et sur un port supérieur à 1023. Les pare-feu ont tendance à s'y opposer, et si vous êtes derrière un NAT, cela ne peut pas fonctionner du tout.

C'est là que le FTP passif entre en jeu. Avec le FTP passif, le serveur utilise le canal connamd établi pour indiquer au client le port et l'adresse IP à utiliser pour le canal de données, puis le client ouvre une deuxième connexion au serveur pour le canal de données. Cela résout le problème du client qui se trouve derrière un pare-feu. Tout ce que vous avez à faire est d'émettre la commande PASV du client avant que le PUT . Si cela ne fonctionne pas, vous devrez peut-être aider vsftpd un peu. Les éléments de configuration que vous pouvez souhaiter sont pasv_min_port y pasv_max_port qui vous permettent de contrôler une série de ports auxquels vsftpd demande au client de se connecter, afin que vous puissiez les ouvrir dans votre pare-feu. De même, si le serveur n'écoute pas sur la même adresse IP que celle à laquelle le client se connecte (à l'intérieur d'un NAT, peut-être), pasv_address indique à vsftp à quelle adresse le client veut se connecter (il n'utilisera pas automatiquement l'adresse sur laquelle le canal de commande est ouvert).

0 votes

NathanG. Merci pour tout cela. J'ai ajouté quelques informations supplémentaires. Nous avons constaté que ce problème est isolé et se produit avec un ftp en ligne de commande sur une machine Windows 7. Il fonctionne bien avec les clients d'autres machines Linux à l'intérieur et à l'extérieur de notre routeur. Il fonctionne également sur la même machine Windows 7 à partir de l'explorateur Windows plutôt qu'avec la ligne de commande ftp.

0 votes

À propos, le client ftp de Windows ne prend pas en charge les commandes PASV ou PASSIVE. S'agit-il donc d'un simple bogue dans le ftp en ligne de commande ? Ou existe-t-il un moyen de le faire fonctionner ? Nous avons des utilisateurs qui vont certainement essayer cela et qui s'attendent à ce que cela fonctionne à partir de la ligne de commande de Windows 7.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X