Pourquoi est-ce que je suis expulsé d'une session FTP après avoir exécuté une commande?

12

Pourquoi est-ce que je suis expulsé d'une session FTP après avoir exécuté une commande? Il semble qu'une fois que je me suis connecté avec succès à un serveur, vous obtenez ce qui suit après avoir exécuté une commande telle que "ls" (j'ai inclus la partie d'erreur dans les balises "[ERREUR]"):

allen92@allen92-VirtualBox:~/Videos$ ftp -n ftp.FreeBSD.org
Connected to ftp.FreeBSD.org.
220 beastie.tdk.net FTP server (Version 6.00LS) ready.
ftp> user
(username) anonymous
331 Guest login ok, send your email address as password.
Password: 
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
[ERROR]
421 Service not available, remote server has closed connection
[ERROR]
ftp> 

Cela semble se produire sur n'importe quel serveur FTP distant. Tout fonctionne bien lorsque je me connecte à la machine locale et exécute des commandes FTP. Si en fait l'erreur "421" est une erreur générique, existe-t-il un moyen de connaître la source du problème? Toute piste à ce sujet serait appréciée. Je n'ai pas pu trouver de support sur ce problème particulier . Toute personne ayant un problème similaire, veuillez partager vos réflexions.

REMARQUE: j'ai VSFTPD installé.

AllenD
la source

Réponses:

13

Il y a très probablement un pare-feu NAT entre vous et les serveurs montrant le symptôme. (Les pare-feu NAT cachent tout un réseau derrière un seul numéro IP).

Le problème est que ftp veut envoyer les données résultant de la commande dans une nouvelle connexion TCP / IP séparée et qui ne peut pas passer par le pare-feu car il doit passer du serveur à vous, et vous êtes caché derrière le pare-feu qui a aucune indication que les données sont destinées à votre machine. Lorsque le protocole FTP a été conçu, de nombreux appareils modernes comme le routeur NAT (qui sont devenus nécessaires lorsqu'il y avait plus d'appareils que d'adresses IP disponibles) n'avaient pas encore été inventés.

Utilisez la pasvcommande (peut être appelée quelque chose de différent dans votre client) pour passer à une connexion passive où les connexions de données vont de vous au serveur.

Voir http://slacksite.com/other/ftp.html pour une explication plus détaillée.

Thorbjørn Ravn Andersen
la source
Merci beaucoup. Dans le cas de VSFTPD, la commande pour entrer en mode passif est "passive". Cela semble fonctionner pour l'instant. Je pense que toute cette situation a à voir avec moi exécutant l'installation de Linux sur une machine virtuelle et ses paramètres pas si standard. Je vais découvrir comment activer le mode "passif" par défaut. Une fois que je le découvrirai, je posterai pour toute personne intéressée.
AllenD
Il n'est pas rare que le réseau par défaut pour les machines virtuelles soit une sorte de NAT, donc la machine n'est pas exposée. Pour VirtualBox, passer à Bridged le fait apparaître comme n'importe quelle autre machine sur le réseau local.
Thorbjørn Ravn Andersen
-1

Ajoutez ou activez cette ligne dans /etc/vsftpd.conf

seccomp_sandbox = NO

Andrej Sevčnikar
la source
Cette réponse a résolu mon problème mais j'ai encore des questions sur cette configuration non documentée.
A1rPun
Pourquoi seccomp_sandbox=NOla bonne réponse dans certaines circonstances est-elle documentée dans le /etc/vsftpd.conffichier: `` `` # seccomp_sanbox ajoute une couche de sécurité supplémentaire limitant le nombre de # syscalls pouvant être effectués via vsftpd. Cependant, il peut arriver qu'une # liste blanche n'autorise pas un appel légitime (généralement déclenché indirectement par # une bibliothèque tierce comme pam ou openssl) et le processus est tué par le noyau. # # Par conséquent, si votre serveur meurt dans des situations courantes (téléchargement, téléchargement de fichier), # décommentez la ligne suivante et n'oubliez pas d'ouvrir le bug sur # bugzilla.novell.com se
GSchukat