O protocolo de trans­fe­rên­cia de arquivos (FTP) é um dos métodos de trans­fe­rên­cia de arquivos mais populares, ge­ral­mente utilizado para uploads e downloads em espaços web. Neste tutorial, mostramos como con­fi­gu­rar um servidor FTP Debian com crip­to­gra­fia TLS.

Instalar servidor FTP Debian

Antes de con­fi­gu­rar e per­so­na­li­zar o seu servidor, você deve encontrar e instalar o software adequado. Vários ser­vi­do­res FTP são adequados a sistemas Linux, sendo muitos deles open source e ge­ral­mente dis­po­ni­bi­li­za­dos nos re­po­si­tó­rios das prin­ci­pais dis­tri­bui­ções Linux.

Um dos ser­vi­do­res FTP mais populares é o ProFTPD, de licença GPL e altamente ex­pan­sí­vel graças à sua estrutura modular. Sua principal con­fi­gu­ra­ção utiliza diretivas e grupos de diretivas, um método familiar para ad­mi­nis­tra­do­res com ex­pe­ri­ên­cia em ser­vi­do­res Apache. O ProFTPD está incluído por padrão no re­po­si­tó­rio de software do Debian. Sua ins­ta­la­ção é realizada de forma con­ven­ci­o­nal, uti­li­zando o terminal com os seguintes comandos:

sudo apt update
sudo apt install proftpd
sudo apt install proftpd-mod-crypto
bash

Se você quiser que o servidor FTP inicie au­to­ma­ti­ca­mente quando o sistema for rei­ni­ci­ado, você também deve executar o seguinte comando:

sudo systemctl enable proftpd
bash

Após a ins­ta­la­ção, é ne­ces­sá­rio decidir se o ProFTPD será utilizado no modo servidor (stan­da­lone) ou como um serviço con­tro­lado pelo inetd. No modo stan­da­lone, o servidor FTP gerencia di­re­ta­mente as re­qui­si­ções recebidas. Já na segunda opção, o “su­per­ser­vi­dor inetd/xinetd” recebe as re­qui­si­ções e as encaminha para o servidor FTP — uma abordagem re­co­men­dada apenas quando o tráfego FTP esperado for muito baixo.

VPS Hosting (Virtual Private Servers)
World-class VPS at America’s lowest price

Hos­pe­da­gem VPS poderosa e de baixo custo para rodar suas apli­ca­ções sob medida, com as­sis­tente pessoal e suporte 24 horas.

  • Save 50% or more vs leading hosts
  • Unlimited traffic & no setup fees 
  • 99.99% uptime gua­ran­teed
  • Free 24/7 premium support 

Servidor FTP Debian: 5 pos­si­bi­li­da­des e o plano IONOS ideal

Está em dúvida sobre qual con­fi­gu­ra­ção de hardware e rede você precisa para o seu servidor FTP Debian? Na tabela abaixo, listamos três cenários possíveis para o uso de um servidor FTP e sugerimos o plano mais adequado da IONOS para cada um deles.

Cenário do servidor FTP Plano IONOS ideal
Pequeno servidor web VPS Linux M
Servidor web maior VPS Linux XL
Servidor FTP em­pre­sa­rial Servidor Dedicado AMD Ryzen XXL-128 NVMe

Passo a passo para instalar e con­fi­gu­rar servidor FTP Debian

Após a ins­ta­la­ção, você pode começar a con­fi­gu­rar o ProFTPD. O arquivo de con­fi­gu­ra­ção ne­ces­sá­rio, proftpd.conf, está lo­ca­li­zado no diretório* /etc/proftpd/. Para editá-lo, abra-o com o editor de sua pre­fe­rên­cia* – com o programa padrão do Debian, nano, isso pode ser feito com o seguinte comando no terminal:

sudo nano /etc/proftpd/proftpd.conf
bash

Nas linhas de con­fi­gu­ra­ção, você en­con­trará as prin­ci­pais opções de ajuste e recursos do servidor Debian FTP. Cada com­po­nente tem uma linha própria e requer valores definidos: por exemplo, para habilitar ou de­sa­bi­li­tar um recurso, podem ser uti­li­za­dos os valores “on” (recurso ativado) ou “off” (recurso de­sa­ti­vado). Além disso, é possível adicionar o símbolo de jogo da velha (#) no início de uma linha para “comentá-la”. O servidor ProFTPD ignorará com­ple­ta­mente essa linha, tornando essa notação uma al­ter­na­tiva prática para desativar recursos.

Dica

Em vez de usar o arquivo proftpd.conf, você também pode criar um arquivo de con­fi­gu­ra­ção próprio e armazená-lo no diretório /etc/proftpd/conf.d/. Esse diretório permanece intacto durante as atu­a­li­za­ções do software FTP, reduzindo, com um simples passo, o risco de perder suas con­fi­gu­ra­ções. Por meio de uma diretiva Include, as es­pe­ci­fi­ca­ções de servidor ar­ma­ze­na­das na pasta conf.d podem ser fa­cil­mente in­te­gra­das ao arquivo principal (isso ocorre au­to­ma­ti­ca­mente na con­fi­gu­ra­ção padrão).

Fazer con­fi­gu­ra­ções básicas: Nome do servidor, diretório FTP etc

Antes de con­fi­gu­rar os detalhes do seu servidor FTP Debian, você deve fazer a con­fi­gu­ra­ção básica. Ela inclui a escolha do hostname do servidor ou do diretório que você deseja dis­po­ni­bi­li­zar para uploads e downloads de arquivos. Além disso, há diversas opções de con­fi­gu­ra­ção re­la­ci­o­na­das aos po­ten­ci­ais usuários do servidor FTP, como de­mons­trado pelo exemplo abaixo:

# Indicação do hostname e da mensagem de boas-vindas
ServerName    "hostname/endereço-ip"
DisplayLogin    "Seu login no servidor FTP Debian foi bem-sucedido!"
# Políticas gerais de login
<Global>
    # Permitir acesso apenas com shells definidas em /etc/shells
    RequireValidShell    on
    # Negar login como root
    RootLogin    off
    # Indicação do diretório FTP ao qual os usuários podem acessar
    DefaultRoot    Caminho-do-diretório
</Global>
# Definir usuários/autorização para login FTP
<Limit LOGIN>
    # O login só é permitido para os usuários do grupo exemplo ftpuser.
    # Em vez de uma longa lista, basta negar os demais grupos com o operador (!)
    DenyGroup    !ftpuser
</Limit>

Nesta con­fi­gu­ra­ção básica, con­ce­de­mos acesso a um diretório es­pe­cí­fico aos usuários. Isso é útil, por exemplo, quando usuários estão en­vol­vi­dos na ma­nu­ten­ção de um site e, portanto, precisam de direitos de acesso ex­ten­si­vos. No entanto, se a função do servidor FTP for apenas pro­por­ci­o­nar um local de ar­ma­ze­na­mento para arquivos, é re­co­men­dá­vel con­fi­gu­rar o ProFTPD para res­trin­gir o acesso ao diretório home do usuário:

# Permitir acesso apenas ao diretório home do usuário
DefaultRoot ~

Criar usuários FTP

Ao criar novos usuários no ProFTPD, você deve sempre definir /bin/false como o shell de login. Isso impede que os usuários tenham acesso ao shell do sistema, res­trin­gindo-os ao uso do servidor FTP. Para isso, adicione /bin/false ao arquivo de shells per­mi­ti­dos com o seguinte comando no terminal:

sudo sh -c 'echo "/bin/false" >> /etc/shells'
bash

Você pode então criar sua primeira conta de usuário:

sudo adduser user1 --shell /bin/false --home /home/user1
bash

Neste exemplo, você cria uma conta chamada “user1” e define seu diretório home no mesmo passo. Em seguida, define uma senha para a conta e confirma o perfil. Para garantir que essa nova conta possa se conectar ao servidor FTP Debian e fazer upload ou download de arquivos para seu diretório exclusivo, você precisa es­pe­ci­fi­car o diretório home na con­fi­gu­ra­ção do proftpd.conf:

<Directory /home/user1>
    Umask 022 
    AllowOverwrite off
    <Limit LOGIN>
        AllowUser user1
        DenyAll
    </Limit>
    <Limit ALL>
        AllowUser user1
        DenyAll
    </Limit>
</Directory>

Este exemplo de código restringe o diretório de várias formas, trans­for­mando-o no local privado de ar­ma­ze­na­mento dos arquivos de “user1”. Com o comando Umask (022), a conta pro­pri­e­tá­ria recebe todas as per­mis­sões padrão. Outros usuários podem apenas ler os arquivos e só poderão executá-los se a conta pro­pri­e­tá­ria conceder permissão. A diretiva de­sa­bi­li­tada Al­lowO­ver­write impede que arquivos já ar­ma­ze­na­dos sejam so­bres­cri­tos durante o upload. Por fim, o login FTP (Limit LOGIN) e a execução de comandos FTP (Limit ALL) são blo­que­a­dos para todas as contas, exceto “user1”.

Dica

Em vez de bloquear a execução de todos os comandos FTP, você pode res­trin­gir operações es­pe­cí­fi­cas. Isso permite, por exemplo, criar um diretório onde os usuários possam apenas fazer upload de arquivos. Uma visão geral detalhada das várias opções de con­fi­gu­ra­ção pode ser en­con­trada nos manuais on-line.

Permitir acesso anônimo

Se você deseja con­fi­gu­rar o seu servidor FTP Debian para atuar como um servidor para downloads públicos, nor­mal­mente, também quer permitir que os usuários acessem os arquivos for­ne­ci­dos de forma anônima. Para isso, você deve, ini­ci­al­mente, definir as per­mis­sões ne­ces­sá­rias para o diretório de download, que aqui chamamos de /home/ftp­down­load, uti­li­zando o comando chmod:

sudo chmod 755 -R /home/ftpdownload
bash

O usuário pro­pri­e­tá­rio do diretório terá todos os direitos (7 = Ler, Escrever e Executar), enquanto os usuários do grupo e todos os outros poderão somente ler e executar (5). Após definir as per­mis­sões, o acesso anônimo pode ser con­fi­gu­rado no arquivo proftpd.conf:

<Anonymous ~ftp>
User    ftp
Group    ftpgroup
# Perfis de login possíveis para os clientes
UserAlias    anonymous    ftp
# Ocultar as propriedades do usuário e grupo, e definir o número máximo de clientes
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell    off
MaxClients    10
<Directory *>
    <Limit WRITE>
        DenyAll
    </Limit>
</Directory>
</Anonymous>

Agora, para que o login no servidor FTP Debian com o usuário ftp seja possível, você precisará adicionar esse perfil ao grupo ftpuser:

sudo adduser ftp ftpgroup
bash

Con­fi­gu­rar crip­to­gra­fia SSL/TLS

O protocolo FTP transmite tanto as cre­den­ci­ais de login quanto os dados enviados em texto simples. Se você deseja con­fi­gu­rar um servidor ProFTPD privado, que não seja acessível a todos, é altamente re­co­men­dá­vel criar uma conexão crip­to­gra­fada durante o login. Isso pode ser feito uti­li­zando o software livre OpenSSL. O kit de fer­ra­men­tas de crip­to­gra­fia está dis­po­ní­vel na gestão de pacotes do Debian e pode já estar instalado. Caso ne­ces­sá­rio, você pode instalar com o comando:

sudo apt install openssl
bash

Passo 1: Gerar cer­ti­fi­cado e chave

Em seguida, use o OpenSSL para criar um cer­ti­fi­cado. Como você precisará armazená-lo em algum lugar, primeiro crie o diretório adequado no diretório do ProFTPD:

sudo mkdir /etc/proftpd/ssl
bash

Agora, gere o cer­ti­fi­cado (proftpd.cert.pem) e a chave (proftpd.key.pem) com validade de um ano para o seu servidor FTP Linux, in­for­mando o local de ar­ma­ze­na­mento com o seguinte comando:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
bash

Além disso, são ne­ces­sá­rias algumas in­for­ma­ções para registrar cor­re­ta­mente o cer­ti­fi­cado:

  • Country Name (2 letter code): Código do país, por exemplo, “BR” para o Brasil.
  • State or Province Name (full name): Estado/região, por exemplo, “São Paulo”.
  • Locality Name (eg, city): Cidade, por exemplo, “São Paulo”.
  • Or­ga­ni­za­tion Name (eg, company): Nome da empresa ou seu nome.
  • Or­ga­ni­za­ti­o­nal Unit Name (eg, company): Nome do de­par­ta­mento (se houver), por exemplo, “TI”.
  • Common Name (eg, YOUR name): Nome do domínio a ser protegido, por exemplo, “ftp.example.com”.
  • Email Address: Endereço de e-mail.

Essas in­for­ma­ções são ne­ces­sá­rias para a criação do cer­ti­fi­cado SSL/TLS com o OpenSSL.

Dedicated Servers
Per­for­mance through in­no­va­tion

O encontro do hardware com a nuvem: servidor dedicado com nuvem integrada e cobrança por minuto, incluindo as­sis­tente pessoal!

  • Dedicated en­ter­prise hardware
  • Con­fi­gu­ra­ble hardware equipment
  • ISO-certified data centers

Passo 2: Habilitar SSL/TLS no ProFTPD

Após criar seu próprio cer­ti­fi­cado e chave privada, é ne­ces­sá­rio ativar a tec­no­lo­gia de crip­to­gra­fia para o servidor ProFTPD. Para isso, o software do servidor Debian-FTP dis­po­ni­bi­liza o módulo mod_tls. Para ativá-lo, são ne­ces­sá­rias al­te­ra­ções no arquivo* tls.conf*. Abra o arquivo de con­fi­gu­ra­ção e procure a seguinte entrada:

<IfModule mod_tls.c>
    TLSEngine    off

Atribua o valor “on” à diretiva TLSEngine e expanda a seção da seguinte maneira, por exemplo, removendo os co­men­tá­rios:

<IfModule mod_tls.c>
    TLSEngine            on
    TLSLog                /var/log/proftpd/tls.log
    TLSProtocol            TLSv1 TLSv1.1 TLSv1.2
    TLSRSACertificateFile        /etc/proftpd/ssl/proftpd.cert.pem
    TLSRSACertificateKeyFile    /etc/proftpd/ssl/proftpd.key.pem
    TLSVerifyClient            off
    TLSRequired            on
</IfModule>

Com isso, você ativou a crip­to­gra­fia SSL/TLS para o seu servidor Debian-FTP e fez as con­fi­gu­ra­ções es­sen­ci­ais. Assim, o arquivo de log das conexões FTP (TLSLog) foi definido, assim como os caminhos para o cer­ti­fi­cado (TLSR­SA­Cer­ti­fi­ca­te­File) e a chave (TLSR­SA­Cer­ti­fi­ca­te­Key­File). Além disso, as versões de protocolo possíveis (TLS­Pro­to­col) também foram es­pe­ci­fi­ca­das. As duas últimas linhas garantem que o módulo não ve­ri­fi­cará os cer­ti­fi­ca­dos apre­sen­ta­dos pelo cliente (TLS­Ve­rify­Cli­ent) e que a crip­to­gra­fia seja obri­ga­tó­ria para a conexão (TLS­Re­qui­red). Após reiniciar o servidor ProFTPD, as novas con­fi­gu­ra­ções estarão em vigor:

sudo /etc/init.d/proftpd restart
bash

Passo 3: Conectar-se ao servidor ProFTPD via SSL/TLS

Se você ativou o SSL/TLS para o ProFTPD (como re­co­men­dado neste tutorial do servidor Debian-FTP), os usuários pre­ci­sa­rão de um cliente FTP que suporte a conexão crip­to­gra­fada. Um dos prin­ci­pais re­pre­sen­tan­tes é o FileZilla, que está dis­po­ní­vel não apenas para Debian e outras dis­tri­bui­ções Linux, mas também para macOS e Windows. Assim, o programa de código aberto oferece a solução ideal para acessar o servidor FTP de di­fe­ren­tes pla­ta­for­mas.

No Ser­ver­ma­na­ger do FileZilla, ao se­le­ci­o­nar o tipo de servidor, escolha a versão segura FTPS (“FTP com TLS/SSL explícito”). Durante a primeira conexão com o servidor, o cliente precisará aceitar o cer­ti­fi­cado.

Caso a conexão TLS não seja es­ta­be­le­cida no FileZilla, pode ser ne­ces­sá­rio habilitar ma­nu­al­mente o módulo mod_tls. Para isso, adicione a seguinte linha no início do arquivo proftpd.conf:

LoadModule mod_tls.c

Após essa alteração, reinicie o servidor para que a mudança tenha efeito:

sudo systemctl restart proftpd
bash

Dicas de con­fi­gu­ra­ção do ProFTPD

As opções de con­fi­gu­ra­ção apre­sen­ta­das aqui são apenas uma pequena amostra. O software FTP ProFTPD permite con­fi­gu­rar cenários muito mais es­pe­cí­fi­cos e complexos para o servidor. O site oficial do ProFTPD oferece várias in­for­ma­ções úteis sobre o tema. A do­cu­men­ta­ção on-line gratuita inclui, entre outras coisas, exemplos de con­fi­gu­ra­ções, tutoriais de­ta­lha­dos, perguntas fre­quen­tes (FAQs) e ex­pli­ca­ções sobre as di­re­tri­zes in­di­vi­du­ais. Além disso, o site fornece in­for­ma­ções sobre os di­fe­ren­tes módulos padrão e adi­ci­o­nais.

Possíveis erros durante a con­fi­gu­ra­ção do servidor FTP Debian

Em alguns casos, após reiniciar o servidor ProFTPD, você pode receber a seguinte mensagem de erro:

mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled

O problema ocorre porque o módulo mod_tls_memcache foi ativado au­to­ma­ti­ca­mente como parte do SSL/TLS durante a com­pi­la­ção do ProFTPD. Quando você configura a crip­to­gra­fia SSL/TLS, esse módulo te­o­ri­ca­mente ajuda no cache das sessões FTP crip­to­gra­fa­das. No entanto, como o cache de sessão não é ne­ces­sá­rio por padrão, você não fez as con­fi­gu­ra­ções ne­ces­sá­rias para que o módulo funcione, o que resulta na mensagem de erro do ProFTPD. A solução para esse problema é simples: basta comentar o módulo ou o processo de car­re­ga­mento do módulo no arquivo de con­fi­gu­ra­ção:

# LoadModule mod_tls_memcache.c

Além do problema do módulo de cache, também podem ocorrer falhas na conexão após a con­fi­gu­ra­ção do servidor FTP Debian. Para in­ves­ti­gar esse problema, você pode usar várias opções de análise:

1. Testar se o servidor ProFTPD está em execução:

sudo service proftpd status
bash

2. Testar se o servidor ProFTPD está escutando na porta TCP 21 para registrar as so­li­ci­ta­ções FTP de entrada:

sudo netstat -tlp|grep proftpd
bash

3. Verificar mensagens de erro no log do ProFTPD:

sudo tail -20 /var/log/proftpd/proftpd.log
bash

4. Verificar mensagens de erro no log TLS:

sudo tail -20 /var/log/proftpd/tls.log
bash

5. Testes de conexão na porta 21 com telnet:

sudo telnet [endereço-IP] 21
bash

6. Testes de conexão na porta 21 com TLS:

sudo openssl s_client -connect  [endereço-IP]:21 -starttls ftp
bash
Ir para o menu principal