UP | HOME

LPI-2 202-450 Topico 212.2
Segurança de servidores FTP

Índice

212.2 Segurança de servidores FTP - Objetivos

Peso 2

O candidato deve ser capaz de configurar um servidor FTP para download e upload anônimo. Este objetivo inclui as precauções necessárias quando upload anônimo é permitido e com as configurações de acesso de usuários.

Conhecimentos-chave:

Lista parcial dos arquivos, termos e ferramentas utilizados:

  • vsftpd.conf;
  • Opções de linha de comando importantes do Pure-FTPd.

212.2 Segurança de servidores FTP - Conteúdo

O que é o FTP?

FTP (File Transfer Protocol ou protocolo de transferência de arquivo em tradução nossa) é uma ferramenta tradicional e largamente utilizada para transferência de arquivos entre servidores e clientes em uma rede de computadores, principalmente quando não há necessidade de autenticação pois o FTP permite que clientes anônimos tenham acesso aos arquivos armazenados. Devemos entender que o FTP não é seguro por padrão pois ele permite que as credenciais os dados dos usuários trafeguem sem criptografia.

Quando estivermos planejando usar o FTP, devemos considerar configurar a conexão FTP com SSL/TLS. Caso contrário, é sempre melhor usar um FTP seguro, como o vsftpd (Very Secure FTP ou FTP verdadeiramente seguro em tradução nossa).

Portas do FTP

O FTP é um serviço exclusivamente TCP, não tendo nenhum componente trafegando em UDP. Mesmo assim o FTP é um serviço incomum, pois utiliza duas portas, uma porta de dados e uma porta de comandos (também conhecida como porta de controle). Tradicionalmente, são a porta 21 para a porta de comandos e a porta 20 para a porta de dados. A confusão começa, porém, quando descobrimos que dependendo do modo a porta de dados nem sempre está na porta 20!

FTP ativo vs FTP passivo

Os dados são transferidos através de canais de dados separados, mas a porta varia dependendo do modo FTP utilizado. Existem 2 modos para o FTP:

Modo Ativo

No modo FTP ativo:

  1. o cliente inicia a conexão com uma porta randômica (acima da 1023) com destino a porta de comando do servidor FTP (porta 21). Depois o cliente começa a ouvir uma porta que será N+1 ou seja o número da porta que ele utilizou para iniciar a comunicação incrementada de 1 e envia para a porta de comando do servidor FTP o comando PORT N+1.
  2. O Servidor confirma para o cliente que irá conectar na porta de dados especificada pelo cliente com um ACK.
  3. O servidor iniciará a conexão no cliente através dessa porta especificada a partir de sua porta de dados (porta 20) criando um canal de dados.
  4. O cliente responde com um ACK.

Toda essa negociação pode causar problemas se houver um roteador ou firewall desempenhando NAT no meio do caminho.

ftp-active.png

Figura 1: Diagrama FTP modo Ativo

Na configuração do firewall do lado do servidor, para suportar o modo ativo do FTP, os seguintes canais de comunicação precisam ser abertos:

  • O servidor FTP pode ouvir a porta 21 para qualquer origem (cliente inícia a conexão);
  • O servidor FTP pode originar conexões a partir da porta 21 com destino a portas maiores que a 1023 (o servidor poderá responder a porta de controle dos clientes);
  • O servidor FTP pode originar conexões a partir da porta 20 com destino a portas maiores que a 1023 (o servidor poderá iniciar conexões com destino a porta de dados dos clientes);
  • O servidor FTP pode receber conexões com destino a porta 20 originadas de portas maiores que a 1023 (os clientes enviando ACKs para a porta de dados do servidor).
Modo Passivo (PASV)

Para resolver o problema de o servidor iniciar a conexão com o cliente um metodo diferente para as conexões FTP foi desenvolvido. Ele é conhecido como modo passivo, ou PASV, e é ativado apenas após o cliente enviar um comando para o servidor solicitando que a comunicação seja em podo passivo.

No modo FTP Passivo o cliente inicia ambas as conexões com o servidor, resolvendo o problema dos firewalls que filtram a conexão da porta de dados de entrada para o cliente a partir do servidor. No caso ao abrir uma conexão FTP:

  1. o cliente abre duas portas não privilegiadas randômicas localmente (N > 1023 e N + 1). A primeira porta contata o servidor na porta 21 mas em vez de emitir um comando PORT e permitir que o servidor se conecte de volta à sua porta de dados, o cliente emitirá o comando PASV;
  2. O resultado disso é que o servidor não usará sua porta de dados (porta 20) e abrirá uma porta aleatória sem privilégios (P > 1023) e envia P de volta ao cliente em resposta ao comando PASV.
  3. O cliente então inicia a conexão da porta N + 1 à porta P no servidor iniciando o canal de dados.
  4. O servidor responde com um ACK.

ftp-pasive.png

Figura 2: Diagrama FTP modo Passivo

Na configuração do firewall no lado do servidor, para suportar o modo FTP passivo os seguintes canais de comunicação devem ser abertos:

  • O servidor FTP pode ouvir a porta 21 para qualquer origem (cliente inícia a conexão);
  • O servidor FTP pode originar conexões a partir da porta 21 com destino a portas maiores que a 1023 (o servidor poderá responder a porta de controle dos clientes);
  • O Servidor FTP pode ouvir qualquer porta acima da 1023 com origem de qualquer lugar (o cliente poderá iniciar a conexão com destino a porta randômica apontada pelo servidor após o comando PASV);
  • O Servidor poderá enviar pacotes a partir de portas acima da porta 1023 com destino a qualquer endereço para portas acima da 1023 (o servidor poderá enviar ACKs e dados para a porta de dados dos clientes).

Resumo

Para resumir o assunto dos módulos do FTP:

FTP Ativo
  • Portas de comando: client:">1023" → server:21
  • Portas de dados: server:20 → client:">1023"
FTP Passivo
  • Portas de comando: client:">1023" → server:21
  • Portas de dados: client:">1023" → server:">1023"

Very Secure FTP (vsftp)

O vsftpd é um servidor FTP leve, estável e seguro para sistemas UNIX-like.

O nome do pacote a instalar quando usado o CentOS7 é vsftpd. Após instalado o setup inicial que vem com o pacote é suficiente para iniciar o serviço.

Arquivos instalados com o vsftpd

Os arquivos de configuração do vsftp ficam no diretório /etc/vsftpd

┌─[root@centos7lpi]──[00:36]──[~]
└─[99]─># ls -l /etc/vsftpd/
total 20
-rw-------. 1 root root  125 Jun  9  2021 ftpusers
-rw-------. 1 root root  361 Jun  9  2021 user_list
-rw-------. 1 root root 5116 Jun  9  2021 vsftpd.conf
-rwxr--r--. 1 root root  338 Jun  9  2021 vsftpd_conf_migrate.sh
/etc/vsftpd/user_list

Este arquivo pode ser configurado para negar ou permitir acesso aos usuários listados, dependendo se a diretiva userlist_deny está definida como YES (padrão) ou NO no arquivo /etc/vsftpd/vsftpd.conf. Se /etc/vsftpd/user_list for usado para conceder acesso aos usuários, os nomes de usuários listados não devem aparecer em /etc/vsftpd/ftpusers.

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
/etc/vsftpd/ftpusers

Uma lista de usuários que não têm permissão para fazer login no vsftpd. Por padrão, esta lista inclui os usuários root, bin e daemon, entre outros.

Esse arquivo é usado pelo módulo PAM do vsftpd /etc/pam.d/vsftpd.

# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
/etc/pam.d/vsftpd

O arquivo de configuração do Pluggable Authentication Modules (PAM) para vsftpd. Este arquivo define os requisitos que um usuário deve atender para fazer o login no servidor FTP. (Já falamos sobre isso anteriormente no tópico sobre o PAM - 210.2).

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth
/etc/vsftpd/vsftpd.conf

É o principal arquivo de configuração do vsftpd. É um arquivo bem documentado com uma grande quantidade de texto explicando o uso das diretivas ali contidas. Porém por padrão poucas diretivas vem setadas pelo instalador.

┌─[root@centos7lpi]──[00:49]──[~]
└─[106]─># wc -l /etc/vsftpd/vsftpd.conf 
128 /etc/vsftpd/vsftpd.conf
┌─[root@centos7lpi]──[00:53]──[~]
└─[107]─># grep -v ^# /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

Das diretivas disponíveis segue uma listagem das mais importantes:

anonymous_enable
Quando habilitada ela permite que usuários anônimos possam logar. Os usernames anonymous e ftp serão aceitos. O valor padrão para essa diretiva é YES;
anon_upload_enable
Quando habilitada em conjunto da diretiva write_enable usuários anônimos poderão enviar arquivos a um diretório raiz (do FTP) que tenha permissões de escrita. O valor padrão é NO;
local_enable
Quando habilitada usuários locais terão permissão de logar no sistema. O valor padrão é YES;
write_enable
Quando habilitada os comandos FTP que podem alterar o sistema de arquivos são permitidos, como DELE, RNFR, e STOR. O valor padrão é YES;
local_umask
Define o umask usado para criação de arquivos. Note que esse valor deve ser definido no formato octal incluindo o prefixo 0;
anon_mkdir_write_enable
Quando habilitada em conjunto com write_enable usuários anônimos terão permissão de criar novos subdiretórios em um diretório raiz com permissão de escrita;
dirmessage_enable
Quando habilitada, uma mensagem será apresentada sempre que um usuário entrar em um diretório com um arquivo contendo um arquivo de mensagem. Esta mensagem reside no diretório atual. O nome desse arquivo é especificado na diretiva message_file que por padrão é .message;
connect_from_port_20
Quando habilitada, o vsftpd é executado com privilégios suficientes para abrir a porta 20 no servidor durante as transferências de dados no modo ativo. Desativar esta diretiva permite que o vsftpd seja executado com menos privilégios, mas pode ser incompatível com alguns clientes FTP.
pam_service_name
Define o nome do serviço do vsftpd no PAM. O valor padrão é ftp. Note que no Fedora e CentOS o valor padrão é vsftpd;
userlist_enable
Quando habilitada os usuários listados no arquivo especificado na diretiva userlist_file terão o acesso negado. Como o acesso é negado antes que uma senha seja solicitada ao cliente, os usuários constantes no arquivo serão impedidos de enviar senhas não cifradas pela rede;
ftpd_banner
Quando habilitada a string especificada nessa diretiva é mostrada quando uma conexão é estabelecida no servidor. Essa diretiva pode ser sobrescrita pela diretiva banner_file. Por padrão o vsftpd mostra seu próprio banner padrão;
banner_file
define o arquivo que contém um texto a ser utilizado como banner toda vez que uma conexão com esse servidor for estabelecida, esta diretiva sobrescreve qualquer valor definido na diretiva ftpd_banner;
anon_max_rate
define o valor máximo de largura de banda em bytes que um usuário anônimo pode utilizar. O valor padrão é 0 o qual informa que não há limite de banda;
tcp_wrappers
se habilitada e o vsftpd foi compilado com o suporte a tcp-wrappers, as conexões de entrada serão tratadas através do controle de acesso tcp-wrappers. Além disso, existe um mecanismo para configuração baseada em IP. Se tcp_wrappers definir a variável de ambiente VSFTPD_LOAD_CONF, a sessão vsftpd tentará carregar o arquivo de configuração vsftpd especificado nessa variável. O valor padrão é YES;
local_root
define o diretório pra o qual o vsftpd mudará depois que um usuário local efetua login. Não há valor padrão para essa diretiva;
anon_root
define o diretório para o qual o vsftpd mudará depois que um usuário anônimo se loga. Não há valor padrão para essa diretiva.
ftp_username
especifica o usuário que o vsftpd irá utilizar para escrever no disco no caso de conexões de usuários anônimos.

Comandos de cliente FTP

O programa padrão para cliente de FTP é o cliente de FTP original. Ele vem como padrão na maioria das distribuições GNU/Linux. A primeira vez que ele foi apresentado foi no sistema BSD-4.2 desenvolvido pela Universidade de Berkeley na Califórnia.

Vamos explanar um pouco do uso do cliente de FTP.

  • Iniciar a conexão com um servidor FTP

    ftp infralinux.com.br
    ftp 192.168.38.13
    ftp user@infralinux.com.br
    

    Na maioria dos servidores FTP o login de usuários nominais é protegido por senhas, logo o servidor no início da seção irá solicitar a entrada de usuário e senha. Se você quiser conectar como usuário anônimo você deve utilizar o username anonymous ou ftp e deixar o campo de senha em branco.

  • Listando diretórios e visualizando suas permissões

    $ ftp 10.152.240.45
    Connected to 10.152.240.45.
    220 (vsFTPd 3.0.2)
    Name (10.152.240.45:jeremias): anonymous
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
    226 Directory send OK.
    
    ## -- Ativando o modo passivo
    ftp> passive
    Passive mode on.
    ftp> ls
    227 Entering Passive Mode (10,152,240,45,110,53).
    150 Here comes the directory listing.
    drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
    226 Directory send OK.
    
  • Mudando de diretório

    ftp> cd /home
    250 Directory successfully changed.
    
  • Baixando arquivos com FTP

    Antes de baixar um arquivo com o ftp podemos mudar para o diretório no computador local onde queremos colocar o arquivo utilizando o comando lcd (local change directory):

    lcd /home/jeremias/downloads

    Se não fizermos isso o FTP irá baixar o arquivo no diretório onde o cursor estava no momento em que chamamos o ftp.

    Para finalmente baixar o arquivo usamos o comando get:

    get arquivo.txt

  • Enviar arquivos para o FTP

    put arquivo.txt

  • Enviar múltiplos arquivos para o FTP

    mput *.txt

  • Sair do FTP

    bye

    exit

    quit

Pureftpd

O Pure-FTPd é um servidor FTP Open-Source (licença BSD) com um forte foco em segurança de software. Ele pode ser instalado em uma grande variedade de sistemas UNIX-like mas é comumente utilizado em sistemas da família Debian, nesses sistemas o nome do pacote é pure-ftpd.

Após instalado haverá o seguinte diretório abaixo de /etc

┌─[root@debianlpi]──[09:49]──[~]
└─[89]─># tree /etc/pure-ftpd/
/etc/pure-ftpd/
├── auth
│   ├── 65unix -> ../conf/UnixAuthentication
│   └── 70pam -> ../conf/PAMAuthentication
├── conf
│   ├── AltLog
│   ├── FSCharset
│   ├── MinUID
│   ├── NoAnonymous
│   ├── PAMAuthentication
│   ├── PureDB
│   ├── TLSCipherSuite
│   └── UnixAuthentication
├── db
├── pure-ftpd.conf
└── pureftpd-dir-aliases

3 directories, 12 files

O PureFTPd não é um servidor FTP baseado em configuração, tente dar um cat /etc/pure-ftpd/pure-ftpd.conf. Essa configuração é para um serviço em segundo plano que está fora do escopo do exame LPIC2.

Primariamente o PureFTPd é um software orientado pela configuração feita em linha de comando. Existem alguns itens que são configurados por padrão quando iniciamos o PureFTPd como um seriço. Vamos dar uma olhada nesses itens e alguns itens adicionais que são necessários para o exame LPIC2.

Para iniciar o trabalho com o PureFTPd execute a seguinte chamada para o comando:

pure-ftpd -B -S localhost,21 -e

Sendo:

-B
inicia o PureFTPd no modo background tal como um daemon;
-S
especifica para o PureFTPd escutar para um hostname específico e em uma porta, útil quando precisamos subir múltiplas instâncias do PureFTPd;
-e
habilita o logon de usuários anônimos.

Além das opções acima também é útil conhecer:

-c
número total de conexões simultâneas;
-C
número máximo de conexões simultâneas a partir de um mesmo host;
-E
desabilita o acesso de usuários anônimos;
-M
permite que usuários anônimos criem diretórioas;
-I
define o tempo máximo de ociosidade de uma seção.
pure-ftpd v1.0.47 [privsep]

-0      --notruncate    
-1      --logpid        
-2      --certfile      <opt>
-4      --ipv4only      
-6      --ipv6only      
-8      --fscharset     <opt>
-9      --clientcharset <opt>
-A      --chrooteveryone        
-a      --trustedgid    <opt>
-b      --brokenclientscompatibility    
-B      --daemonize     
-C      --maxclientsperip       <opt>
-c      --maxclientsnumber      <opt>
-d      --verboselog    
-D      --displaydotfiles       
-e      --anonymousonly 
-E      --noanonymous   
-f      --syslogfacility        <opt>
-F      --fortunesfile  <opt>
-g      --pidfile       <opt>
-G      --norename      
-h      --help  
-H      --dontresolve   
-I      --maxidletime   <opt>
-i      --anonymouscantupload   
-j      --createhomedir 
-K      --keepallfiles  
-k      --maxdiskusagepct       <opt>
-l      --login <opt>
-L      --limitrecursion        <opt>
-M      --anonymouscancreatedirs        
-m      --maxload       <opt>
-N      --natmode       
-n      --quota <opt>
-o      --uploadscript  
-O      --altlog        <opt>
-p      --passiveportrange      <opt>
-P      --forcepassiveip        <opt>
-q      --anonymousratio        <opt>
-Q      --userratio     <opt>
-r      --autorename    
-R      --nochmod       
-s      --antiwarez     
-S      --bind  <opt>
-t      --anonymousbandwidth    <opt>
-T      --userbandwidth <opt>
-U      --umask <opt>
-u      --minuid        <opt>
-V      --trustedip     <opt>
-w      --allowuserfxp  
-W      --allowanonymousfxp     
-x      --prohibitdotfileswrite 
-X      --prohibitdotfilesread  
-y      --peruserlimits <opt>
-Y      --tls   <opt>
-J      --tlsciphersuite        <opt>
-z      --allowdotfiles 
-Z      --customerproof

ProFTPd

O ProFTPd é um servidor FTP em software livre (GPL) e é um dos mais usados, seguros e confiáveis disponíveis para sistemas operacionas UNIX-like, devido aos seus arquivos de configuração simples, velocidade e fácil configuração (no CentOS).

No CentOS o nome do pacote a instalar é proftpd. E após de instalado ele criará o arquivo /etc/proftpd.conf já nos sistemas da família Debian ele criará o diretório /etc/proftpd/ que conterá os arquivos de configuração.

Nos dois modos sua configuração é bastante amigável pois seu arquivo de configuração segue o formato dos arquivos de configuração do Apache.

E isso é tudo para os requisitos do exame LPIC2.

Recomendação de uso dos servidores FTP

  • Se você precisa de um servidor FTP escalável para muitos usuários utilize o vsftpd;
  • Se você precisa subir um servidor FTP simples e seguro para alguns poucos usuários utilize o PureFTPd;
  • Porém se você precisa de um servidor FTP com configurações mais flexível e amigável para módulos externos use o ProFTPd.

Autor: Jeremias Alves Queiroz

Criado em: 2021-12-19 dom 13:07

Valid XHTML 1.0 Strict