POP HOSTING

Como instalar um servidor FTP no Linux com vsftpd e criar usuário imprimir

  • vsftpd, servidor ftp, instalar ftp linux, usuário ftp, chroot, modo passivo, ftps
  • 0

Como instalar um servidor FTP no Linux com vsftpd, criar usuário só para FTP, configurar modo passivo, firewall e TLS no AlmaLinux, Rocky e Ubuntu.

  • Tempo: 20 min
  • Nível: Avançado
  • Vale para: AlmaLinux e Rocky 8 e 9, Ubuntu 22.04 e 24.04, Debian 12
  • Atualizado: outubro de 2026

O vsftpd é o servidor FTP padrão do AlmaLinux, do Rocky e do Ubuntu: leve, estável e seguro quando bem configurado. Este guia monta um servidor em que cada usuário fica preso na própria pasta, com modo passivo para funcionar atrás de firewall e com criptografia TLS.

Servidor com cPanel? Não instale o vsftpd. O cPanel já traz o próprio servidor FTP (Pure-FTPd por padrão), escolhido em WHM » Service Configuration » FTP Server Selection. As contas se criam no cPanel, em Contas FTP. Um segundo servidor FTP disputaria a porta 21 com ele.
Talvez você nem precise de FTP. Se o servidor já tem SSH, o SFTP funciona sem instalar nada, é criptografado e usa só a porta do SSH. O FTP continua útil para equipamentos e programas que só falam FTP, como câmeras, sistemas antigos e alguns programas de backup.

Antes de começar

  • Acesso SSH como root (veja como acessar o SSH).
  • Nos exemplos, o servidor tem o IP 203.0.113.10 e o usuário de FTP se chama cliente1.

1. Instale o vsftpd

# AlmaLinux e Rocky
sudo dnf install vsftpd
sudo systemctl enable --now vsftpd

# Ubuntu e Debian (o serviço já sobe ligado)
sudo apt install vsftpd

O arquivo de configuração fica em /etc/vsftpd/vsftpd.conf no AlmaLinux e no Rocky e em /etc/vsftpd.conf no Ubuntu e no Debian. Guarde uma cópia antes de mexer:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original              # Ubuntu e Debian
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.original  # AlmaLinux e Rocky

2. Configure o acesso e o modo passivo

Abra o arquivo com sudo nano e garanta que estas linhas existam uma vez só, sem o # na frente. Se a linha já existir com outro valor, altere em vez de duplicar:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
  • anonymous_enable=NO bloqueia o acesso sem senha.
  • local_enable e write_enable deixam os usuários do sistema entrar e enviar arquivos.
  • chroot_local_user=YES prende cada usuário na própria pasta, sem ver o resto do servidor. O allow_writeable_chroot=YES permite que essa pasta aceite gravação.
  • As linhas pasv_ fixam a faixa de portas do modo passivo, que precisa ser liberada no firewall.

Se o servidor está atrás de NAT (IP interno na placa e IP público no roteador), acrescente pasv_address=203.0.113.10 com o IP público. Não use espaço antes ou depois do =: o vsftpd recusa o arquivo.

Reinicie para aplicar:

sudo systemctl restart vsftpd

3. Crie um usuário só para FTP

O usuário abaixo entra no FTP mas não abre terminal no SSH, porque usa o shell nologin:

sudo useradd -m -s /usr/sbin/nologin cliente1
sudo passwd cliente1

O vsftpd só aceita usuários cujo shell esteja listado em /etc/shells. Acrescente o nologin uma única vez:

grep -qx /usr/sbin/nologin /etc/shells || echo /usr/sbin/nologin | sudo tee -a /etc/shells

O usuário cai na pasta /home/cliente1. Para que ele trabalhe direto na pasta de um site, crie o usuário com -d /var/www/site no lugar do -m e ajuste o dono da pasta com sudo chown -R cliente1: /var/www/site.

4. Libere as portas no firewall

# AlmaLinux e Rocky (firewalld)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=40000-40100/tcp
sudo firewall-cmd --reload

# Ubuntu (ufw)
sudo ufw allow 21/tcp
sudo ufw allow 40000:40100/tcp

Com CSF, acrescente 21 e 40000:40100 em TCP_IN no /etc/csf/csf.conf e rode csf -r. Problemas de FTP com o CSF estão em conexões FTP bloqueadas pelo firewall CSF.

5. Ative a criptografia TLS (recomendado)

Sem TLS, usuário, senha e arquivos trafegam em texto aberto. Gere um certificado próprio (ou use um do Let's Encrypt, se um domínio aponta para o servidor). Os caminhos padrão mudam entre as distribuições:

# Ubuntu e Debian
sudo openssl req -x509 -nodes -days 825 -newkey rsa:2048 \
  -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.pem \
  -subj "/CN=ftp.seudominio.com.br"
sudo chmod 600 /etc/ssl/private/vsftpd.key

# AlmaLinux e Rocky
sudo openssl req -x509 -nodes -days 825 -newkey rsa:2048 \
  -keyout /etc/pki/tls/private/vsftpd.key -out /etc/pki/tls/certs/vsftpd.pem \
  -subj "/CN=ftp.seudominio.com.br"
sudo chmod 600 /etc/pki/tls/private/vsftpd.key

Acrescente ao vsftpd.conf, com os caminhos da sua distribuição (no Ubuntu, troque as linhas rsa_ e ssl_enable que já existem no arquivo):

ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_logins_ssl=YES
force_local_data_ssl=YES

No AlmaLinux e no Rocky, as duas linhas rsa_ ficam rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem e rsa_private_key_file=/etc/pki/tls/private/vsftpd.key.

Reinicie com sudo systemctl restart vsftpd. No FileZilla, use Requer FTP explícito sobre TLS; no terminal, o lftp já negocia o TLS sozinho.

6. Teste

sudo ss -tlnp | grep ':21 '
lftp -u cliente1 203.0.113.10

O primeiro comando confirma que o vsftpd escuta na porta 21. O segundo, rodado de outra máquina, deve conectar e aceitar um ls. Com certificado próprio, o lftp reclama da verificação; para o teste, rode set ssl:verify-certificate no dentro dele. Veja mais em FTP pela linha de comando.

Problemas comuns

530 Login incorrect com a senha certa

Quase sempre é o shell: o usuário usa /usr/sbin/nologin, mas ele não está em /etc/shells (passo 3). Também confira se o usuário não está nas listas de bloqueio: /etc/ftpusers no Ubuntu e no Debian, /etc/vsftpd/ftpusers e /etc/vsftpd/user_list no AlmaLinux e no Rocky.

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Falta a linha allow_writeable_chroot=YES. Outra saída, mais rígida, é deixar a pasta do usuário sem permissão de escrita e criar uma subpasta para os envios.

500 OOPS: bad bool value in config file

Há espaço ao redor do = ou um valor inválido. O formato correto é opcao=YES, colado.

O login funciona, mas o ls trava ou dá 425

A faixa passiva não está liberada no firewall, ou o servidor está atrás de NAT sem o pasv_address. Revise os passos 2 e 4.

553 Could not create file

Permissão de pasta. Confira o dono com ls -ld. No AlmaLinux e no Rocky, se as permissões estão certas, o SELinux pode estar barrando: veja os booleanos com getsebool -a | grep ftpd; o ftpd_full_access libera a escrita do FTP (sudo setsebool -P ftpd_full_access on).

Precisa de um servidor para hospedar seus arquivos? Veja os servidores dedicados da POP Hosting, com acesso root e suporte em português.

Esta resposta lhe foi útil?
« Retornar