Servidor FTP com usuários no Mysql

Sempre que tenho necessidade de um servidor FTP que necessite administração via web utilizo o PureFTPd com Mysql. O bom do PureFTPd que nosso usuários ficam em um banco de dados MySQL ao invés de usuários do sistema. Bom, configuraremos o uso de quota e limites de upload e download. Você pode utilizar o phpmyadmin para a administração do banco de dados MySQL.


Vamos a instalação:

# apt-get 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
mysql > GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@'localhost’ IDENTIFIED BY ‘SENHA_MYSQL_FPTd‘;
mysql > GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@'localhost.localdomain’ IDENTIFIED BY ‘SENHA_MYSQL_FPTd‘;

Modifique ‘SENHA_MYSQL_FPTd‘ para a senha desejada, este será o usuário que se conectará no mysql configurado a seguir no Pure-FTPd.

mysql > FLUSH PRIVILEGES;
mysql > CREATE DATABASE `pureftpd` ;
mysql > USE pureftpd;
mysql > 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)
) TYPE=MyISAM;

mysql > quit;

Configurando PureFTPd, fazendo o bkp do arquivo original, criando nossa configuração para conexão ao mysql.

# cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# cat /dev/null > /etc/pure-ftpd/db/mysql.conf
# vim /etc/pure-ftpd/db/mysql.conf

Adicione:

MYSQLSocket /var/run/mysqld/mysqld.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword SENHA_MYSQL_FPTd
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_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;

# vim /etc/default/pure-ftpd-common
Altere alinha:
STANDALONE_OR_INETD=standalone

# vim /etc/inetd.conf
Comente a linha:
# ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper

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

Vamos adicionar um usuário
# mysql -u root -p
mysql > USE pureftpd;
mysql > INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (‘teste’, ’1′, MD5(‘minhasenha’), ’2001′, ’2001′, ‘/home/teste’, ’100′, ’100′, ”, ‘*’, ’50′, ’0′);
mysql > quit;

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

FTP Anônimo

Primeiro cria um usuário ftp (com o homedir /home/ftp) e grupo ftp
# groupadd ftp
# useradd -s /bin/false -d /home/ftp -m -c “anonymous ftp” -g ftp ftp

# echo “no” > /etc/pure-ftpd/conf/NoAnonymous
Assim não permitiremos o login anonimo

Vamos criar o diretório do nossos arquivos.
# cd /home/ftp
# mkdir incoming
# chown ftp:nogroup incoming/
# chmod 311 incoming/
# cd ../
# chmod 555 ftp/

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

Fontes:
http://www.howtoforge.com/debian_etch_virtual_hosting_pureftpd_mysql_quota
http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL

{lang: 'pt-BR'}
Post comment as twitter logo facebook logo
Sort: Newest | Oldest