
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
Muito obrigado!
Fiz um teste e funcionou perfeitamente.
Agora vou adicionar mais usuários e testar a estabilidade dele.
Caso funcione, vou alterar para o meu padrão de base de dados e adicionar uma rotina a ser executada após cada upload.
Muito bom. Mais uma vez obrigado.
Valter:
Caso queira adicionar mais usuários no banco, recomendo usar o PHPMyAdmin.
Boa Sorte!
Valeu amigo !!! ai é só deixar a imaginação tomar de conta… você tem inúmeras possibilidades !
Hugo,
Eu tenho certeza, VOCÊ vai LONGE!
DEUS o conserve sempre assim!
Bjo.
Aprendi muito