You are currently viewing Como criar um servidor FTP (Pure-FTPd)

Como criar um servidor FTP (Pure-FTPd)

O que é o Pure-FTPd?

O Pure-FTPd é um servidor FTP gratuito com um forte foco na segurança do software. Ele pode ser compilado e executado em uma variedade de sistemas operacionais de computador tipo Unix, incluindo Linux, OpenBSD, NetBSD, FreeBSD, DragonFly BSD, Solaris, Tru64, Darwin, Irix e HP-UX. Também foi portado para o Android.

Segurança primeiro

Pure-FTPd é ativamente suportado e sempre foi projetado com a segurança em mente, e o código é sempre auditado novamente à medida que novos tipos de vulnerabilidades são discutidos.

O servidor pode ser executado com separação de privilégios para segurança paranóica. Ele pode até mesmo rodar 100% não-root, com sua emulação embutida chroot () e contas virtuais.

A transmissão de senhas e comandos em texto não criptografado pode ser evitada: Pure-FTPd tem suporte opcional para uma camada de criptografia SSL / TLS usando a biblioteca OpenSSL.

Pure-FTPd fala a sua língua

Todas as mensagens do servidor são traduzidas em inglês, alemão, romeno, francês, polonês, espanhol, dinamarquês, holandês, italiano, português brasileiro, eslovaco, coreano, sueco, norueguês, russo, chinês tradicional, chinês simplificado, tcheco, turco, húngaro e catalão .

Ajuda seus clientes a entender o diagnóstico, mesmo quando o inglês não é sua língua nativa.

As mensagens estão em arquivos independentes e podem ser facilmente traduzidas para novos idiomas ou personalizadas.

A conversão transparente de charsets de cliente para sistema de arquivos é implementada, com suporte a UTF-8.

Uma excelente escolha para iniciantes

Os iniciantes podem instalar um servidor Pure-FTPd em 5 minutos. Pode ser tão simples quanto instalar o pacote, digitandopure-ftpd &e isso é tudo. Você já tem um servidor em execução e os clientes podem começar a se conectar.

Não há necessidade de revisar nenhum arquivo de configuração longo e complexo, onde possíveis erros podem ter implicações de segurança e confiabilidade. O Pure-FTPd usa opções de linha de comando simples para ativar os recursos de que você precisa.

Você pode limitar o número de usuários simultâneos, limitar sua largura de banda para evitar perda de conexão, ocultar arquivos de sistema (chroot), têm taxas de upload / download e moderam novos uploads. Mensagens personalizadas podem ser exibidas no momento do login (até mesmo alterando arquivos da fortuna) e quando um usuário entra em um novo diretório. Além disso, para evitar que seus discos fiquem cheios, você pode definir uma porcentagem máxima, e novos uploads não serão permitidos quando essa porcentagem for atingida.

MAIS INFORMAÇÕES EM Pure-FTPd

Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql

Requisito:
Debian 10

Primeiramente verifique se você está usando o usuario ROOT, caso não esteja, vire-o:

$ su -

Agora iremos instalar o banco de dados, caso queira instalar com o postgres o procedimento é o mesmo.

$ apt install mariadb-server mariadb-client

O MariaDB vem com o usuário root sem senha, e por segurança nos iremos colocar uma senha nesse usuário. Existe 2 métodos de fazer isso, vou mostrar os 2 a seguir e sinta-se a vontade para escolher.

Metodo 1
$ mysql_secure_installation

Metodo 2

$ USE mysql;
$ UPDATE user SET password=PASSWORD('SENHA_DB_ROOT') WHERE User='root';
$ UPDATE user SET plugin="mysql_native_password";
$ FLUSH PRIVILEGES;
$ quit;

Instalação do Pure FTP

$ apt install pure-ftpd-mysql

Agora criaremos nosso grupo FTP (grupoftp) e usuário (pureftpd) para que nosso usuários virtuais sejam mapeados.

$ groupadd -g 2001 ftpgroup
$ useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

$ nano /etc/default/pure-ftpd-common

altere

UPLOADUID=
UPLOADGID=

para

UPLOADUID=2001
UPLOADGID=2001

Próximo passo criar a nossa base de dados, onde ficaram armazenado as informações dos nossos usuários.

$ mariadb -u root -p

Entre com a senha de root criada anteriormente. Não esqueça de alterar senha (SENHA_FTP_USER).

# CREATE DATABASE pureftpd;
# GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'SENHA_FTP_USER';
# GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'SENHA_FTP_USER';
# FLUSH PRIVILEGES;

Crie a tabela

USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
);

quit;

Salve o arquivo original /etc/pure-ftpd/db/mysql.conf e crie um novo com novas configurações, mais uma vez preste atenção a senha [SENHA_FTP_USER].

$ mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
$ nano /etc/pure-ftpd/db/mysql.conf

Adicione:

MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R")
MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R")
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "" OR ipaccess LIKE "\R")

Esteja certo que você mudou o campo MYSQLPassword ‘SENHA_FTP_USER’

A configuração ChrootEveryone fará com que o PureFTPd faça chroot em todos os usuários virtuais em seu diretório pessoal, para que ele não consiga procurar diretórios e arquivos fora do diretório pessoal. A linha CreateHomeDir fará com que o PureFTPd crie o diretório inicial de um usuário quando o usuário efetuar login e o diretório inicial ainda não existir.

$ echo yes > /etc/pure-ftpd/conf/ChrootEveryone
$ echo yes > /etc/pure-ftpd/conf/CreateHomeDir
$ echo 1 > /etc/pure-ftpd/conf/TLS
$ echo HIGH > /etc/pure-ftpd/conf/TLSCipherSuite

Gere os certificados.

$ openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
$ openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout \  /etc/ssl/private/pure-ftpd.pem \  -out /etc/ssl/private/pure-ftpd.pem
$ chmod 600 /etc/ssl/private/*.pem

Vamos criar agora um usuário, Qual ficará dentro do diretório /var/pure-ftpd/ onde vou deixar todos meus usuários criado, porém você pode escolher qualquer diretório, usarei a pasta /var/ pois seria o “lugar correto”.

Entre no mariadb com seu usuario pureftpd e senha para fazer a criação do usuário ftp, no meu ex vou criar o usuário chamado jbits.

$ mysql -u pureftpd -p

USE pureftpd;
INSERT INTO ftpd (User, status, Password, Uid, Gid, Dir, ULBandwidth, DLBandwidth, comment, ipaccess, QuotaSize, QuotaFiles)
VALUES ('remontti', '1', MD5('SUA_SENHA'), '2001', '2001', '/var/pure-ftpd/remontti', '100', '100', '', '*', '50', '0');
quit;

Limpe o histórico do mariadb. Não queremos ninguém vendo o q digitamos lá

$ echo > /root/.mysql_history

Ao fazer login o diretório /var/pure-ftpd/USUARIO será criado automaticamente.

Restarte o serviço e verifique o status do mesmo

$ systemctl restart pure-ftpd-mysql
$ systemctl status pure-ftpd-mysql

Sempre que você queira criar um novo usuário, você tem que criar uma entrada na tabela ftpd.
Explicando a estrutura da tabela:

User: Seu usuário (ex. como no nosso usuário acima: teste).
Status: 0 ou 1. 0 deixará sua conta inativa, e o usuário não pode logar.
Password: A senha do usuário. A senha está encriptada com MD5.
UID: O userid do usuário ftp que você criou (ex: 2001)
GID: O groupid do grupo ftp que você criou (ex: 2001).
Dir: Diretório home do usuário (ex: /home/teste). Se não existir será criado quando logar pela primeira vez via FTP. O usuário será preso neste diretório home.
ULBandwidth: Controle de Upload em KB/Sec. Use 0 para que seja ilimitado.
DLBandwidth: Controle de Download em KB/sec. Use 0 para que seja ilimitado.
Comment: Você pode inserir qualquer comentário (ex: Usuário da administração). Você deixa este campo limpo.
Ipaccess: Você pode definir o ip que serão permitidos para conectar nesta conta FTP. Ou ‘*’ para qualquer endereço IP.
QuotaSize: Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) Defina 0 como ilimitado.
QuotaFiles: Número total de arquivos que este usuário poderá salvar. Defina 0 para ilimitado.

Protegendo com Fail2ban

$ apt install fail2ban
$ echo yes > /etc/pure-ftpd/conf/DontResolve
$ nano /etc/fail2ban/jail.d/defaults-debian.conf

Adicione o filtro pure-ftpd.

[sshd]
enabled = true
[pure-ftpd]
enabled = true

Restarte o fail2ban

$ systemctl restart fail2ban

Pronto seu Servidor Pure-FTPd está pronto para usar, divirta-se 😉

Ivan Junior

Trabalho atualmente como Administrador de Redes em um Provedor de Internet no interior da Bahia.

Deixe um comentário