No seu caso específico, vejo que você tem um erro 550, o que me faz pensar que há um problema de permissão de arquivo.
Em geral, a causa mais comum para o modo PASV falhar quando o vsftpd está sendo executado no EC2 é que o vsftpd está instruindo o cliente a se conectar ao endereço IP privado do a instância do EC2 e o cliente não podem se conectar a ela, por razões óbvias.
Uma possível solução é atribuir um endereço Elastic IP a essa instância e, em seguida, informar ao vsftpd que se comunique com esse endereço IP público (por exemplo, 1.2.3.4) adicionando a seguinte linha ao vsftpd.conf:
pasv_address=1.2.3.4
Vamos dar um passo atrás e ver como funciona o modo PASV:
- O cliente abre um canal de comando conectando-se à porta 21 no IP público da instância do EC2, que é mapeada para o IP privado da instância pela própria AWS.
- O cliente envia um comando PASV para a instância do EC2 no canal aberto
- O vsftpd sabe que está escutando no endereço IP privado da instância do EC2 (o IP público da instância é gerenciado pela AWS e não é visível na instância) e envia uma resposta ao cliente que contém o endereço IP privado da instância e uma porta aleatória entre 12000 e 12100
- O cliente tenta se conectar ao IP e à porta fornecidos pelo vsftpd e falha
Com pasv_address
, você força o vsftpd a retornar o endereço IP especificado quando um comando PASV é recebido, em vez de tentar adivinhar o endereço IP.