Dans votre cas spécifique, je constate que vous avez une erreur 550 qui me fait penser qu'il y a un problème de permission de fichier.
En général, la cause la plus courante pour l'échec du mode PASV lorsque vsftpd est en cours d'exécution sur EC2 est que vsftpd indique au client de se connecter à l'adresse IP privée de l'instance EC2 et que le client ne peut pas s'y connecter, pour des raisons évidentes.
Une solution possible est d'attribuer une adresse IP élastique à cette instance, puis de dire à vsftpd de s'annoncer avec cette adresse IP publique (par exemple 1.2.3.4) en ajoutant la ligne suivante à vsftpd.conf:
pasv_address=1.2.3.4
Revenons en arrière et examinons le fonctionnement du mode PASV:
- Le client ouvre un canal de commande en se connectant au port 21 sur l'adresse IP publique de l'instance EC2, qui est mappée à l'adresse IP privée de l'instance par AWS lui-même.
- Le client envoie une commande PASV à l'instance EC2 sur le canal ouvert
- vsftpd sait qu'il écoute sur l'adresse IP privée de l'instance EC2 (l'adresse IP publique de l'instance est gérée par AWS et n'est pas visible depuis l'instance) et envoie une réponse au client contenant l'adresse IP privée de l'instance et un port aléatoire entre 12000 et 12100
- Le client tente de se connecter à l'adresse IP et au port fournis par vsftpd et échoue
Avec pasv_address
, vous forcez vsftpd à retourner l'adresse IP spécifiée lorsqu'une commande PASV est reçue, au lieu d'essayer de deviner l'adresse IP.