Hospedagem Virtual · 13 min read · Nov 24, 2025
Hospedagem Virtual Com PureFTPd E MySQL (Incl. Gerenciamento De Quota E Largura De Banda) No OpenSUSE 13.2
Hospedagem Virtual Com PureFTPd E MySQL (Incl. Gerenciamento De Quota E Largura De Banda) No OpenSUSE 13.2
Versão 1.0
Autor: Srijan Kishore
Siga o howtoforge no Twitter
Última edição 19/Nov/2014
Este documento descreve como instalar um servidor PureFTPd que utiliza 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 esta 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 howto. O phpMyAdmin é uma interface gráfica confortável, o que significa que você não precisa mexer com a linha de comando.
Este documento vem sem garantia de qualquer tipo! Quero dizer que esta não é a única maneira de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo.
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. Você deve ter uma instalação básica do Open Suse antes de prosseguir conforme descrito neste tutorial.
2 Instalar MariaDB, Apache2 E phpMyAdmin
MariaDB, Apache e os módulos PHP necessários pelo phpMyAdmin podem ser instalados da seguinte forma:
zypper install mariadb mariadb-client apache2 apache2-mod_php5 php5-mysql php5-mcrypt php5-mbstring php5-gdserver1:~ # zypper install mariadb mariadb-client apache2 apache2-mod_php5 php5-mysql php5-mcrypt php5-mbstring php5-gd
Carregando dados do repositório...
Lendo pacotes instalados...
Resolvendo dependências de pacotes...
Problema: php5-mysql-5.6.1-4.1.x86_64 requer php5 = 5.6.1, mas esse requisito não pode ser fornecido
provedores desinstaláveis: php5-5.6.1-1.1.x86_64[openSUSE-13.2-0]
php5-5.6.1-1.1.i586[repo-oss]
php5-5.6.1-1.1.x86_64[repo-oss]
php5-5.6.1-4.1.i586[repo-update]
php5-5.6.1-4.1.x86_64[repo-update]
Solução 1: As seguintes ações serão realizadas:
não instalar php5-mysql-5.6.1-4.1.x86_64
não instalar php5-mcrypt-5.6.1-4.1.x86_64
não instalar php5-gd-5.6.1-4.1.x86_64
Solução 2: As seguintes ações serão realizadas:
não instalar php5-mcrypt-5.6.1-4.1.x86_64
não instalar apache2-mod_php5-5.6.1-4.1.x86_64
não instalar php5-gd-5.6.1-4.1.x86_64
não instalar php5-mbstring-5.6.1-4.1.x86_64
não instalar php5-mysql-5.6.1-4.1.x86_64
Solução 3: As seguintes ações serão realizadas:
não instalar php5-mcrypt-5.6.1-4.1.x86_64
não instalar apache2-mod_php5-5.6.1-4.1.x86_64
não instalar php5-gd-5.6.1-4.1.x86_64
não instalar php5-mbstring-5.6.1-4.1.x86_64
Solução 4: As seguintes ações serão realizadas:
não instalar php5-mcrypt-5.6.1-4.1.x86_64
não instalar apache2-mod_php5-5.6.1-4.1.x86_64
não instalar php5-gd-5.6.1-4.1.x86_64
não instalar php5-mbstring-5.6.1-4.1.x86_64
Solução 5: As seguintes ações serão realizadas:
não instalar php5-mcrypt-5.6.1-4.1.x86_64
não instalar apache2-mod_php5-5.6.1-4.1.x86_64
não instalar php5-gd-5.6.1-4.1.x86_64
não instalar php5-mbstring-5.6.1-4.1.x86_64
Solução 6: As seguintes ações serão realizadas:
não instalar php5-mcrypt-5.6.1-4.1.x86_64
não instalar apache2-mod_php5-5.6.1-4.1.x86_64
não instalar php5-gd-5.6.1-4.1.x86_64
não instalar php5-mbstring-5.6.1-4.1.x86_64
Solução 7: desinstalação de patterns-openSUSE-minimal_base-conflicts-20141007-2.1.x86_64
Solução 8: quebrar php5-mysql-5.6.1-4.1.x86_64 ignorando algumas de suas dependências
Escolha entre as soluções acima pelo número ou cancele [1/2/3/4/5/6/7/8/c] (c): <--7Então, criamos os links de inicialização do sistema para o MySQL (para que o MySQL inicie automaticamente sempre que o sistema for inicializado) e iniciamos o servidor MySQL:
systemctl enable mysql.service
systemctl start mysql.servicePara proteger a instalação do MySQL, execute:
mysql_secure_installationserver1:~ # mysql_secure_installation
/usr/bin/mysql_secure_installation: linha 379: find_mysql_client: comando não encontrado
NOTA: É RECOMENDADO EXECUTAR TODAS AS PARTES DESTE SCRIPT PARA TODOS OS SERVIDORES MariaDB EM USO DE PRODUÇÃO! POR FAVOR, LEIA CADA ETAPA COM CUIDADO!
Para fazer login no MariaDB e protegê-lo, precisaremos da senha atual do usuário root. Se você acabou de instalar o MariaDB e não definiu a senha do root ainda, a senha estará em branco, então você deve apenas pressionar enter aqui.
Digite a senha atual para root (pressione enter para nenhuma):
OK, senha usada com sucesso, prosseguindo...
Definir senha root? [Y/n] <--ENTER
Nova senha: <--mariadbpassword
Reinsira a nova senha: <--mariadbpassword
Senha atualizada com sucesso!
Recarregando tabelas de privilégios..
... Sucesso!
Por padrão, uma instalação do MariaDB tem um usuário anônimo, permitindo que qualquer um faça login no MariaDB sem ter uma conta de usuário criada para eles. Isso é destinado apenas para testes e para facilitar a instalação. Você deve removê-los antes de passar para um ambiente de produção.
Remover usuários anônimos? [Y/n] <--ENTER
... Sucesso!
Normalmente, o root deve ser permitido apenas conectar de 'localhost'. Isso garante que alguém não possa adivinhar a senha do root pela rede.
Desabilitar login remoto do root? [Y/n] <--ENTER
... Sucesso!
Por padrão, o MariaDB vem com um banco de dados chamado 'test' que qualquer um pode acessar. Isso também é destinado apenas para testes e deve ser removido antes de passar para um ambiente de produção.
Remover banco de dados de teste e acesso a ele? [Y/n] <--ENTER
- Removendo banco de dados de teste...
... Sucesso!
- Removendo privilégios no banco de dados de teste...
... Sucesso!
Recarregar as tabelas de privilégios garantirá que todas as alterações feitas até agora tenham efeito imediato.
Recarregar tabelas de privilégios agora? [Y/n] <--ENTER
... Sucesso!
Limpando...
Tudo pronto! Se você completou todas as etapas acima, sua instalação do MariaDB deve agora estar segura.
Obrigado por usar o MariaDB!
server1:~ #Agora sua configuração do MySQL deve estar segura.
Então, criamos os links de inicialização do sistema para o Apache (para que ele inicie automaticamente sempre que o sistema for inicializado) e o iniciamos:
systemctl enable apache2.service
systemctl start apache2.serviceO phpMyAdmin pode ser instalado da seguinte forma:
zypper install phpmyadminPara garantir que possamos acessar o phpMyAdmin, edite o arquivo da seguinte forma:
vi /etc/apache2/conf.d/phpMyAdmin.confAdicione o alias da seguinte forma:
Alias /phpMyAdmin /srv/www/htdocs/phpMyAdmin
Alias /phpmyadmin /srv/www/htdocs/phpMyAdmin
[...]Antes de iniciar o apache, precisamos seguir o link e fazer alterações no httpd.conf
vi /etc/apache2/httpd.conf
Nota: se os valores do arquivo forem diferentes, altere o valor da seguinte forma:
Comente estas linhas e adicione estas linhas
#
# Options None
# AllowOverride None
# Order deny,allow
# Deny from all
#
Options None
AllowOverride None
Require all denied
Em seguida, precisamos criar o arquivo de configuração para o phpmyadmin como
cd /srv/www/htdocs/phpMyAdmin
cp config.sample.inc.php config.inc.phpNo arquivo de configuração, você pode ver que o phpmyadmin espera um banco de dados chamado “phpmyadmin” que contém as tabelas pma:
[...]
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
[...] Então, criamos um:
echo "create database phpmyadmin;" | mysql -u root -p 'mariadbpassword'e carregamos as tabelas da documentação do phpmyadmin.
mysql -u root -p 'mariadbpassword' < /usr/share/doc/packages/phpMyAdmin/examples/create_tables.sqlAgora inicie o serviço Apache
systemctl enable apache2.service
systemctl restart apache2.serviceAgora podemos acessar o phpmyadmin em http://192.168.0.100/phpmyadmin ou em http://server1.example.com

3 Instalar PureFTPd Com Suporte A MySQL
O pacote PureFTPd do OpenSUSE suporta vários backends, como MySQL, PostgreSQL, LDAP, etc. Portanto, tudo o que precisamos fazer é instalar o pacote normal do PureFTPd:
zypper install pure-ftpdEm 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 userid 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 ftpuser4 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 -pCREATE 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)
) ENGINE=MyISAM;quit;Agora 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. Então 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, AnonymousOnly, MySQLConfigFile e CreateHomeDir estejam habilitadas e pareçam assim:
vi /etc/pure-ftpd/pure-ftpd.conf[...]
ChrootEveryone yes
[...]
AnonymousOnly no
[...]
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 em 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. AnonymousOnly deve ser definido como não, porque caso contrário, apenas sessões FTP anônimas serão permitidas.
Em seguida, criamos /edit /etc/pure-ftpd/pureftpd-mysql.conf. Deve parecer assim:
vi /etc/pure-ftpd/pureftpd-mysql.confMYSQLSocket /var/run/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! Por favor, note 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 criamos os links de inicialização do sistema para o PureFTPd e o iniciamos:
systemctl enable pure-ftpd
systemctl start pure-ftpd6 Popular O Banco De Dados E Testar
Para popular o banco de dados, você pode usar o shell do MySQL:
mysql -u root -pUSE pureftpd;Agora criamos o usuário exampleuser com o status 1 (o que significa que sua conta ftp está ativa), a senha secret (que será armazenada criptografada usando a função MD5 do MySQL), o UID e GID 2001 (use o userid e groupid do usuário/grupo que você criou no final da etapa dois!), o diretório home /home/www.example.com, uma largura de banda de upload e download de 100 KB/sec. (kilobytes por segundo), 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 FTP em sua estação de trabalho (algo como WS_FTP ou SmartFTP se você estiver em um sistema Windows ou gFTP em um desktop Linux) e tente se conectar. Como nome do host, use server1.example.com (ou o endereço IP do sistema), o nome de usuário é exampleuser e a senha é secret.
Se você conseguir se conectar - parabéns! Se não, algo deu errado.
Agora, se você executar
ls -l /home/server1:~ # ls -l /home/
total 0
drwxr-xr-x 1 administrator users 128 Nov 7 14:30 administrator
drwxr-xr-x 1 ftpuser ftpgroup 18 Nov 19 14:32 www.example.com
server1:~ #você deve ver que o diretório /home/www.example.com (diretório home do exampleuser) foi criado automaticamente, e é propriedade de ftpuser e ftpgroup (o usuário/grupo que criamos no final da etapa dois):
7 Administração Do Banco De Dados
Para a maioria das pessoas, é mais fácil ter uma interface gráfica para o MySQL; portanto, você também pode usar o phpMyAdmin (neste exemplo em http://server1.example.com/phpMyAdmin/ ou http://192.168.0.100/phpMyAdmin/) para administrar o banco de dados pureftpd.

Sempre que você quiser criar um novo usuário, você deve criar uma entrada na tabela ftpd, então explicarei as colunas desta tabela aqui:
Tabela ftpd:
User: O nome do usuário virtual do PureFTPd (por exemplo, exampleuser).
status: 0 ou 1. 0 significa que a conta está desativada, o usuário não pode fazer login.
Password: A senha do usuário virtual. Certifique-se de usar a função MD5 do MySQL para salvar a senha criptografada como uma string MD5:

UID: O userid do usuário ftp que você criou no final da etapa dois (por exemplo, 2001).
GID: O groupid do grupo ftp que você criou no final da etapa dois (por exemplo, 2001).
Dir: O diretório home do usuário virtual do PureFTPd (por exemplo, /home/www.example.com). Se não existir, será criado quando o novo usuário fizer login pela primeira vez via FTP. O usuário virtual será preso a este diretório home, ou seja, ele não pode acessar outros diretórios fora de seu diretório home.
ULBandwidth: Largura de banda de upload do usuário virtual em KB/sec. (kilobytes por segundo). 0 significa ilimitado.
DLBandwidth: Largura de banda de download do usuário virtual em KB/sec. (kilobytes por segundo). 0 significa ilimitado.
comment: Você pode inserir qualquer comentário aqui (por exemplo, para sua administração interna). Normalmente, você deixa este campo vazio.
ipaccess: Insira endereços IP aqui que são permitidos a conectar-se a esta conta FTP. * significa que qualquer endereço IP é permitido conectar-se.
QuotaSize: Espaço de armazenamento em MB (não KB, como em ULBandwidth e DLBandwidth!) que o usuário virtual pode usar no servidor FTP. 0 significa ilimitado.
QuotaFiles: quantidade de arquivos que o usuário virtual pode salvar no servidor FTP. 0 significa ilimitado.
8 FTP Anônimo
Se você quiser criar uma conta ftp anônima (uma conta ftp que todos podem fazer login sem uma senha), você precisa de um usuário e um grupo chamados ftp. Ambos foram criados automaticamente quando você instalou o pacote pure-ftpd, então você não precisa criá-los manualmente. No entanto, o diretório home do ftp é /srv/ftp por padrão, mas eu gostaria de criar o diretório ftp anônimo em /home/ftp (os diretórios ftp dos usuários normais também estão em /home, por exemplo, /home/www.example.com). Mas, claro, você pode usar o diretório /srv/ftp para ftp anônimo, se preferir.
Se você quiser usar /home/ftp, abra /etc/passwd e altere o diretório home do usuário ftp de /srv/ftp para /home/ftp (não faça isso se quiser usar /srv/ftp):
vi /etc/passwd[...]
#ftp:x:40:49:Conta FTP:/srv/ftp:/bin/bash
ftp:x:40:49:Conta FTP:/home/ftp:/bin/bash
[...] Em seguida, mova /srv/ftp para /home (não faça isso se quiser usar /srv/ftp):
mv /srv/ftp /homeEm seguida, criamos o diretório /home/ftp/incoming que permitirá que usuários anônimos façam upload de arquivos. Daremos ao diretório /home/ftp/incoming permissões de 311 para que os usuários possam fazer upload, mas não ver ou baixar nenhum arquivo nesse diretório. O diretório /home/ftp terá permissões de 555, o que permite ver e baixar arquivos:
chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/(Se você quiser usar /srv/ftp em vez disso, substitua /home/ftp por /srv/ftp nos comandos acima.)
Usuários anônimos poderão fazer login e serão permitidos a baixar arquivos de /home/ftp, mas os uploads serão limitados a /home/ftp/incoming (e uma vez que um arquivo é enviado para /home/ftp/incoming, ele não pode ser lido nem baixado de lá; o administrador do servidor deve movê-lo para /home/ftp primeiro para torná-lo disponível para outros).
Agora precisamos configurar o PureFTPd para ftp anônimo. Abra /etc/pure-ftpd/pure-ftpd.conf e certifique-se de que você tenha as seguintes configurações nele:
vi /etc/pure-ftpd/pure-ftpd.conf[...]
NoAnonymous no
[...]
AnonymousBandwidth 8
[...]
AnonymousCantUpload no
[...] (A configuração AnonymousBandwidth é opcional - permite que você limite as larguras de banda de upload e download para usuários anônimos. 8 significa 8 KB/sec. Use qualquer valor que você desejar ou comente a linha se não quiser limitar as larguras de banda.)
Finalmente, reiniciamos o PureFTPd:
systemctl restart pure-ftpd.service9 Links
- OpenSUSE: http://www.opensuse.org/
- PureFTPd: http://www.pureftpd.org/
- phpMyAdmin: http://www.phpmyadmin.net/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.