2621 Views
Os serviços de FTP ainda são muito utilizados para troca de arquivos em redes. Contudo, quando o serviço de FTP não está configurado corretamente, pode criar vulnerabilidades sérias.
Existem vários servidores FTP. Dentre eles, está o vsftpd (Very Secure FTP daemon), um dos mais utilizado e considerado o mais seguro, pois é desenvolvido com foco na segurança.
Seu daemon é o vsftpd e seu arquivo de configuração é o /etc/vsftpd.conf. Uma das principais características do vsFTPd é criar um ambiente chroot quando um usuário entra no sistema via FTP, sem necessidade de preparar uma árvore de diretórios especifica para isso.

As configurações são simples e dificilmente é necessário alterar o padrão. Se o vsftpd não for utilizado através do Systemd, a opção listen=YES deve estar presente no arquivo /etc/vsftpd.conf.
Características do vsftpd
Além da segurança, estabilidade e velocidade, o vsftpd ainda possui as seguintes características:
- Suporte a IPs virtuais;
- Suporte a usuários virtuais;
- Pode ser executado sob demanda, a partir do inetd ou xinetd, ou como um processo à parte (standalone);
- Suporte à limitação de consumo de banda;
- Configuração por IP de origem;
- Limite de conexões por endereço IP;
- Suporte a Ipv6;
- Suporte à criptografia através de integração com SSL.
- Instalação do vsftpd
Instalação do vsftpd
Sua instalação é muito simples, basta executar o seguinte comando com root:
Em sistema baseados em Debian
apt install vsftpd
Em sistemas baseados em Red Hat
yum install vsftpd
Em SUSE Linux
zypper install vsftpd
Logo após a instalação, o serviço inicializa automaticamente. Caso queira confirmar, execute:

E verifique se a porta 21 está listening:

Com isso já é possível fazer um teste de conexão usando um usuário local. Basta executar no terminal:
ftp localhost
Será solicitado usuário e senha local. No meu caso, usei um usuário de testes:


Note que a conexão foi bem sucedida, porém, ao tentar enviar um arquivo com o comando put meuTeste.txt
, retornou um erro de permissão.
Isso ocorre porque a configuração padrão não permite gravação, só leitura. Para conseguirmos gravar, é preciso acrescentar write_enable=YES
no arquivo de configuração e reiniciar o serviço com systemctl restart vsftpd
.
Feito isso, a gravação de arquivos estará liberada:

Configuração do vsftpd
A seguir veremos uma configuração exemplo já parametrizada do serviço:
vsftpd.conf #/etc/vsftpd.conf #Libera ftpd anônimo. anonymous_enable=NO [word_balloon id="6" size="M" position="L" name_position="under_avatar" radius="true" balloon="twin_t" balloon_shadow="true"]O valor recomendado para anonymous_enable é sempre <strong>NO</strong>. Isso é muito importante.<br>[/word_balloon] #Permite que os usuários locais efetuem o login. local_enable=YES #Permite que os usuários gravem em seus diretórios pessoais. write_enable=YES #Habilita a exibição de mensagens para os usuários remotos quando entrarem #nos diretório. Para que a mensagem seja mostrada, é necessário criar um #arquivo .message com o conteúdo da mensagem dentro de cada diretório. dirmessage_enable=YES #Ativa o log de todos os downloads e uploads. xferlog_file=/var/log/vsftpd.log #Permite conexões na porta 20(ftp-dados). connect_from_port_20=YES #Define o tempo de desconexão automática por inatividade. idle_session_timeout=600 #Define que o usuário logado deve ficar preso em seu diretório pessoal chroot_local_user=YES #Permite que seja utilizada uma lista com os usuários que não ficaram presos #no seu diretório pessoal. chroot_list_enable=YES #Lista com os usuários que poderam sair do HOME. chroot_list_file=/etc/vsftpd/chroot-list
Na relação a seguir, temos as várias opções que podem ser utilizadas no arquivo de configuração do vsftpd e a descrição detalhada das que estão no exemplo acima:
anonymous_enable=NO:
Impede o login anônimo. Se seu servidor de FTP for público, o valor deve ser YES.
local_enable=YES
Isto permite que os usuários locais efetuem o login. Útil para um servidor privado (nosso caso) como o de um ISP.
write_enable=YES
Permite que esses usuários escrevam em suas pastas por FTP.
local_umask=022
Define as permissões dos arquivos depois do upload. O padrão é 077 (octal), escrita e leitura somente pelo dono.
anon_upload_enable=NO
Ativa o upload anônimo. Este valor deve ser YES se o servidor de FTP for público.
anon_mkdir_write_enable=NO
Ativa a criação de pastas por usuários anônimos.
dirmessage_enable=YES
Permite que o conteúdo do arquivos .message seja exibido caso exita no diretório atual. Um bom uso deste recuso é criar o arquivo .message (o conteúdo deve ser texto puro) e colocar informações sobre a pasta atual.
xferlog_enable=YES
Ativa o log detablhado, que inclui log de upload e download.
connect_from_port_20=YES
Permite conexões na porta 20 (ftp-dados).
chown_uploads=YES
Se esta opção estiver habilitada, cada upload de arquivo executado pelo usuário anônimo terá automaticamente, como dono do arquivo, o usuário especificado na opção chown_username. Não é recomendado que seja feito upload com o usuário root
chown_username=whoever
Permite especificar qual usuário será o dono dos arquivos que forem enviados para o servidor (upload) pelo usuários anônimo.
xferlog_file=/var/log/vsftpd.log
Pode ser especificado em qual arquivo serão registrados os logs do serviço vsftpd. O padrão é /var/log/vsftpd.log.
xferlog_std_format=YES
Se estiver habilitado, o arquivo de log será gerado no formato padrão do ftpd xferlog.
idle_session_timeout=1800
Define o tempo de desconxão automática por inatividade.
data_connection_timeout=120
Tempo permitido de ociosidade (em segundos) em uma conexão antes que o cliente remoto seja desconectado.
nopriv_user=ftpsecure
Esta opção é recomendada para definir um usuário único do sistema, o qual será utilizado pelo servidor FTP que seja totalmente isolado e sem privilégios. Geralmente escolhe-se o usuário nobody.
userlist_enable=YES
Com esta opção ativada, o vsftpd irá carregar uma lista de nome de usuários a partir do arquivo especificado em userlist_file. Se o usuário tentar conectar usando um nome da lista, ele será PROIBIDO de fazer o login. Mesmo digitando a senha corretamente, terá um retorno de erro de acesso.
userlist_deny=YES
Esta opção só será examinada userlist_enable estiver ativada. Ela faz com que os usuários da lista userlist_file sejam negados antes mesmo de solictar a senha. Isso serve para impedir login com senhas nulas, chamadas de cleartext (texto puro).
userlist_file=/etc/vsftpd.user_list
Nesta opção pode ser especificado um arquivo, o qual conterá o nome dos usuários a serem negados pela opção userlist_enable.
check_shell=YES
NOTA: Esta opção só funciona caso não se utilize autenticação via PAM paravsftpd. Se desabilitada, vsftpd não ira checar o /etc/shells para saber se o shell do usuário é válido para conexões locais.
async_abor_enable=YES
Quando esta opção é habilitada, um comando do FTP conhecido como async ABOR é ativado. Alguns clientes de FTP mais antigos podem apresentar problemas se esta opção não estiver habilitada, porém ela representa um futo na segurança.
ascii_upload_enable=YES
Quando habilitada, o modo ASCII de transferência de dados é ativado para uploads.
ascii_download_enable=YES
Quando habilitada, o modo ASCII de transferência de dados é ativado para downloads.
fptd_banner=Bem Vindo ao FTP
O banner de boas vindas, quando é feito login no servidor FTP, pode ser personalizado.
deny_email_enable=YES
Endereços de e-mails anônimos podem ser desabilitados, ou seja, isso proibirá o login de usuários que possuem esse endereços. Prático para combater ataques do tipo DOS.
banned_email_file=/etc/vsftpd.banned_emails
Esta opção anda em conjunto com a deny_email_enable. Pode-se especificar um arquivo onde estarão listados os endereços de e-mails que serão banidos.
chroot_local_user=YES
Define que o usuário conectado deve ficar preso num diretório raiz. Esta opção é útil em servidores de hospedagem.
chroot_list_enable=YES
Habilita uma lista de usuários que estarão presos em um diretório raiz.
chroot_list_file=/etc/vsftpd.chroot_list
Esta opção define qual é o arquivo que irá conter a lista de usuários para chroot.
listen=YES
Define a execução do vsftpd em modo standalone. Se definido como YES, requer background=YES. Se for iniciado pelo xinetd, deve ficar no NO.
text_userdb_names=YES
Ativa a exibição dos nomes de usuários e grupos nas listagens de arquivos e diretório. Se definido como NO serão exibidos do IDs.
use_localtime=YES
Determina a exibição das datas em local time zone.
ls_recurse_enable=YES
Esta opção habilita a utilização do comando ls -R. Não é muito útil já que isso, em grandes diretórios, pode consumir muito recurso.
Segurança
Por questões de segurança, pode-se evitar que determinados usuários conectem via FTP.
userlist_enable=YES
Se esta opção for ativada o vsftpd lerá uma lista de nomes que está na opção do userlist_file(/etc/vsftpd/ftpdusers)
. Se o usuário tentar acessar o sistema e estiver incluído nesse arquivo, terá seu acesso negado antes que sua senha seja solicitada.
Subindo o serviço
Como vimos, o vsftpd se integra ao Systemd. Para iniciar o serviço, basta subir seu daemon com o comando abaixo:
systemctl start vsftpd

systemctl enable vsftpd
.É isso. Espero que o conteúdo seja útil para os amigos e, em caso de dúvidas, fico a disposição em minhas redes sociais.
Abraços e até a próxima.