Configuração ProFTPD - Ubuntu 18.04 / 20.04 / 22.04
Tags: ftp, proftpd, ubuntu, script
Published: 2024-01-30 19:06:55

Apresentamos um guia fundamental para a criação de um servidor *FTP personalizado* utilizando o **ProFTPD**. Este tutorial abrange elementos essenciais que são cruciais para a configuração eficaz do servidor, incluindo:

- Definição do nome do servidor FTP,
- Configuração de portas,
- Especificação da faixa de portas para o modo passivo,
- Ajustes relacionados a logs.

> Ao seguir este tutorial, você será capaz de estabelecer um ambiente de servidor FTP personalizando as configurações conforme suas necessidades específicas. 

> Além disso, foi disponibilizado um script Bash para a criação de usuários FTP no ProFTPD, simplificando o processo e permitindo a rápida configuração de novos usuários com seus respectivos diretórios FTP.

Ao final do tutorial, incluímos um segmento de resolução de problemas (Troubleshooting) que aborda uma possível questão relacionada ao erro 550. O tutorial também fornece comandos úteis para corrigir permissões de diretórios específicos no servidor FTP.

**Link do Vídeo: [https://www.youtube.com/watch?v=3cUpCeQ5lBQ](https://www.youtube.com/watch?v=3cUpCeQ5lBQ)**

---
**Parte 1: Instalação do ProFTPd:**
```bash
apt update
apt install proftpd -y
```

---
**Parte 2: Configuração personalizada do ProFTPD:**
```bash
cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bkp
> /etc/proftpd/proftpd.conf
vim /etc/proftpd/proftpd.conf
```

*Cole o script abaixo:*
```bash
# Nome do servidor FTP
ServerName              "Seu Nome de Servidor FTP"
# Tipo de servidor (standalone = independente)
ServerType              standalone
# Define como servidor padrão
DefaultServer           on

# Porta 21 é a porta FTP padrão.
Port                    21

# Umask 022 é uma boa umask padrão para evitar que novos diretórios e arquivos
# sejam graváveis por grupo e mundo.
Umask                   022

# Para prevenir ataques DoS, defina o número máximo de processos filhos
# para 30. Se precisar permitir mais de 30 conexões simultâneas
# de uma vez, simplesmente aumente esse valor.
MaxInstances            30

# Define o usuário e grupo sob o qual o servidor será executado.
User                    nobody
Group                   nogroup

# Configuração de Faixa de Portas para Modo Passivo
PassivePorts 49152 65534

# Configurações de Log
ExtendedLog /var/log/proftpd/access.log WRITE,READ default
DisplayLogin "Bem-vindo ao meu servidor FTP"

# Desativação do Acesso Anônimo
<Anonymous ~ftp>
  DenyAll
</Anonymous>

# Configurações de usuários
<Global>
    RequireValidShell off
    DefaultRoot /var/www/html
</Global>
```

---

**Script para criação de Usuários FTP:**

```bash
#!/bin/bash

# Script para criar usuário FTP no ProFTPD

echo "########################################################"
read -p "Digite o username ser criado: " username
echo "########################################################"
read -p "Digite a senha do usuário: " password
echo "########################################################"

# Configurações
ftp_root="/var/www/html"
user_group="www-data"
proftpd_conf_dir="/etc/proftpd/conf.d"
user_conf_file="$proftpd_conf_dir/$username.conf"

# Criação do usuário sem pasta home
useradd -M -N -s /bin/false -g "$user_group" "$username"
echo -e "$password\n$password" | passwd "$username" > /dev/null  # Redireciona a saída para /dev/null para ocultar a saída padrão

# Criação do arquivo de configuração específico para o usuário
echo -e "\n<Directory $ftp_root>\n  UploadOnCreate on\n  ForceGroup $user_group\n  ForceUser $username\n</Directory>" > "$user_conf_file"

# Reinicia o ProFTPD
systemctl restart proftpd

# Exibe uma mensagem formatada
echo -e "\n#################################################"
echo -e "## Usuário FTP criado com sucesso:"
echo -e "## Usuário: $username"
echo -e "## Diretório FTP: $ftp_root"
echo -e "## Grupo: $user_group"
```

---

**Troubleshooting:**
Obs.: Utilizei o grupo www-data simulando um servidor web com apache2.

Caso receba um erro 550, pode ser a permissão da pasta, você pode corrigir executando o comando:

`sudo chmod -R 0775 /var/www/`

> Este comando altera as permissões recursivamente para o diretório /var/www/ e todos os seus subdiretórios e arquivos. Cuidado ao executar este comando, procure saber se tem algum arquivo sensível dentro desta pasta antes de executar.

`sudo chown -R www-data:www-data /var/www/html` 

> Define o grupo (www-data) para todos os arquivos e subdiretórios recursivamente dentro de /var/www/html/uploads.

`sudo chmod -R g+s /var/www/html` 

> Define o bit setgid nos diretórios e subdiretórios, garantindo que novos arquivos criados dentro deles herdem o grupo do diretório pai (www-data).