Configurar um servidor FTP com o vsFTPd no Raspberry Pi

Neste artigo irei demonstrar como podemos configurar um servidor de FTP no Raspberry Pi, que pode ser utilizado para compartilhar arquivos através de seus dispositivos. Iremos utilizar o vsFTPd, pois ele é muito estável, seguro, além de um servidor FTP muito rápido. Demonstrarei como configurar para restringir os usuários nos diretórios HOME, junto com criptografia utilizando SSL/TLS.

[ Hits: 7.215 ]

Por: Diego Mendes Rodrigues em 05/06/2021 | Blog: https://www.linkedin.com/in/diegomendesrodrigues/


Configurar um servidor FTP com o vsFTPd no Raspberry Pi



Neste artigo irei demonstrar como podemos configurar um servidor de FTP no Raspberry Pi, que pode ser utilizado para compartilhar arquivos através de seus dispositivos. Iremos utilizar o vsFTPd, pois ele é muito estável, seguro, além de um servidor FTP muito rápido. Irei também demonstrar como configurar o vsFTPd para restringir os usuários para seus diretórios HOME, junto com a criptografia de toda a conexão utilizando SSL/TLS.

Caso queira seguir esse material, você deve possuir o Raspberry Pi OS instalado no seu Raspberry Pi. A execução de um servidor FTP não requer uma interface gráfica, então recomendo a instalação do Raspberry Pi OS Lite com o serviço SSH habilitado, viabilizando o acesso remoto.

Instalar o vsFTPd no Raspberry Pi

O pacote vsftpd está disponível nos repositórios oficiais do Raspberry Pi OS, portanto pode ser instalado com os seguintes comandos:

sudo apt update
sudo apt install vsftpd

Após a instalação, o serviço do servidor de FTP será iniciado automaticamente. Para verificar o status desse serviço, execute:

sudo systemctl status vsftpd

O retorno desse comando deve retornar "Active: active (running) since ...", algo como:

vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-05-23 07:02:41 BST; 14s ago
...


Configurar o servidor FTP com o vsFTPd

A configuração do vsFTPd é realizada através do arquivo /etc/vsftpd.conf.

A maioria das configurações está bem documentada, em inglês, no arquivo de configuração. Caso você deseje avaliar todas as opções disponíveis, recomendo o site oficial em: Manpage of VSFTPD.CONF

1. Acesso ao servidor de FTP

Para garantir que apenas os usuários locais do sistema operacional possam acessar o servidor FTP, busque pelas entradas anonymous_enable e local_enable no arquivo de configuração, deixando-as da seguinte forma:

anonymous_enable=NO
local_enable=YES

2. Habilitando os uploads

Localize e descomente a configuração write_enable para permitir alterações no sistema de arquivos, habilitando o upload e a remoção dos arquivos pelos usuários:

write_enable=YES

3. Jaula chroot

Para prevenir que os usuários FTP acessem arquivos fora de sua pasta home, devemos criar uma jaula chroot, descomentando a configuração chroot_local_user:

chroot_local_user=YES

Quando a função chroot está ativa, o vsFTPd irá inviabilizar o upload de arquivos, caso o diretório do usuário esteja bloqueado.

Utilize uma das opções abaixo para deixar o ambiente chroot no modo de escrita.

Opção 1 - a forma recomendada para habilitar o upload dos arquivos e deixar o chroot ativo, configurando os diretórios do FTP. No exemplo a seguir, irei criar um diretório de ftp dentro da pasta home do usuário, que servirá como a pasta utilizada pelo chroot e habilitará o upload dos arquivos nela.

user_sub_token=$USER
local_root=/home/$USER/ftp

Opção 2 - outra alternativa é adicionar a configuração allow_writeable_chroot no arquivo vsftpd.conf. Essa opção irá habilitar a opção de escrita na pasta home dos usuários.

allow_writeable_chroot=YES

4. Conexões passivas no servidor FTP

Por padrão, o vsFTPd utiliza o modo ativo. Para utilizar o modo passivo, defina o intervalo mínimo e máximo de portas utilizado.

pasv_min_port=30000
pasv_max_port=31000

O vsFTPd pode utilizar qualquer porta no modo passivo. Quando o modo passivo é habilitado, o cliente FTP abre uma conexão em uma porta aleatória na conexão com o servidor FTP, no intervalo que você definiu no arquivo de configuração.

5. Limitar o log in para certos usuários

Podemos configurar o vsFTPd para permitir o log in de apenas alguns usuários. Para realizar essa configuração, adicione as seguintes linhas no arquivo de configurações:

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

Quando esta configuração está habilitada, você deve explicitar quais usuários poderão realizar o log in, adicionando seus user names no arquivo /etc/vsftpd.user_list, sendo um usuário por linha.

6. Transmissão segura com SSL/TLS

Para criptografar a transmissão FTP com SSL/TLS, você precisa possuir um certificado SSL e configurar o servidor FTP para utilizá-lo. Podemos utilizar um certificado SSL existente assinado por uma emissora certificada, ou criar um certificado auto assinado.

Caso você possua um domínio, ou subdomínio apontando para o IP do seu servidor FTP, pode gerar um certificado SSL gratuito utilizando o Let's Encrypt. Caso nunca tenha utilizado, segue a documentação oficial: Começando a Usar - Let's Encrypt - Certificados SSL/TLS Gratuitos

Neste artigo, iremos gerar uma chave auto assinada, utilizando o comando openssl.

Execute o comando abaixo para criar uma chave (certificado) de 2048 bits privada, auto assinada e válida por 10 anos. As chaves públicas e privadas serão armazenadas no mesmo arquivo.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Após a criação das chaves, abra novamente o arquivo de configurações do vsFTPd:

sudo nano /etc/vsftpd.conf

Encontre as configurações rsa_cert_file e rsa_private_key_file, alterando seus valores para o arquivo pem e defina a configuração ssl_enable para YES.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES

Caso essas configurações não estejam configuradas da forma correta, o servidor de FTP irá utilizar apenas o TLS para deixar as conexões seguras.

Reiniciar o servidor de FTP

Quando as configurações acima forem realizadas, o arquivo de configurações do vsFTPd deve estar desta forma (sem os comentários):

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES

Salve o arquivo e reinicie o serviço do vsFTPd para que as alterações desse arquivo tenham efeito:

sudo systemctl restart vsftpd

Abrindo o Firewall

Caso você utilize o UFW Firewall na sua distribuição, deverá liberar o tráfego FTP, abrindo as portas 20 (dados do FTP), 21 (comandos do FTP) e 30000-31000 (portas do modo passivo), através dos seguintes comandos:

sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

Agora, releia as regras do UFW, desabilitando-as e reabilitando.

sudo ufw disable
sudo ufw enable

Criar um usuário para o FTP

Para testar nosso servidor de FTP, iremos criar um usuário.
  • Caso você já tenha um usuário que será utilizado e deseja apenas liberar seu acesso, pule o primeiro passo.
  • Caso tenha definido allow_writeable_chroot=YES no seu arquivo de configuração, pule o terceiro passo.

01. Criar um usuário chamado novouserftp:

sudo adduser novouserftp

Quando solicitado, defina a senha do usuário.

02. Adicionar o usuário a lista dos que poderão utilizar o servidor de FTP.

echo "novouserftp" | sudo tee -a /etc/vsftpd.user_list

03. Criar o diretório do FTP e definir as permissões corretas.

sudo mkdir -p /home/novouserftp/ftp/upload
sudo chmod 550 /home/novouserftp/ftp
sudo chmod 750 /home/novouserftp/ftp/upload
sudo chown -R novouserftp: /home/novouserftp/ftp

Como discutido anteriormente, o usuário poderá realizar o upload de arquivos na pasta ftp/upload do seu diretório home.

Neste ponto, seu servidor FTP está totalmente funcional e você pode conectar nele utilizando clientes de FTP, como o FileZilla!

Desabilitar o acesso via shell

Por padrão, quando um usuário é criado, caso não seja realizada uma configuração adicional, este usuário possui acesso SSH ao servidor. Para desabilitar este acesso, crie um novo shell que apenas exiba uma mensagem dizendo ao usuário que essa conta está limitada apenas ao acesso via FTP.

Crie o shell /bin/ftponly e deixe-o executável.

echo -e '#!/bin/sh echo "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly

Acrescente o novo shell à lista dos shells válidos, no arquivo /etc/shells:

echo "/bin/ftponly" | sudo tee -a /etc/shells

Altere a shell do usuário criado para /bin/ftponly:

sudo usermod novouserftp -s /bin/ftponly

Utilize este último comando para todos os usuários que terão acesso apenas ao servidor FTP.

Conclusões

Espero que tenha ficado claro como instalar e configurar um servidor de FTP rápido e seguro no seu sistema Raspberry Pi.

   

Páginas do artigo
   1. Configurar um servidor FTP com o vsFTPd no Raspberry Pi
Outros artigos deste autor

Habilitar o HTTP/2 no Apache do Ubuntu 16.04/20.04

Ubuntu ou Debian com KDE Plasma

Taskwarrior, o Guerreiro das Tarefas - Gerenciar sua Lista TODO no Terminal

Listando os serviços Linux com o Systemctl

Como forçar alteração de senha de usuário no próximo login no Linux

Leitura recomendada

Instalando e configurando um Webserver

Utilizando os scripts SystemV a seu favor

Configurando servidor MikroTik com Hotspot e páginas de aviso (atraso e bloqueio)

Conexões SSH sem senha fácil e descomplicado

XFCE + Openbox no Debian e derivados

  
Comentários
[1] Comentário enviado por maurixnovatrento em 05/06/2021 - 15:37h


Ótimo artigo.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[2] Comentário enviado por Alannah358 em 12/07/2021 - 01:35h


Thanks for the update and quick reply. I'll be sure to keep an eye on this thread. https://www.imessageapp.one/ Looking for the same issue. Bumped into your thread. Thanks for creating it. Looking forward for solution.

[3] Comentário enviado por thalesX em 12/08/2021 - 09:53h

Excelente artigo..

[4] Comentário enviado por msstahelin em 24/08/2021 - 13:44h

Diego, excelente tutorial, parabéns!

Você tem ideia de como é possível implantar com certificado próprio?

Estou com dificuldade quando referencio os arquivos do meu certificado próprio.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts