Software Livre, por Hugo Barros

Dicas, tutoriais e seu comentário.

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

RSS 2.0 | Trackback | Comentar

3 Comentários para “Virtual Hosting com PureFTPd e MySQL (Incluindo gerenciamento de quota e largura de banda) no Ubuntu 9.04”


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


  2. 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. Sim mais tem algum programa que faz isso
    ou script em php pela web

Deixe seu comentário

Get Adobe Flash playerPlugin by wpburn.com wordpress themes