Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalando_e_configurando_o_vsftpd_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== VsFTPd (Very Secure FTP daemon) ======
  
 +Os serviços de http://​pt.wikipedia.org/​wiki/​File_Transfer_Protocol FTP ainda são uns dos mais utilizados para troca de arquivos em redes privadas e públicas. Contudo, quando não configurados corretamente,​ podem conter certas vulnerabilidades.
 +
 +Existem vários servidores **FTP**. Dentre eles, o mais utilizado e considerado o mais seguro é o **vsftpd(Very Secure FTP daemon),​**desenvolvido com enfoque 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.
 +
 +Em primeiro lugar, é necessário criar o diretório base para o **FTP,** geralmente **/​home/​ftp** ou **/​var/​ftp.** Este diretório deve pertencer ao usuário root, e não ter permissão de escrita para o usuário ftp. Caso contrário o **vsftpd** informará que existe uma brecha de segurança não funcionará corretamente.
 +
 +As configurações são simples e dificilmente é necessário alterar o padrão. Se o **vsftpd** nào for utilizado através do **initd** ou **xinetd,** 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**
 +
 +Como servidor **FTP,** será usando o vsftpd. Sua instalação é muito simples, basta executar o seguinte comando:
 +
 +Em sistema baseados em Debian
 +
 +<sxh bash>
 +
 +aptitude install vsftpd -y
 +</​sxh>​
 +
 +Em sistemas baseados em Red Hat
 +
 +<sxh bash>
 +
 +yum install vsftpd
 +</​sxh>​
 +
 +Em Gentoo Linux
 +<sxh bash>
 +
 +emerge vsftpd
 +</​sxh>​
 +
 +Em Slackware
 +<sxh bash>
 +
 +slackpkg install vsftpd
 +</​sxh>​
 +
 +Em SUSE Linux
 +<sxh bash>
 +
 +zypper install vsftpd
 +</​sxh>​
 +
 +Em Mandriva Linux
 +<sxh bash>
 +
 +urpmi vsftpd
 +</​sxh>​
 +
 +Em !ArchLinux
 +<sxh bash>
 +pacman -S vsftpd ​
 +</​sxh>​
 +
 +Em Sabayon
 +<sxh bash>
 +
 +equo install vsftpd
 +</​sxh>​
 +
 +Poderão ocorrer algumas solicitações de remoção de pacotes de outros **FTPs** por questões de conflitos, mas pode-se perfeitamente seguir adiante.
 +
 +**Configuração do vsftpd**
 +
 +A configuração do **vsftpd** é feita no arquivo **/​etc/​vsftpd/​vsftpd.conf.** Logo abaixo, um exemplo:
 +
 +<sxh bash>
 +
 +#/​etc/​vsftpd.conf
 + 
 +#Libera ftpd anônimo.
 +anonymous_enable=YES
 + 
 +#Permite que os usuários locais efetuem o login.
 +local_enable=YES
 + 
 +#Permite que os usuários gravem sem seus diretórios pessoais.
 +write_enable=YES
 + 
 +#Usuários que será utilizado para acesso anônimo.
 +nopriv_user=ftp
 + 
 +#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 od 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
 +
 +### FOR NAT
 +pasv_enable=YES
 +pasv_min_port=12000
 +pasv_max_port=12100
 +
 +</​sxh>​
 +
 +Na tabela abaixo, há uma relação de 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:
 +
 +^**Opção**^**Significado**^
 +|**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** esteja 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.**
 +
 +<sxh bash>
 +
 +userlist_enable=YES
 +</​sxh>​
 +
 +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 tenta acessar o sistema tiver o nome nesse arquivo, terá seu acesso negado antes que sua senha seja perguntada.
 +
 +**Levantando o serviço**
 +
 +Terminada a configuração,​ pode ser ativado o serviço de **FTP** a partir do serviço **xinetd.**
 +
 +<sxh bash>
 +
 +/​etc/​init.d/​vsftpd restart
 +</​sxh>​
 +
 +**ou**
 +
 +<sxh bash>
 +
 +/​etc/​rc.d/​vsftpd restart
 +</​sxh>​
 +
 +**Rodando FTP sob Demanda com Xinet**
 +
 +O serviço **FTP** pode ser adicionado ao Xinet de forma que seja sob demanda. Para isso, basta desativar as opções de standalone do serviço em**/​etc/​vsftpd/​vsftpd.conf,​** mudando as opções para **NO.**
 +
 +<sxh bash>
 +
 +#​Habilitando para trabalhar em modo Standalone
 +listen=NO
 +tcp_wrappers=NO
 +</​sxh>​
 +
 +Parar o serviço de **FTP**
 +
 +<sxh bash>
 +
 +/​etc/​init.d/​vsftpd stop
 +</​sxh>​
 +
 +**ou**
 +
 +<sxh bash>
 +
 +/​etc/​rc.d/​vsftpd stop
 +</​sxh>​
 +
 +No arquivo **/​etc/​xinetd.d/​vsftp,​** colocar em **no** a opção disable.
 +
 +<sxh bash>
 +
 +vim /​etc/​xinetd.d/​vsftp
 +service ftp
 +{
 +    disable ​        = no
 +    socket_type ​    = stream
 +    wait            = no
 +    user            = root
 +    server ​         = /​usr/​sbin/​vsftpd
 +    server_args ​    = /​etc/​vsftpd/​vsftpd.conf
 +    nice            = 10
 +    per_source ​     = 5
 +    instances ​      = 200
 +    log_on_success += PID host DURATION
 +    log_on_failure += host
 +    flags           = IPv4
 +}
 +</​sxh>​
 +
 +Vamos agora reiniciar o **xinetd:**
 +
 +<sxh bash>
 +
 +/​etc/​init.d/​xinetd restart
 +</​sxh>​
 +
 +**ou**
 +
 +<sxh bash>
 +
 +/​etc/​rc.d/​xinetd restart
 +</​sxh>​
 +
 +Agora a escolha é do usuário trabalhar em standalone ou xinet.
 +
 +
 +====== Arquivo de exemplo do CentOS 6.4 ======
 +
 +Arquivo de exemplo do vsftpd configuração do padrão do CentOS 6.4
 +
 +<sxh bash>
 +# Example config file /​etc/​vsftpd/​vsftpd.conf
 +#
 +# The default compiled in settings are fairly paranoid. This sample file
 +# loosens things up a bit, to make the ftp daemon more usable.
 +# Please see vsftpd.conf.5 for all compiled in defaults.
 +#
 +# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
 +# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd'​s
 +# capabilities.
 +#
 +# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
 +anonymous_enable=no
 +#
 +# Uncomment this to allow local users to log in.
 +local_enable=YES
 +#
 +# Uncomment this to enable any form of FTP write command.
 +write_enable=YES
 +#
 +# Default umask for local users is 077. You may wish to change this to 022,
 +# if your users expect that (022 is used by most other ftpd'​s)
 +local_umask=022
 +#
 +# Uncomment this to allow the anonymous FTP user to upload files. This only
 +# has an effect if the above global write enable is activated. Also, you will
 +# obviously need to create a directory writable by the FTP user.
 +#​anon_upload_enable=YES
 +#
 +# Uncomment this if you want the anonymous FTP user to be able to create
 +# new directories.
 +#​anon_mkdir_write_enable=YES
 +#
 +# Activate directory messages - messages given to remote users when they
 +# go into a certain directory.
 +dirmessage_enable=YES
 +#
 +# The target log file can be vsftpd_log_file or xferlog_file.
 +# This depends on setting xferlog_std_format parameter
 +xferlog_enable=YES
 +#
 +# Make sure PORT transfer connections originate from port 20 (ftp-data).
 +connect_from_port_20=YES
 +#
 +# If you want, you can arrange for uploaded anonymous files to be owned by
 +# a different user. Note! Using "​root"​ for uploaded files is not
 +# recommended!
 +#​chown_uploads=YES
 +#​chown_username=whoever
 +#
 +# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
 +# WARNING - changing this filename affects /​etc/​logrotate.d/​vsftpd.log
 +xferlog_file=/​var/​log/​xferlog
 +#
 +# Switches between logging into vsftpd_log_file and xferlog_file files.
 +# NO writes to vsftpd_log_file,​ YES to xferlog_file
 +xferlog_std_format=YES
 +#
 +# You may change the default value for timing out an idle session.
 +#​idle_session_timeout=600
 +#
 +# You may change the default value for timing out a data connection.
 +#​data_connection_timeout=120
 +#
 +# It is recommended that you define on your system a unique user which the
 +# ftp server can use as a totally isolated and unprivileged user.
 +#​nopriv_user=ftpsecure
 +#
 +# Enable this and the server will recognise asynchronous ABOR requests. Not
 +# recommended for security (the code is non-trivial). Not enabling it,
 +# however, may confuse older FTP clients.
 +#​async_abor_enable=YES
 +#
 +# By default the server will pretend to allow ASCII mode but in fact ignore
 +# the request. Turn on the below options to have the server actually do ASCII
 +# mangling on files when in ASCII mode.
 +# Beware that on some FTP servers, ASCII support allows a denial of service
 +# attack (DoS) via the command "SIZE /​big/​file"​ in ASCII mode. vsftpd
 +# predicted this attack and has always been safe, reporting the size of the
 +# raw file.
 +# ASCII mangling is a horrible feature of the protocol.
 +#​ascii_upload_enable=YES
 +#​ascii_download_enable=YES
 +#
 +# You may fully customise the login banner string:
 +#​ftpd_banner=Welcome to blah FTP service.
 +#
 +# You may specify a file of disallowed anonymous e-mail addresses. Apparently
 +# useful for combatting certain DoS attacks.
 +#​deny_email_enable=YES
 +# (default follows)
 +#​banned_email_file=/​etc/​vsftpd/​banned_emails
 +#
 +# You may specify an explicit list of local users to chroot() to their home
 +# directory. If chroot_local_user is YES, then this list becomes a list of
 +# users to NOT chroot().
 +chroot_local_user=YES
 +#​chroot_list_enable=YES
 +# (default follows)
 +#​chroot_list_file=/​etc/​vsftpd/​chroot_list
 +#
 +# You may activate the "​-R"​ option to the builtin ls. This is disabled by
 +# default to avoid remote users being able to cause excessive I/O on large
 +# sites. However, some broken FTP clients such as "​ncftp"​ and "​mirror"​ assume
 +# the presence of the "​-R"​ option, so there is a strong case for enabling it.
 +#​ls_recurse_enable=YES
 +#
 +# When "​listen"​ directive is enabled, vsftpd runs in standalone mode and
 +# listens on IPv4 sockets. This directive cannot be used in conjunction
 +# with the listen_ipv6 directive.
 +listen=YES
 +#
 +# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
 +# sockets, you must run two copies of vsftpd with two configuration files.
 +# Make sure, that one of the listen options is commented !!
 +#​listen_ipv6=YES
 +
 +pam_service_name=vsftpd
 +userlist_enable=YES
 +tcp_wrappers=YES
 +
 +## FOR NAT
 +pasv_enable=YES
 +pasv_min_port=12000
 +pasv_max_port=12100
 +</​sxh>​
 +
 +Adicionar o /bin/true nos shells do sistema
 +<sxh bash>
 +echo "/​bin/​true"​ > /etc/shells
 +</​sxh>​
 +
 +Cadastrando um usuário qualquer
 +<sxh bash>
 +useradd -s /bin/true -m jose
 +</​sxh>​
 +
 +Definindo uma senha para ele
 +<sxh bash>
 +passwd jose
 +</​sxh>​
 +
 +Reiniciando o vsftpd
 +<sxh bash>
 +/​etc/​init.d/​vsftpd restart
 +</​sxh>​
 +
 +Colocando o serviço na inicialização do sistema
 +<sxh bash>
 +chkconfig --add vsftpd
 +chkconfig vsftpd on
 +</​sxh>​
 +====== Referências ======
 +  - https://​security.appspot.com/​vsftpd.html
 +  - https://​security.appspot.com/​vsftpd.html#​docs