LPI-2 202-450 Topico 212.2
Segurança de servidores FTP
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:
- Arquivos de configuração e ferramentas do Pure-FTPd e vsftpd;
- Conhecimento do ProFTPd;
- Entendimento de conexões FTP passivas e ativas.
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:
- 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 de1
e envia para a porta de comando do servidor FTP o comandoPORT N+1
. - O Servidor confirma para o cliente que irá conectar na porta
de dados especificada pelo cliente com um
ACK
. - 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.
- 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.
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).
- 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á
- 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:
- o cliente abre duas portas não privilegiadas randômicas
localmente (
N > 1023
eN + 1
). A primeira porta contata o servidor na porta 21 mas em vez de emitir um comandoPORT
e permitir que o servidor se conecte de volta à sua porta de dados, o cliente emitirá o comandoPASV
; - 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 enviaP
de volta ao cliente em resposta ao comandoPASV
. - O cliente então inicia a conexão da porta
N + 1
à portaP
no servidor iniciando o canal de dados. - O servidor responde com um
ACK
.
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).
- o cliente abre duas portas não privilegiadas randômicas
localmente (
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"
- Portas de comando:
- FTP Passivo
- Portas de comando:
client:">1023" → server:21
- Portas de dados:
client:">1023" → server:">1023"
- Portas de comando:
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
eftp
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
, eSTOR
. 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 prefixo0
; 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 ambienteVSFTPD_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
ouftp
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.