Servidor FTP · 6 min read · Jan 19, 2026

Hospedagem Virtual Com PureFTPd E MySQL (Incl. Gerenciamento De Quota E Largura De Banda) No Fedora 20 - Página 2

5 Configurar PureFTPd

Edite /etc/pure-ftpd/pure-ftpd.conf e certifique-se de que as linhas ChrootEveryone, MySQLConfigFile e CreateHomeDir estão habilitadas e parecem 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 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.

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

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 que você substituiu 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 criamos os links de inicialização do sistema para o PureFTPd e o iniciamos:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

6 Preencher O Banco De Dados E Testar

Para preencher o banco de dados, você pode usar o shell do MySQL:

mysql -u root -p
USE 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

você deve ver que o diretório /home/www.example.com (diretório home do exampleuser) foi criado automaticamente, e é de propriedade de ftpuser e ftpgroup (o usuário/grupo que criamos no final da etapa dois):

[root@server1 system]# ls -l /home/  
total 4  
drwxr-xr-x 2 ftpuser ftpgroup 4096 May  2 02:35 www.example.com  
[root@server1 system]#  

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 sob http://server1.example.com/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 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 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) aqui. Normalmente, você deixa este campo vazio.
  • ipaccess: Insira endereços IP aqui que estão autorizados a se conectar a esta conta FTP. * significa que qualquer endereço IP está autorizado a se conectar.
  • 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 homedir do ftp é /var/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 /var/ftp para ftp anônimo, se preferir.

Se você quiser usar /home/ftp, abra /etc/passwd e mude o homedir do usuário ftp de /var/ftp para /home/ftp (não faça isso se você quiser usar /var/ftp):

vi /etc/passwd

| [...] #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin [...] |

Em seguida, mova /var/ftp para /home (não faça isso se você quiser usar /var/ftp):

mv /var/ftp /home

Em 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 que permitem 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 /var/ftp em vez disso, substitua /home/ftp por /var/ftp nos comandos acima.)

Usuários anônimos poderão fazer login e poderão 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 [...] AntiWarez 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.service

9 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.