Como configurar um Servidor FTP no VPS Ubuntu
Este tutorial irá mostrar como configurar um servidor FTP em uma VPS Ubuntu. Um servidor vsFTPd será utilizado que é amplamente considerado como o FTP mais rápido e seguro para sistemas como UNIX por aí.
FTP ou File Transfer Protocol (protocolo de transferência de arquivos) é um meio de enviar e receber arquivos através de uma conexão de rede.
Fazendo uso de uma estrutura cliente/servidor e segurança SSL/TLS, o FTP permite aos usuários compartilhar e receber arquivos de computadores remotos via transferência segura de dados, eficiente e confiável utilizando protocolos TCP/IP.
O FTP funciona da mesma forma que o HTTP ou SMTP; a única diferença obviamente é que é responsável pelo transporte seguro de arquivos de um remetente para um receptor, ao invés de páginas na internet de servidores para o usuário ou correio eletrônico pela internet.
Conteúdo
Etapa 1 – Instalando Vsftpd
Primeiramente vamos atualizar os pacotes antes de prosseguir com a instalação do daemon vsFTPd. Para começar, execute o seguinte comando:
sudo apt-get update
Aguarde até que o processo esteja completo e você verá uma confirmação assim que as atualizações terminarem.
Quando o caminho estiver livre, instale o daemon vsFTPd utilizando os seguintes comandos:
sudo apt-get install vsftpd
Você receberá uma mensagem de confirmação, que irá requerer você digite Y e aperte o Enter para continuar com a instalação.
Após a instalação estar completa, crie um backup dos arquivos originais para que possamos começar nosso trabalho com um arquivo de configuração em branco:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
Agora nós estamos prontos para ir para a próxima etapa que é configurar o firewall.
Etapa 2 – Permitindo tráfego FTP do firewall
Para permitir que o servidor FTP se comunique com o mundo afora, ele precisa passar pelo firewall. Vejamos se o firewall está habilitado na máquina ou não. Para isso execute o seguinte comando para verificar seu status:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
Se você encontrar a seguinte mensagem:
ufw: command not found
Isso significa que o firewall não está instalado e você pode proceder para a próxima etapa.
No entanto, caso a saída mostra algumas regras definidas ou uma mensagem que o status do firewall está ativo, você terá que verificar se o tráfego FTP funcionará.
Vamos em frente e abrir as portas 20 e 21 para o tráfego FTP; portas 40000-50000 serão reservadas para o intervalo de portas passivas que eventualmente serão definidas no arquivo de configuração e a porta 990 será utilizada quando TLS for ativada. Execute os seguintes comandos para prosseguir:
sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 990/tcp sudo ufw allow 40000:50000/tcp
Agora vamos conferir o status novamente:
sudo ufw status
A saída deve parecer agora como algo assim:
Output Status: active To Action From -- ------ ---- 990/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 21/tcp ALLOW Anywhere 40000:50000/tcp ALLOW Anywhere 20/tcp (v6) ALLOW Anywhere (v6) 21/tcp (v6) ALLOW Anywhere (v6) 990/tcp (v6) ALLOW Anywhere (v6) 40000:50000/tcp (v6) ALLOW Anywhere (v6)
Agora que nós temos todas as portas necessárias abertas e disponíveis, nós podemos prosseguir para a próxima etapa.
Etapa 3 – Criando o diretório do usuário
Como a terceira etapa para criar um servidor FTP Ubuntu, precisaremos selecionar o usuário que fará uso do acesso FTP. Para mostrar como é feito, vamos adicionar um novo usuário. Para criá-lo utilize o seguinte comando:
sudo adduser alex
Quando solicitado, insira uma senha para o usuário e preencha os outros detalhes. Idealmente, o FTP deve ser restrito a um diretório específico por motivos de segurança. O vsFTPd usa cadeias chroot para realizar isso. Com o Chroot habilitado, o usuário local é restrito ao diretório inicial, definido por padrão.
No entanto, é possível que por conta da segurança vsFTPd, um usuário não consiga escrever no diretório. Nós não removeremos os privilégios de gravação da pasta inicial, em vez disso, nós vamos utilizar um diretório FTP que atuará como um chroot junto com o diretório gravável de arquivos que será responsável por manter os arquivos pertinentes. Utilize o seguinte comando para criar a pasta FTP:
sudo mkdir /home/alex/ftp
Defina a propriedade utilizando:
sudo chown nobody:nogroup /home/alex/ftp
Finalmente, remova as permissões para gravar:
sudo chmod a-w /home/alex/ftp
Agora, use o seguinte comando para verificar as permissões:
sudo ls -la /home/alex/ftp
A saída deve parecer algo como:
total 8 dr-xr-xr-x 2 nobody nogroup 4096 Jun 29 11:32 . drwxr-xr-x 3 alex alex 4096 Jun 29 11:32 ..
Como próximo passo, criaremos o diretório que contém os arquivos e atribuiremos a propriedade
sudo mkdir /home/alex/ftp/files sudo chown alex:alex /home/alex/ftp/files
Finalmente, adicione um arquivo de testes ao diretório que será utilizado quando testarmos tudo isso mais tarde:
echo "vsftpd sample file" | sudo tee /home/alex/ftp/files/sample.txt
Etapa 4 – Configurando vsftpd
Como o próxima etapa em nossa tentativa de configurar um servidor FTP no Ubuntu VPS, vamos configurar estaremos configurando um vsFTPd e nosso acesso FTP.
Neste tutorial, permitiremos que um único usuário se conectar com FTP utilizando uma conta de shell local.
As duas configurações-chave de teclas necessárias para isso já estão definidas no arquivo de configuração (vsftpd.conf). Primeiramente, verifique se o arquivo de configuração realmente possui configurações são correspondentes as mencionadas abaixo utilizando o nano comando:
sudo nano /etc/vsftpd.conf
. . . # Allow anonymous FTP? (Disabled by default). anonymous_enable=NO # # Uncomment this to allow local users to log in. local_enable=YES . . .
No mesmo arquivo, Nós vamos prosseguir removendo # e habilitando o código write_enable:
. . . write_enable=YES . . ..
O chroot também será descomentado para garantir que o usuário conectado via FTP apenas acesseará arquivos dentro do diretório permitido:
. . . chroot_local_user=YES . . .
Alguns novos valores precisaram ser adicionados manualmente. Você pode simplesmente colá-los na parte inferior do arquivo. Em primeiro lugar, um user_sub_token será adicionado ao caminho do diretório local_root. Isso irá permitir que a configuração funcione com o usuário atual e qualquer outro usuário que posteriormente for adicionado:
user_sub_token=$USER local_root=/home/$USER/ftp
Para garantir que uma quantidade substancial de conexões esteja disponível, limitaremos o número de portas utilizadas no arquivo de configuração:
pasv_min_port=40000 pasv_max_port=50000
Neste tutorial, planejaremos permitir o acesso caso a caso, então vamos configurar de forma que o acesso seja somente concedido aos usuários que tenham sido explicitamente adicionados a uma lista:
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
O indicador userlist_deny é responsável por alternar a lógica; quando configurado para “não”, somente os usuários especificados na lista terão acesso permitido. Uma vez feito isso, clique em CTRL + X e confirme as alterações no arquivo.
Por fim, procederemos àa criação e adição de nossos usuários ao arquivo:
echo "alex" | sudo tee -a /etc/vsftpd.userlist
Verifique se o usuário está realmente ativo, executando o seguinte comando:
cat /etc/vsftpd.userlist
A saída deve ser “alex” como mostra a imagem:
Reinicie o daemon utilizando o seguinte comando para carregar as alterações nas configuraçẽos:
sudo systemctl restart vsftpd
Etapa 5 – Criando um FTP seguro
Como padrão, o FTP não faz criptografia de dados, então vamos usar o TTL/SSL para tornar as coisas mais seguras. Como primeiro passo, precisamos criar o certificado de segurança SSL e utiliza-lo para proteger o servidor FTP ubuntu. Para começar , use o seguinte comando:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
A bandeira -days tornaá o certificado váalido por um ano e nóos incluíimos uma chave privada RSA de 2048-bit no mesmo comando. Quando solicitado, insira os detalhes pessoais pertinentes no campo fornecido.
Depois de terminar a criação do certificado, abra o arquivo de configuração novamente:
sudo nano /etc/vsftpd.conf
O final do arquivo deve conter duas linhas que começam com “_rsa”. Comente ambas as linhas como:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Em vez disso, vamos apontar o arquivo de configuração para o certificado que acabamos de criar. Adicione as seguintes linhas:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Agora vamos habilitar o SSL e garantir que somente clientes com SSL habilitado entrem em contato conosco. Altere o valor do ssl_enable para “SIM”:
ssl_enable=YES
Agora adicione as seguintes linhas para proteger ainda mais as coisas: (note que isso não permitirá conexões anônimas sobre SSL)
allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
Configure o servidor para usar TLS:
ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
Aqui iremos adicionar mais 2 opções. Em primeiro lugar a reutilização de SSL não será necessários pois pode levar a muitos clientes FTP a quebrarem. Em segundo lugar, usaremos conjuntos de alta criptografia, o que significa que os comprimentos das chaves são iguais ou maiores que 128 bits.
require_ssl_reuse=NO ssl_ciphers=HIGH
Vamos reiniciar novamente para aplicar as novas configurações:
sudo systemctl restart vsftpd
Ótimo trabalho! Você já configurou o servidor FTP em sua VPS Ubuntu para trabalhar com protocolo SSL/TLS.
Etapa 6 – Testando conexões com FileZilla
Atualmente, a maioria dos clientes de FTP suporta configurações de criptografia TLS, por isso é uma ótima maneira de testar se o seu servidor FTP Ubuntu está funcionando como pretendido. Para testar as conexões, usaremos o FileZilla FTP Client. Para começar, inicie o FileZilla, clique no ícone do Gerenciador do Site:
Clique no botão Novo Site na janela solicitada para começar a inserir os detalhes do servidor FTP do Ubuntu.
Preencha todos os detalhes necessários com as informações recém criadas do servidor FTP Ubuntu. Uma vez que o configuramos para usar o TLS, também podemos marcar a criptografia para ser FTP explícito sobre o TLS. A configuração final deve ficar assim:
Quando estiver pronto, clique em Conectar e uma tela solicitando a senha do usuário do e senha FTP será exibida.
Finalmente, você precisará verificar o certificado SSL do seu servidor FTP na VPS Ubuntu.
Após confirmar, o diretório root com o arquivo de testes agora deve aparecer na tela.
Isso é tudo! Agora, você pode executar várias transferências de arquivos do seu computador para o servidor FTP Ubuntu e vice versa.
Dica
VPS com mais recursos e alto desempenho é na Hostinger. Aproveite até 67% OFF na nossa hospedagem de servidores!
VPS com mais recursos e alto desempenho é na Hostinger. Aproveite até 67% OFF na nossa hospedagem de servidores!
Conclusão
Neste tutorial, passamos por uma jornada passo a passo para criar uma maneira para um usuário local transferir arquivos via FTP com SSL/TLS no servidor FTP Ubuntu. Nós também testamos a conexão utilizando o FileZilla para garantir que tudo seja funcional.
Caso seu site ainda esteja desprotegido, a Hostinger pode te ajudar com isso!
Comentários
setembro 16 2019
Bom, realizei o procedimento 100% como estava no doc. agora sem acesso total ao meu ftp.
setembro 23 2019
Olá Diego, você teria mais informações sobre o que aconteceu?
novembro 14 2019
Bom dia, Estou enfrentando dificuldade em habilitar o serviço FTP. Efetuar o procedimento acima e ao rodar o "sudo systemctl restart vsftpd", não retorna nenhum erro, e também não retorna nenhuma mensagem de sucesso! Vale lembrar que o retorno do "ufw status" é Status: inactive, ou seja não preciso efetuar o procedimento de firewall. outra coisa que fiz foi criar um aruivo vsftp.conf zerado e incluí apenas procedimento acima. Quando rodo service --status-all, retorna [ - ] vsftp , ou seja o serviço vcftp não esta ativo.
novembro 19 2019
Olá Marcelo, mesmo que a gente não tenha acesso à sua VPS, você pode chamar o nosso suporte no chat 24/7 que eles podem te ajudar melhor nessa situação! Já que, para entender o que está acontecendo, precisamos ter acesso a algumas informações como o painel que você está usando e o IP da sua VPS, por exemplo! Mas chama eles lá que eles certamente te ajudarão!
novembro 26 2019
Excelente. Funcionou direitinho :-)
janeiro 22 2021
Olá, Apliquei o procedimento e com um pequeno ajuste funcionou perfeito!!! Todavia, gostaria de saber se teria como "inibir" a visualização de outras pastas não pertencente a tal conta logada do lado do cliente? Pois no meu teste mesmo que a referida conta não tenha acesso a outras pastas, ela tinha acesso "visualização" a toda a hierarquia de diretórios e subdiretórios. Teria como restringir essa visualização com o vsftpd?
fevereiro 05 2021
Olá, tudo bem? Dá para fazer sim, inclusive na base de usuário por usuário. Este link aqui tem uma descrição mais detalhada de como fazer isso.
junho 28 2021
Olá Gostaria de tirar uma duvida na parte de conectar com o servidor no filezilla está dando um erro que eu não consigo encontrar na net. vocês teriam alguma informação ? Nome do erro "GnuTLS erro -15 em gnutls_record_recv: An unexpected TLS packet was received."
julho 09 2021
Olá, nesse caso recomendamos que você entre em contato com o nosso time de suporte!
março 14 2022
Bom dia, como faço pra acessar o servidor pelo FTP? no caso colocando ftp://IP ele não vai.. tem que habilitar algo a mais? Ou realmente vsftpd não permite? Obrigado!
março 18 2022
Olá, Will! Pelo o que eu sei, seria só executar os passos do tutorial mesmo. Você já tentou acessar pelo Filezilla usando as configurações de nome, host, usuário e senha do servidor? Se precisar de um suporte mais aprofundado, você pode entrar em contato com nosso time de Customer Success!
setembro 03 2022
Fiz o passo a passo e está dando timeout
janeiro 06 2023
boa tarde fiz o processo e internamente eu acesso de fora da acesso recusado pelo servidor
janeiro 27 2023
Olá! Entrei em contato com nossa equipe técnica e eles responderam que provavelmente se trata de um erro de configuração. Recomendamos que você dê uma olhada nesse tópico de fórum aqui, que tem boas soluções de configuração de acesso remoto ?