Virtual Hosting com PureFTPd e MySQL (Incluindo gerenciamento de quota e largura de banda) no Ubuntu 9.04

Este post descreve como instalar um servidor PureFTPd que usa usuários virtuais de um banco de dados MySQL, em vez de os usuários do sistema real. Isso é muito mais flexível e permite ter milhares de usuários FTP em uma única máquina. Além de que eu te mostrarei o uso de quotas e de upload / download limites de largura de banda com esta configuração. As senhas serão armazenadas e encriptadas como MD5 no banco de dados.
Vamos ao que interessa:
Primeiro devemos instalar o MySQL e o phpMyAdmin, isso pode ser feito com apenas um comando:
sudo aptitude install mysql-server mysql-client phpmyadmin apache2
Serão feitas as seguintes perguntas:
New password for the MySQL “root” user: <– suasenha de root
Repeat password for the MySQL “root” user: <– suasenha de root
Web server to reconfigure automatically: <– apache2
Configure database for phpmyadmin with dbconfig-common? <– No
Instale PureFTPd com suporte ao MySQL :
aptitude install pure-ftpd-mysql
Então vamos criar um grupo ftp (ftpgroup) e usuário (ftpgroup) que todos os nossos usuários virtuais serão mapeados para eles. Substituir o grupo e userid 2001 com um número que é livre no seu sistema:
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
Agora nós criamos um banco de dados chamado pureftpd e um usuário MySQL chamado pureftpd no qual o PureFTPd irá usar mais tarde para se conectar ao banco de dados pureftpd:
mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;
Substitua a seqüência ftpdpass com qualquer senha que você deseja usar para o usuário do MySQL pureftpd. Ainda sobre o shell do MySQL, criamos a tabela de banco de dados que precisamos (sim, existe apenas uma 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)
) TYPE=MyISAM;
quit;
você pode acessar phpMyAdmin sob http://localhost/phpmyadmin/ (você também pode usar o endereço IP em vez de localhost) em um navegador e faça login como o usuário pureftpd. Então você pode visualizar o banco de dados. Mais tarde você pode usar o phpMyAdmin para administrar seu servidor PureFTPd.
Configurando o PureFtpd
Edite /etc/pure-ftpd/db/mysql.conf. Deve fazer assim:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf
MYSQLSocket /var/run/mysqld/mysqld.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword ftpdpass
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")
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
Isso fará com que PureFTPd mantenha cada usuário virtual em seu diretório pessoal para que ele não será capaz de percorrer os diretórios e arquivos fora do seu diretório home.
Também criar o arquivo /etc /pure-ftpd/conf/ CreateHomeDir que novamente simplesmente contém a seqüência yes:
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir
Finalmente criar o arquivo /etc/pure-ftpd/conf/DontResolve que novamente simplesmente contém a seqüência yes:
echo "yes" > /etc/pure-ftpd/conf/DontResolveDepois, reinicie o PureFTPd:
/etc/init.d/pure-ftpd-mysql restartPara preencher os dados você pode usar o shell do MySQL:
mysql -u root -p
USE pureftpd;
Agora vamos criar o usuário exampleuser com o status 1 (o que significa que sua conta ftp está ativa), a senha secreta (que será armazenada criptografada usando função MD5 do MySQL), o UID e GID 2001 (use o userid e groupid do usuário/grupo criado no início), o diretório home /home/exemplo, uma banda de upload e download de 100 KB / s, e uma quota de 50 MB:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
quit;
Agora abra seu programa cliente de FTP em sua estação de trabalho (algo como FileZilla, WS_FTP, SmartFTP ou gFTP) e tente conectar. Como hostname você usa localhost (ou o endereço IP do sistema), o usuário é exampleuser, e a senha é secreta.
Se você é capaz de se conectar – parabéns! Se não, alguma coisa deu errado.
Referências: http://www.howtoforge.com/virtual-hosting-with-pureftpd-and-mysql-incl-quota-and-bandwidth-management-on-ubuntu-9.04-p2
E ai beleza deu certinho ai valeu
mais como fasso para colocar mais usuarios vc tem alguma ideia
Olha, pra inserir usuários é só você inserir mais tuplas na tabela de usuários com suas respectivas propiedades.. senhas, largura de banda e talz!
Sim mais tem algum programa que faz isso
ou script em php pela web