Servidor FTP com usuários no banco de dados MySQL

pure-ftpd-with-mysql

Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download.


Distribuição utilizada: Debian 9 (Stretch ) / Instalação Limpa (Tutorial de instalação aqui)

Requisitos:
Servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin “LAMP” no Debian 9 Stretch

# 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

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

# mysql -u root -p
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;

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; 

Antes vamos criar um backup do /etc/pure-ftpd/db/mysql.conf e montar este arquivo com nossas configuração para fazera conexão ao mysql.

# mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vim /etc/pure-ftpd/db/mysql.conf

Adicione:

MYSQLSocket /var/run/mysqld/mysqld.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
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_MYSQL_FPTd’

Seguindo com as configurações

# echo yes > /etc/pure-ftpd/conf/ChrootEveryone
# echo yes > /etc/pure-ftpd/conf/CreateHomeDir

ChrootEveryone – Prender por padrão os usuários FTP em seu diretório;
CreateHomeDir – Criar o home do usuário automaticamente;

# /etc/init.d/pure-ftpd-mysql restart

Vamos criar agora um usuário, no exemplo abaixo meu usuário será dono do /var/www/html (diretório padrão do apache/debian 8)

# mysql -u root -p
USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('usuario', '1', MD5('senha'), '2001', '2001', '/var/www/html', '100', '100', '', '*', '50', '0');
quit; 

Sempre que você queira criar um novo usá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.

Alterando as permissões do /var/www/html isso vai ser relativo ao diretório que você definido ao usuário criado.

# chown ftpuser. -R /var/www/html/
Fontes:
http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

4 Resultados

  1. Vicente Filho disse:

    Parabéns Pelo Excelente Trabalho!

    fiquei em dúvida aqui:
    chown ftpuser. -R /var/www/html/

    quando execute ele diz:
    chown: não foi possível acessar ‘/var/www/html/’: Arquivo ou diretório inexistente

    será que preciso instalar o Apache ou Nginx?

  2. Daniel disse:

    Muito bom!
    Funcionando 100%
    Obrigado remontti por compartilhar conhecimento!!

  1. 1 de outubro de 2016

    […] 2000:fff:250:250:0::2 (ns1) SERV DNS SLAVE -> 250.250.0.3 / 2000:fff:250:250:0::3 (ns2) SERV WEB + FTP* -> 250.250.0.4 / 2000:fff:250:250:0::4 (www,ftp) SERV ZABBIX * -> 250.250.0.5 / […]

  2. 20 de fevereiro de 2017

    […] Se você deseja arriscar e elevar o nível e criar um servidor FTP você pode seguir o tutorial: Servidor FTP com usuários no banco de dados MySQL […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *