Hospedagem Virtual · 5 min read · Dec 03, 2025

Hospedagem Virtual Com PureFTPd E MySQL (Incl. Gerenciamento De Quota E Largura De Banda) No Mandriva 2009.0

Hospedagem Virtual Com PureFTPd E MySQL (Incl. Gerenciamento De Quota E Largura De Banda) No Mandriva 2009.0

Versão 1.0
Autor: Falko Timme

Este documento descreve como instalar um servidor PureFTPd que usa usuários virtuais de um banco de dados MySQL em vez de usuários reais do sistema. Isso é muito mais eficiente e permite ter milhares de usuários ftp em uma única máquina. Além disso, mostrarei o uso de limites de quota e largura de banda de upload/download com essa configuração. As senhas serão armazenadas criptografadas como strings MD5 no banco de dados.

Para a administração do banco de dados MySQL, você pode usar ferramentas baseadas na web como o phpMyAdmin, que também será instalado neste tutorial. O phpMyAdmin é uma interface gráfica confortável, o que significa que você não precisa se preocupar com a linha de comando.

Este tutorial é baseado no Mandriva 2009.0. Você já deve ter configurado um sistema básico do Mandriva 2009.0, por exemplo, conforme descrito nos primeiros seis capítulos deste tutorial: https://www.howtoforge.com/perfect-server-mandriva-2009.0-i386

Este guia é destinado a ser um guia prático; não cobre os fundamentos teóricos. Eles são tratados em muitos outros documentos na web.

Este documento vem sem garantia de qualquer tipo! Quero dizer que este não é o único modo de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Neste tutorial, uso o nome do host server1.example.com com o endereço IP 192.168.0.100. Essas configurações podem diferir para você, então você deve substituí-las onde apropriado.

2 Instalar MySQL E phpMyAdmin

Tudo isso pode ser instalado com um único comando:

urpmi MySQL MySQL-client phpmyadmin

Por padrão, a rede não está habilitada no pacote MySQL do Mandriva 2009.0. Podemos mudar isso comentando a linha skip-networking em /etc/my.cnf:

vi /etc/my.cnf

| [...] # Não escute em uma porta TCP/IP. Isso pode ser uma melhoria de segurança, # se todos os processos que precisam se conectar ao mysqld rodarem na mesma máquina. # Toda interação com mysqld deve ser feita via sockets Unix ou pipes nomeados. # Note que usar esta opção sem habilitar pipes nomeados no Windows # (via a opção "enable-named-pipe") tornará o mysqld inútil! # #skip-networking [...] |

Depois, criamos os links de inicialização do sistema para MySQL e Apache…

chkconfig mysqld on chkconfig httpd on

… e iniciamos ambos os serviços:

/etc/init.d/mysqld start /etc/init.d/httpd restart

Crie uma senha para o usuário root do MySQL (substitua yourrootsqlpassword pela senha que você deseja usar):

mysqladmin -u root password yourrootsqlpassword mysqladmin -h server1.example.com -u root password yourrootsqlpassword

3 Instalar PureFTPd Com Suporte A MySQL

O pacote PureFTPd do Mandriva suporta vários backends, como MySQL, PostgreSQL, LDAP, etc. Instalamos assim:

urpmi pure-ftpd pure-ftpd-anon-upload pure-ftpd-anonymous

Em seguida, criamos um grupo ftp (ftpgroup) e um usuário (ftpuser) ao qual todos os nossos usuários virtuais serão mapeados. Substitua o grupo e o ID do usuário 2001 por um número que esteja livre em seu sistema:

groupadd -g 2001 ftpgroup useradd -u 2001 -s /bin/false -d /bin/null -c "usuário pureftpd" -g ftpgroup ftpuser

4 Criar O Banco De Dados MySQL Para PureFTPd

Agora criamos um banco de dados chamado pureftpd e um usuário MySQL chamado pureftpd que o daemon PureFTPd 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 string ftpdpass pela senha que você deseja usar para o usuário MySQL pureftpd. Ainda no shell do MySQL, criamos a tabela do banco de dados que precisamos (sim, há 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;

Como você pode ter notado, com o comando quit; saímos do shell do MySQL e estamos de volta ao shell do Linux.

A propósito, (estou assumindo que o nome do host do seu sistema de servidor ftp é server1.example.com) você pode acessar o phpMyAdmin em http://server1.example.com/phpmyadmin/ (você também pode usar o endereço IP em vez de server1.example.com) em um navegador e fazer login como o usuário pureftpd. Depois, você pode dar uma olhada no banco de dados. Mais tarde, você pode usar o phpMyAdmin para administrar seu servidor PureFTPd.

5 Configurar PureFTPd

Edite /etc/pure-ftpd/pure-ftpd.conf e certifique-se de que as linhas ChrootEveryone, MySQLConfigFile e CreateHomeDir estejam habilitadas e pareçam com isso:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

A configuração ChrootEveryone fará com que o PureFTPd chroot cada usuário virtual em seu diretório home, para que ele não possa navegar por diretórios e arquivos fora de seu diretório home. A linha CreateHomeDir fará com que o PureFTPd crie o diretório home de um usuário quando o usuário fizer login e o diretório home ainda não existir.

Em seguida, editamos /etc/pure-ftpd/pureftpd-mysql.conf. Deve parecer assim:

cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf vi /etc/pure-ftpd/pureftpd-mysql.conf

| MYSQLSocket /var/lib/mysql/mysql.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() ou password() - md5 é MUITO RECOMENDÁVEL em relação ao texto claro 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 a string ftpdpass pela senha real do usuário MySQL pureftpd na linha MYSQLPassword! Observe que usamos md5 como método MYSQLCrypt, o que significa que armazenaremos as senhas dos usuários como uma string MD5 no banco de dados, o que é muito mais seguro do que usar senhas em texto claro!

Agora iniciamos o PureFTPd:

/etc/init.d/pure-ftpd start

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.