Hospedagem Segura — página inicial

Linux e SSH

Instalar servidor FTP vsftpd: do CentOS 7 ao AlmaLinux 9 e Ubuntu 24.04

O CentOS 7 está sem suporte desde 30/06/2024. Este guia instala e configura o vsftpd no AlmaLinux 9, no Rocky Linux 9 e no Ubuntu 24.04: usuário preso na própria pasta, portas do modo passivo no firewall, FTPS com TLS e quando trocar o FTP pelo SFTP.

  • Por equipe técnica da Hospedagem Segura
  • Atualizado em 10/10/2026
  • 9 min de leitura

Texto do artigo

Neste artigo
  1. O CentOS 7 acabou: onde instalar o vsftpd em 2026
  2. Como instalar o vsftpd no AlmaLinux 9 ou Rocky Linux 9
  3. Instalar o vsftpd no Ubuntu 24.04
  4. Usuário de FTP preso na própria pasta (chroot)
  5. Firewall e modo passivo do FTP
  6. FTPS: criptografar o FTP com TLS
  7. Por que preferir SFTP ao FTP
  8. Perguntas frequentes

Para instalar o servidor FTP vsftpd hoje, troque o CentOS 7 por AlmaLinux 9, Rocky Linux 9 ou Ubuntu 24.04: o pacote é o mesmo vsftpd 3.0.5, instalado com dnf install vsftpd (AlmaLinux e Rocky) ou apt install vsftpd (Ubuntu). O que muda em relação aos tutoriais antigos de CentOS 7 é o sistema por baixo, alguns padrões de configuração e o cuidado com segurança.

Neste guia, tudo foi testado em contêineres com AlmaLinux 9.8 e Ubuntu 24.04.5: instalação, usuário preso na própria pasta (chroot), portas do modo passivo no firewall e FTPS com TLS. No fim, mostramos por que o SFTP costuma ser a escolha melhor e como deixar um usuário só com SFTP.

O CentOS 7 acabou: onde instalar o vsftpd em 2026

O CentOS Linux 7 chegou ao fim da vida em 30 de junho de 2024, segundo a Red Hat. Desde então, não sai nenhuma correção de segurança para ele, nem para o vsftpd, nem para o OpenSSL, nem para o kernel. Um servidor FTP exposto na internet rodando CentOS 7 é um alvo fácil.

O caminho atual é um destes sistemas:

  • AlmaLinux 9 ou Rocky Linux 9: compatíveis com o Red Hat Enterprise Linux, com atualizações de segurança até 31/05/2032, segundo os projetos.
  • Ubuntu 24.04 LTS: manutenção de segurança padrão até maio de 2029, segundo a Canonical.

Se você tem um CentOS 7 em produção, o mais limpo é subir um servidor novo com um desses sistemas, configurar o FTP como abaixo e migrar os arquivos. Os comandos yum do CentOS 7 viram dnf no AlmaLinux e no Rocky, e o resto do guia vale para os dois.

As versões mais novas, AlmaLinux 10 e Ubuntu 26.04 LTS, trazem o mesmo vsftpd 3.0.5 nos repositórios, e os passos deste guia devem valer para elas. Os testes, porém, foram feitos no AlmaLinux 9.8 e no Ubuntu 24.04.5.

Como instalar o vsftpd no AlmaLinux 9 ou Rocky Linux 9

Como root, instale o pacote, habilite o serviço para subir com o sistema e confira a versão e o status:

dnf install -y vsftpd
systemctl enable --now vsftpd
vsftpd -v
systemctl status vsftpd --no-pager
Terminal do AlmaLinux 9.8 com vsftpd 3.0.5 instalado e o serviço vsftpd ativo no systemctl status
vsftpd 3.0.5 instalado e rodando no AlmaLinux 9.8

A configuração fica em /etc/vsftpd/vsftpd.conf. No pacote do AlmaLinux 9, o acesso anônimo já vem desligado (anonymous_enable=NO), e os usuários locais já podem entrar e gravar (local_enable=YES e write_enable=YES). Antes de mexer, guarde uma cópia do arquivo original:

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Instalar o vsftpd no Ubuntu 24.04

No Ubuntu, o serviço já fica habilitado e rodando logo depois da instalação:

apt update
apt install -y vsftpd
systemctl status vsftpd --no-pager
Terminal do Ubuntu 24.04.5 com a instalação do pacote vsftpd 3.0.5 e o serviço ativo
No Ubuntu 24.04 o vsftpd sobe ativo logo após o apt install

Três diferenças importantes em relação ao AlmaLinux:

  • O arquivo é /etc/vsftpd.conf (sem a pasta vsftpd).
  • A linha write_enable=YES vem comentada: sem tirar o # da frente, o usuário entra mas não consegue enviar arquivos.
  • O umask padrão é 077, então os arquivos enviados ficam visíveis só para o dono. Se o FTP alimenta um site, descomente local_umask=022 para o servidor web conseguir ler os arquivos.

Se vsftpd -v não mostrar nada num script, use vsftpd -v 0>&1: o programa escreve a versão na entrada padrão, e sem um terminal ela some.

Usuário de FTP preso na própria pasta (chroot)

Crie o usuário que vai usar o FTP e defina uma senha forte:

useradd -m usuario
passwd usuario

Com a configuração padrão, esse usuário entra e pode navegar pelo sistema inteiro, inclusive por /etc. O teste abaixo mostra isso:

Sessão FTP sem chroot em que o usuário entra e consegue mudar para a pasta /etc do servidor
Sem chroot, o usuário de FTP passeia por /etc

A opção que prende o usuário na pasta dele é chroot_local_user=YES. Só que, ao ligá-la com a pasta home gravável, o login passa a falhar com o erro mais pesquisado do vsftpd:

220 (vsFTPd 3.0.5)
331 Please specify the password.
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
Saída real do teste no AlmaLinux 9, logo depois de ligar chroot_local_user=YES.

O vsftpd recusa a raiz do chroot gravável por segurança. Existe a opção allow_writeable_chroot=YES, mas ela só esconde o problema. O jeito certo é usar uma pasta raiz que pertence ao root, com uma subpasta gravável para o usuário. Acrescente ao fim do vsftpd.conf:

# Prende cada usuario na propria pasta de FTP
chroot_local_user=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
# Faixa fixa para o modo passivo (liberar no firewall)
pasv_min_port=40000
pasv_max_port=40100
# So entra quem estiver na lista
userlist_deny=NO
userlist_file=/etc/vsftpd/usuarios_ftp
No AlmaLinux, userlist_enable=YES já vem no arquivo. No Ubuntu, acrescente essa linha também e use userlist_file=/etc/vsftpd.userlist.

Depois crie as pastas, a lista de usuários permitidos e reinicie o serviço:

mkdir -p /home/usuario/ftp/arquivos
chown root:root /home/usuario/ftp
chmod 755 /home/usuario/ftp
chown usuario:usuario /home/usuario/ftp/arquivos
echo usuario > /etc/vsftpd/usuarios_ftp
systemctl restart vsftpd

Com userlist_deny=NO, só entra quem está no arquivo da lista. É uma camada a mais contra tentativas de senha em contas do sistema. Agora o usuário vê a própria pasta como raiz, grava em arquivos e não sai dali:

Sessão FTP com chroot: a raiz é a pasta do usuário, o envio de arquivo funciona e o acesso a /etc é negado
Com chroot, o usuário envia arquivos e o cd /etc falha com 550

Atenção

o PAM do vsftpd exige que o shell do usuário esteja em /etc/shells, tanto no AlmaLinux quanto no Ubuntu. Um usuário criado com /sbin/nologin não consegue entrar no FTP e recebe "530 Login incorrect".

Firewall e modo passivo do FTP

O FTP usa a porta 21 para comandos e abre outra conexão para cada listagem ou transferência. No modo passivo, que é o que os clientes usam hoje, essa segunda porta sai da faixa definida em pasv_min_port e pasv_max_port. As duas precisam estar liberadas.

No AlmaLinux e no Rocky, com firewalld:

firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload

No Ubuntu, com UFW (libere o SSH antes de ativar, para não perder o acesso):

ufw allow OpenSSH
ufw allow 21/tcp
ufw allow 40000:40100/tcp
ufw enable

Se o servidor fica atrás de NAT e os clientes travam na listagem, informe o IP público em pasv_address (por exemplo, pasv_address=203.0.113.10).

Sobre o SELinux: tutoriais de CentOS 7 mandam rodar setsebool -P ftp_home_dir on, mas esse booleano não existe mais no AlmaLinux 9. Conferimos a política: o vsftpd já pode ler e gravar em pastas dentro de /home e abrir as portas altas do modo passivo sem ajuste. Se aparecer "Permission denied" com o SELinux ativo, investigue com ausearch -m avc -ts recent antes de liberar algo amplo como o booleano ftpd_full_access.

FTPS: criptografar o FTP com TLS

FTP puro manda usuário, senha e arquivos em texto aberto. Se for manter FTP, ative o TLS (FTPS). Para teste, um certificado autoassinado resolve. Em produção, use um certificado válido para o nome do servidor, como ftp.exemplo.com.br.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -subj "/CN=ftp.exemplo.com.br" \
  -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.crt
chmod 600 /etc/vsftpd/vsftpd.key

Acrescente ao vsftpd.conf e reinicie o serviço:

# FTPS (FTP sobre TLS)
ssl_enable=YES
rsa_cert_file=/etc/vsftpd/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/vsftpd.key
force_local_logins_ssl=YES
force_local_data_ssl=YES
No Ubuntu, o arquivo já aponta para um certificado de teste (ssl-cert-snakeoil); basta trocar ssl_enable=NO por YES e acrescentar as duas linhas force_.

Com isso, quem tenta entrar sem criptografia é barrado, e o cliente com TLS negocia TLS 1.3 tanto nos comandos quanto nos dados:

Teste com FTP sem TLS recusado com erro 530 e conexão FTPS aceita com TLS 1.3 pelo curl
FTP sem criptografia é recusado; FTPS conecta com TLS 1.3

No FileZilla ou no WinSCP, escolha FTP com TLS explícito na porta 21. Lembre que, com o canal criptografado, o firewall não consegue enxergar as portas passivas negociadas, então a faixa 40000 a 40100 precisa estar liberada de forma explícita, como fizemos acima.

Por que preferir SFTP ao FTP

O SFTP roda dentro do SSH, que o servidor Linux já tem: uma porta só (22), tudo criptografado, login por chave e nenhum serviço extra para manter. Para a maioria dos casos, como publicar site, trocar arquivos com a equipe ou fazer backup, é a melhor escolha. O FTP faz sentido quando um equipamento ou sistema antigo só fala FTP, como algumas câmeras e impressoras multifuncionais.

Para criar um usuário que só usa SFTP, preso numa pasta, crie o arquivo /etc/ssh/sshd_config.d/50-sftp.conf:

Match Group sftponly
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Depois prepare o grupo e as pastas, confira a sintaxe e reinicie o SSH (no AlmaLinux, o serviço se chama sshd):

groupadd sftponly
usermod -aG sftponly usuario
mkdir -p /srv/sftp/usuario/arquivos
chown root:root /srv/sftp /srv/sftp/usuario
chmod 755 /srv/sftp /srv/sftp/usuario
chown usuario:usuario /srv/sftp/usuario/arquivos
sshd -t && systemctl restart ssh

No nosso teste no Ubuntu 24.04, o usuário entrou por SFTP vendo /srv/sftp/usuario como raiz, enviou arquivos para arquivos e, ao tentar abrir um shell, recebeu "This service allows sftp connections only.". A pasta do ChrootDirectory precisa pertencer ao root e não pode ser gravável por outros, a mesma regra do vsftpd.

Se você precisa de um servidor para hospedar FTP, SFTP ou qualquer outro serviço com acesso root, um VPS Linux já vem com AlmaLinux, Rocky Linux, Ubuntu ou Debian, IPv4 dedicado e console web para reinstalar o sistema quando quiser. A administração fica com você; quem prefere receber o servidor pronto, com backups periódicos e ajuda técnica mensal, tem o VPS Assistido.

Perguntas frequentes

O vsftpd ainda funciona no CentOS 7?

Funciona, mas não deve ser usado em produção: o CentOS 7 está sem suporte desde 30 de junho de 2024 e não recebe mais correções de segurança para o vsftpd, o OpenSSL nem o kernel. O caminho é migrar para AlmaLinux 9, Rocky Linux 9 ou Ubuntu 24.04, onde a instalação é praticamente a mesma (dnf ou apt install vsftpd).

Como resolver o erro "500 OOPS: vsftpd: refusing to run with writable root inside chroot()"?

O erro aparece porque a pasta raiz do chroot pertence ao usuário e é gravável. A solução segura é usar local_root com uma pasta do root (por exemplo, /home/usuario/ftp com chown root:root e chmod 755) e deixar o usuário gravar numa subpasta, como /home/usuario/ftp/arquivos. A opção allow_writeable_chroot=YES também faz o erro sumir, mas enfraquece o isolamento.

Quais portas o vsftpd usa?

O vsftpd usa a porta 21 para os comandos e, no modo passivo, uma porta da faixa definida em pasv_min_port e pasv_max_port para cada transferência. No exemplo deste guia, a faixa é 40000 a 40100, e as duas regras precisam estar liberadas no firewall. O FTPS explícito continua na porta 21.

É melhor usar FTP, FTPS ou SFTP?

SFTP é a melhor escolha na maioria dos casos, porque usa o SSH que o servidor já tem, uma porta só e criptografia em tudo. Se algum sistema exige FTP, use FTPS (FTP com TLS) com force_local_logins_ssl e force_local_data_ssl ligados. FTP sem criptografia expõe a senha a qualquer um no caminho da conexão.

Leia também

Servidor Linux com acesso root

VPS Linux KVM com AlmaLinux, Rocky Linux, Ubuntu ou Debian, armazenamento NVMe, IPv4 dedicado e console web. Você administra; no VPS Assistido, a equipe entrega pronto e ajuda todo mês.