O post antigo daqui ensinava a subir um FTP com proftpd liberando login root direto — e confesso que isso já foi prática comum, mas hoje é receita para dor de cabeça de segurança. Se alguém escanear a porta 21 aberta com root liberado, é questão de tempo até um ataque de força bruta comprometer o servidor inteiro. Vou refazer esse guia do zero com vsftpd, que é o que realmente uso hoje em servidores de produção, e sem abrir root pra ninguém.
Antes de mais nada: se o objetivo é só transferir arquivo entre máquinas de forma seguraa e você não tem uma razão específica pra usar FTP tradicional (tipo compatibilidade com um sistema legado que só fala FTP), o SFTP via SSH já resolve com bem menos configuração e criptografia nativa. Mas se o requisito é FTP mesmo, aqui vai o passo a passo completo.
Instalando o vsftpd
- Atualize os pacotes:
sudo apt update - Instale o vsftpd:
sudo apt install -y vsftpd - Habilite e inicie o serviço:
sudo systemctl enable --now vsftpd - Confirme que está rodando:
sudo systemctl status vsftpd
Diferente do proftpd, o vsftpd já vem com uma postura de segurança bem mais conservadora por padrão — ele nem permite login anônimo de cara, o que já evita boa parte dos problemas do guia antigo.
Configuração básica e segura
Abra o arquivo de configuração:
sudo nano /etc/vsftpd.conf
Ajuste (ou confirme) essas linhas:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
O chroot_local_user=YES é o que impede um usuário FTP de navegar para fora da própria pasta home — sem isso, qualquer conta com acesso FTP consegue passear pelo sistema de arquivos inteiro. O allow_writeable_chroot=YES precisa estar sem comentário, senão o vsftpd recusa iniciar sessões de usuários com permissão de escrita na pasta raiz do chroot — isso trava bastante gente na primeira configuração.
Nunca, em hipótese nenhuma, adicione a conta root na lista de usuários permitidos (o arquivo /etc/ftpusers já vem bloqueando o root por padrão — deixe assim). Crie um usuário dedicado para a transferência de arquivos em vez disso:
sudo adduser usuarioftp
sudo systemctl restart vsftpd
Liberando no firewall
Se você usa UFW (o mais comum em Ubuntu Server), libere a porta de controle e o intervalo de portas passivas que configurou:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw reload
Esse intervalo de portas passivas (30000-31000 no exemplo) precisa ser idêntico nos dois lugares — no vsftpd.conf e no firewall. É o erro mais comum de quem segue tutorial pela metade: libera só a porta 21 e esquece do range passivo, aí a conexão de controle funciona mas a listagem de arquivo trava.
Erros comuns e como resolver
Conecta mas trava ao listar pastas
Quase sempre é o range de portas passivas não liberado no firewall, ou um firewall de nuvem (grupo de segurança da AWS, regra do Oracle Cloud etc.) que você esqueceu de configurar além do UFW local. Lembre que em VPS na nuvem existem dois firewalls: o do sistema operacional e o do provedor — os dois precisam liberar a mesma faixa de portas.
“500 OOPS: vsftpd: refusing to run with writable root inside chroot”
Esse erro aparece quando o chroot está ativado mas a pasta home do usuário tem permissão de escrita para o dono, e o allow_writeable_chroot não está habilitado. A forma mais segura de resolver, em vez de simplesmente ativar essa flag para todo mundo, é criar uma subpasta dentro do home só para upload e apontar o usuário para lá, mantendo a pasta raiz sem permissão de escrita.
Login funciona mas dá “550 Permission denied” ao enviar arquivo
Geralmente é permissão do sistema de arquivos mesmo, não do vsftpd. Confira o dono da pasta com ls -la e ajuste com sudo chown usuarioftp:usuarioftp /caminho/da/pasta. Vale checar também se o SELinux ou AppArmor não está bloqueando — em distros com AppArmor ativo (Ubuntu costuma ter), o perfil do vsftpd pode restringir gravação fora de certos caminhos.
Vale a pena migrar para SFTP?
Na maioria dos casos que atendo hoje, sim. O SFTP roda por cima do SSH, então usa a porta 22 (menos superfície de ataque pra liberar no firewall), já criptografa tudo por padrão e não precisa de range de portas passivas. Se você só está montando FTP porque “sempre foi assim” na empresa, vale considerar migrar. Já deixamos pronto o guia de configuração de rede estática no Ubuntu Server com Netplan como pré-requisito para servidores que vão expor esses serviços, e o guia de backup com rsync via SSH cobre bem o caso de uso de transferência automatizada sem FTP.
Perguntas frequentes
Por que não usar login anônimo pra facilitar?
Porque qualquer pessoa na internet consegue se conectar e, dependendo da configuração de escrita, subir arquivo no seu servidor sem autenticação nenhuma. É prato cheio para hospedar malware ou lotar seu disco.
Dá pra usar FTP com criptografia (FTPS)?
Sim, o vsftpd suporta FTPS habilitando ssl_enable=YES e apontando certificado no arquivo de configuração. Funciona, mas na prática o SFTP costuma ser mais simples de configurar e de liberar no firewall corporativo.
Preciso reiniciar o vsftpd toda vez que mudo o arquivo de configuração?
Sim, sempre: sudo systemctl restart vsftpd. Alterações no vsftpd.conf só valem depois do restart.
Como faço para limitar cada usuário à própria pasta?
É exatamente o que o chroot_local_user=YES faz, combinado com o allow_writeable_chroot. Depois disso, cada conta enxerga só a própria home como se fosse a raiz do sistema.


