Servidor FTP com usuários no banco de dados 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
1 # apt install pure-ftpd-mysql
Agora criaremos nosso grupo FTP (grupoftp) e usuário (pureftpd) para que nosso usuários virtuais sejam mapeados.
1 # groupadd -g 2001 ftpgroup 2 # 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.
1 # mysql -u root -p
1 CREATE DATABASE pureftpd; 2 3 GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'SENHA_FTP_USER'; 4 GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'SENHA_FTP_USER'; 5 6 FLUSH PRIVILEGES; 7 8 USE pureftpd; 9 10 CREATE TABLE ftpd ( 11 User varchar(16) NOT NULL default '', 12 status enum('0','1') NOT NULL default '0', 13 Password varchar(64) NOT NULL default '', 14 Uid varchar(11) NOT NULL default '-1', 15 Gid varchar(11) NOT NULL default '-1', 16 Dir varchar(128) NOT NULL default '', 17 ULBandwidth smallint(5) NOT NULL default '0', 18 DLBandwidth smallint(5) NOT NULL default '0', 19 comment tinytext NOT NULL, 20 ipaccess varchar(15) NOT NULL default '*', 21 QuotaSize smallint(5) NOT NULL default '0', 22 QuotaFiles int(11) NOT NULL default 0, 23 PRIMARY KEY (User), 24 UNIQUE KEY User (User) 25 ); 26 27 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.
1 # mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig 2 # vim /etc/pure-ftpd/db/mysql.conf
Adicione:
1 MYSQLSocket /var/run/mysqld/mysqld.sock 2 #MYSQLServer localhost 3 #MYSQLPort 3306 4 MYSQLUser pureftpd 5 MYSQLPassword SENHA_FTP_USER 6 MYSQLDatabase pureftpd 7 #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext 8 MYSQLCrypt md5 9 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 10 MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 11 MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 12 MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 13 MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 14 MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 15 MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 16 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
1 # echo yes > /etc/pure-ftpd/conf/ChrootEveryone 2 # 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;
1 # /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)
1 # mysql -u root -p
1 USE pureftpd; 2 3 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'); 4 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.
1 # chown ftpuser. -R /var/www/html/Fontes: http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL
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?
Muito bom!
Funcionando 100%
Obrigado remontti por compartilhar conhecimento!!