configurando o upload anônimo do vsftpd. Cria arquivos, mas congela em 0 bytes

3

vsftpd no ubuntu após o sudo apt-get install vsftpd Então fiz a configuração como no arquivo /etc/vsftpd.conf anexado. Ftp anônimo permite cd para o upload diretamente e permite colocar myfile.txt que é criado no servidor, mas depois o cliente trava e nunca avança. O arquivo no servidor permanece em 0 bytes.

Aqui estão as pastas e permissões:

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#

Aqui está o arquivo 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

Veja um exemplo de arquivo que tentou fazer o upload:

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

Este é o cliente que está tentando fazer o upload ... está congelado neste ponto:

$ 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.

EDIT: Acontece que os clientes ftp trabalham em outros sistemas que executam o Linux. As mensagens de erro acima só ocorrem usando ftp em um host do Windows 7 usando a linha de comando ftp.

Na verdade, na mesma máquina com Windows 7, se você colocar o endereço no Windows Explorer, ele funcionará. Pode copiar e colar arquivos e eles aparecem no servidor corretamente carregados.

Portanto, esse problema ocorre apenas no ftp da linha de comando do Windows 7. NOTA: Verifiquei novamente se o firewall está totalmente desativado nesta máquina.

    
por Wayne 22.06.2012 / 02:15

1 resposta

4

Parece que você está tentando usar o FTP ativo, mas um firewall entre o servidor e (ou o) seu cliente está bloqueando o canal de dados. Uma transação FTP consiste em dois canais ou conexões: o canal de comando (na porta 21) e o canal de dados (geralmente associado à porta 20). O cliente emite comandos no canal de comando, enquanto a carga útil (conteúdo do arquivo e saída de comandos como ls ) vai para o canal de dados. Se você tiver um firewall ou roteador interferindo no canal de dados, poderá fazer o login e tudo parecerá funcionar até que você tente obter ou enviar informações para / do servidor - ponto em que tudo parecerá apenas travar. O servidor está tentando se conectar ao cliente, mas não é capaz de fazê-lo.

No modo ativo (o padrão, a menos que você envie o comando PASV [e observe que o vsftpd está sugerindo que você Consider using PASV ]), o servidor tenta abrir uma conexão com o cliente para o canal de dados. É isso mesmo - o servidor está se conectando de volta ao cliente e em uma porta maior que 1023. Os firewalls tendem a se opor a isso, e se você estiver por trás do NAT, simplesmente não funcionará.

É aqui que entra o FTP passivo. Com FTP passivo, o servidor usa o canal connamd estabelecido para informar ao cliente que porta e endereço IP usar para o canal de dados e, em seguida, o cliente abre uma segunda conexão ao servidor. o canal de dados. Isso resolve o problema do cliente estar por trás de um firewall. Tudo o que você precisa fazer é emitir o comando PASV do cliente antes do PUT . Se isso não funcionar, talvez seja necessário ajudar o vsftpd um pouco. Os itens de configuração que você pode desejar incluem pasv_min_port e pasv_max_port , que permitem controlar um intervalo de portas ao qual o vsftpd informa ao cliente para se conectar, para que você possa abri-los em seu firewall. Além disso, se o servidor não estiver escutando no mesmo endereço IP ao qual o cliente está se conectando (dentro de um NAT, talvez), pasv_address informará ao vsftp onde o cliente realmente deseja se conectar (não usará automaticamente o endereço o canal de comando está aberto em).

    
por 22.06.2012 / 06:02