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

mysql+pureftpd

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")

Certifique-se de substituir o string ftpdpass com a senha real para o usuário do MySQL pureftpd MYSQLPassword na linha! Por favor note que nós usamos md5 MYSQLCrypt como método, o que significa que irá armazenar as senhas dos usuários como uma string MD5 no banco de dados que é muito mais seguro do que usar senhas em texto simples!
Em seguida, crie o arquivo /etc/pure-ftpd/conf/ChrootEveryone que simplesmente contém a seqüência yes:

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

Isso fará com que PureFTPd crie um diretório home do usuário quando o usuário fizer login no diretório home e ainda não existir.

Finalmente criar o arquivo /etc/pure-ftpd/conf/DontResolve que novamente simplesmente contém a seqüência yes:

echo "yes" > /etc/pure-ftpd/conf/DontResolve
Isto fará com que PureFTPd não olhe os nomes de host que pode acelerar significativamente as ligações e reduzir o uso da largura de banda.

Depois, reinicie o PureFTPd:

/etc/init.d/pure-ftpd-mysql restart
Preencha o banco e Teste:

Para 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

This entry was posted in Linux, Tutoriais, Ubuntu and tagged , , , , , , , . Bookmark the permalink.

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

  1. Valter says:

    E ai beleza deu certinho ai valeu
    mais como fasso para colocar mais usuarios vc tem alguma ideia

  2. admin says:

    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!

  3. valter says:

    Sim mais tem algum programa que faz isso
    ou script em php pela web

  4. Pedro Tibiriçá says:

    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.

  5. Pedro Tibiriçá says:

    Valter:
    Caso queira adicionar mais usuários no banco, recomendo usar o PHPMyAdmin.
    Boa Sorte!

  6. Hugo Barros says:

    Valeu amigo !!! ai é só deixar a imaginação tomar de conta… você tem inúmeras possibilidades !

  7. says:

    Hugo,

    Eu tenho certeza, VOCÊ vai LONGE!

    DEUS o conserve sempre assim!

    Bjo.

Leave a Reply

Your email address will not be published. Required fields are marked *


*