FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD - Virtual Hosting com PureFTPd e MySQL
 
08.07  
Inicio arrow Artigos arrow Virtual Hosting com PureFTPd e MySQL
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histrico da Lista
Forum
Keyserver
PC-BSD: Artigos
PC-BSD: Notcias
Galeria de Imagens
Contador Usurios FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS / Twitter
-
DOC-BR (FUG BR)
Introduo
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usurio

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


Virtual Hosting com PureFTPd e MySQL PDF Imprimir E-mail
Por Felippe de Meirelles Motta   
14/05/2007
Pure-FTP logoPublico mais um bom artigo que atinge um bom nível de usuários, sempre tendo a necessidade de construir um servidor FTP para empresa, e seus clientes. Conta com a instalação de um utilitário web para administração deste servidor web, tanto para o banco de dados, quanto para os usuários de FTP.

Este documento descreve como fazer para instalar um servidor PureFTPd que usa usuários virtuais de um banco de dados MySQL  ao invés de usuários reais do sistema. Isto é muito mais flexível e permite ter milhares de usuários FTP no mesmo servidor. Além disso, mostrarei o uso de quota e limites de upload/download com esta instalação. As senhas serão armazenadas e encriptadas como MD5 no banco de dados.

Este artigo foi originalmente escrito para utilização em um servidor Debian, portanto, adaptei o mesmo de linguagem simples para utilização no FreeBSD.

Para a administração do banco de dados MySQL você pode usar algumas ferramentas baseadas na web como phpMyAdmin, no qual será também instalado neste artigo. phpMyAdmin é uma interface gráfica confortável no qual substitue a necessidade de uso das linhas de comandos.

Este tutorial é baseado em FreeBSD 6.2-STABLE. Este artigo é um guia prática, não cobrindo os fundos teóricos. Este artigo aborda apenas uma das possibilidades de se montar este ambiente, visto que será a mais simples possível.

1 Nota preliminar

Neste tutorial eu uso o hostname servidor.exemplo.com.br com o endereço IP 192.168.0.100. Estas configurações são modificadas por você, então você tem que mudar para o apropriado.

2 Instalar MySQL e phpMyAdmin

Isto pode ser instalado facilmente pelo ports:

# cd /usr/ports/databases/mysql51-server ; make install clean
# rehash && echo 'mysql_enable="YES" >> /etc/rc.conf
# /usr/local/etc/rc.d/mysql-server start


Definindo a senha de root do MySQL

# mysqladmin -u root password SUA_SENHA

Vamos preparar o ambiente para instalação do phpMyAdmin, ou seja, instalaremos agora o Apache + PHP.

# cd /usr/ports/www/apache20 ; make install clean
# cd /usr/ports/lang/php5 ; make install clean

(Marque a opção APACHE, e desmarque a opção IPV6)

Adicione as seguintes linhas no seu /usr/local/etc/apache2/httpd.conf

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


E configure a diretiva DirectoryIndex, adicionando index.php ao final da linha.

Lembre-se de configurar as diretivas ServerName e Listen para seu servidor.

# echo 'apache2_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/apache2.sh start


Finalmente instalando o phpMyAdmin.

# cd /usr/ports/databases/phpmyadmin ; make install clean
(Não precisa marcar/desmarcar quaisquer opções)

Verifique se os dois subiram com o seguinte comando:

# sockstat -4l | grep -e httpd -e mysql

3 Instalar PureFTPd com suporte MySQL

# cd /usr/ports/ftp/pure-ftpd
# make config
(Selecione MySQL e deixe as demais)
# make install clean
# echo 'pureftpd_enable="YES"' >> /etc/rc.conf


Então nós criamos um grupo FTP (grupoftp) e usuário (usuarioftp) que será onde todos nossos usuários virtuais serão mapeados.

# pw groupadd grupoftp -g 1002
# pw useradd -n usuarioftp -c "Usuarios FTP" -d /dev/null -g grupoftp -s /sbin/nologin


4 Criar a database MySQL para o Pure-FTPd

Agora nós criamos uma database chamado pureftpd e um usuário MySQL chamado pureftpd no qual o Pure-FTPd usará depois para conectar em sua database:

# mysql -u root -p

mysql> CREATE DATABASE pureftpd;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pftp'@'localhost' IDENTIFIED BY 'pftpsenha';
mysql> FLUSH PRIVILEGES;

Modifique 'senha' para a senha desejada para estes usuários, no qual deverá ser configurado posteriormente no Pure-FTPd.

mysql> USE pureftpd;
mysql> CREATE TABLE users (
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;
mysql> quit;

(Estou assumindo que o hostname de seu servidor ftp seja servidor.exemplo.com.br) você pode acessar phpMyAdmin sob http://servidor.exemplo.com.br/phpmyadmin/ (você pode também usar o endereço IP ao invés do hostname) em um navegador e logar como usuário pureftpd. Então você pode visualizar a database. Depois você pode usar o phpMyAdmin para administrar seu servidor Pure-FTPd.

5 Configurando PureFTPd

# cp /usr/local/etc/pureftpd-mysql.conf.sample /usr/local/etc/pureftpd-mysql.conf
# ee /usr/local/etc/pureftpd-mysql.conf


Socket /var/run/mysqld/mysqld.sock
MYSQLServer localhost
MYSQLPort 3306
MYSQLUser pftp

MYSQLPassword pftpsenha
MYSQLDatabase pureftpd
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")

Esteja certo que você mudou o campo 'senha' com a senha real do MySQL do seu usuário pureftpd na linha MYSQLPassword! Por favor note que nós usamos md5 como método em  MYSQLCrypt, no qual nós iremos armazenar as senhas de usuários como uma string MD5 na database obtendo mais segurança do que usar senhas em textos simples.

MaxClientsNumber - Número de clientes simultaneos;
MaxClientsPerIP - Número máximo de clientes por IP;
VerboseLog - Ligar o modo debug para os comandos de FTP dos usuários;
MaxIdleTime - Tempo máximo de IDLE que o usuário terá antes de ser desconectado;
MySQLConfigFile - Define o arquivo de configuração do MySQL;
LimitRecursion files sub-dirs - Aqui será definido quantos arquivos e sub-diretórios poderá ser mostrado para os clientes (ex: LimitRecursion 2000 8 - serão mostrados 2000 arquivos e até 8 sub-diretórios)
ChrootEveryone - Enjaular por padrão os usuários FTP;
CreateHomeDir - Criar o home do usuário automaticamente;

6 Populando o banco de dados e testando

Para popular a database você pode usar a shell MySQL:

# mysql -u root -p

mysql> USE pureftpd;


Agora nós criamos o usuário usuariofug com o Status 1 (no qual define-o como uma conta ftp ativa), a senha secreta (na qual será armazenada e encriptada usando função MD5 do MySQL), o UID e GID 2001 (use o userid e groupid do usuário/grupo que você criou no fim do passo 2), o diretório home /home/www.exemplo.com.br, um controle de upload e download de 100KB/sec, e uma quota de 50 MB:

mysql> INSERT INTO `users` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('usuariofug', '1', MD5('senhasecreta'), '2001', '2001', '/home/www.dominio.com.br', '100', '100', '', '*', '50', '0');
mysql> quit;

Agora abra seu programa cliente de FTP sob sua área de trabalho (algo como WS_FTP ou SmartFTP se você está sob um sistema Windows ou gFTP sob um Desktop Linux) e tente conectar-se. Como hostname você usa servidor.dominio.com.br (ou endereço IP do servidor), o username será usuariofug, e a senha é senhasecreta.

Agora se você rodar:

# ls -l /home

você poderá ver que o diretório /home/www.dominio.com.br (diretório home do usuariofug) foi criado automaticamente, e está agregado por usuarioftp e grupoftp (o usuario/grupo que nós criamos no fim do passo 2) como donos.

servidor:# ls -l /home
total 8
drwxr-xr-x 2 administrator adminisdrator 4096 2007-04-23 14:25 administrador
drwxr-xr-x 2 ftpuser ftpgroup 4096 2007-04-23 17:26 www.dominio.com.br


7 Administração do Banco de dados

Para muitas pessoas isto se torna fácil, caso eles tenham um front-end para o MySQL; neste caso você pode usar o phpMyAdmin (neste exemplo sob http://servidor.dominio.com.br/phpmyadmin/) para administrar o banco de dados do pureftpd.

Sempre que você queira criar um novo uusário, você tem que criar uma entrada na tabela ftpd, assim como irei explicar os campos da tabela abaixo:

User: Seu_Usuario_Aqui (ex. usuariofug).
Status: 0 ou 1. 0 menciona que esta conta está inativa, portanto, o usuário não pode logar.
Password: A senha do usuário virtual. Confira se você está utilizando a função MD5 do MySQL para salvar a senha encriptada como uma string MD5.
UID: O userid do usuário ftp que você criou no fim do passo 2 (ex: 2001)
GID: O groupid do grupo ftp que você criou no fim do passo 2 (ex: 2001).
Dir: Diretório home do usuário virtual do PureFTPd (ex: /home/www.dominio.com.br). Se isto não existe, isso será criado quando o novo usuário logar pela primeira vez via FTP. O usuário virtual será enjaulado dentro de seu diretório home, ou seja, ele não poderá acessar outros diretórios fora deste diretório.
ULBandwidth: Controle de Upload do usuário virtual em KB/Sec, ou seja, Kilobytes por segundo. Use 0 para que seja ilimitado.
DLBandwidth: Controle de Download do usuário virtual em KB/sec, ou seja, kilobytes por segundo. Use 0 para que seja ilimitado.
Comment: Você pode inserir qualquer comentário aqui (ex: para sua administração interna). Normalmente você deixa este campo limpo.
Ipaccess: Insira os endereços IPs aqui que serão permitidos para conectar nesta conta FTP. '*' define qualquer endereço IP permitido para conectar.
QuotaSize: Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) o usuário virtual é permitido para uso sob este servidor FTP. Defina 0 como ilimitado.
QuotaFiles: Define número total de arquivos que este usuário virtual poderá salvar no servidor FTP. Defina 0 para ilimitado.

8 FTP Anônimo

Se você quer criar um usuário anônimo de ftp (uma conta que qualquer pessoa poderá logar-se sem uma senha), você pode usar algo como isto:

Primeiro cria um usuário ftp (com o homedir /home/ftp) e grupo ftp:

# pw groupadd ftp
# pw useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp


Obs:: por padrão o pureftpd no FreeBSD já vem com usuário anônimo permitido, na diretiva: NoAnonymous, modifique para YES para NÃO aceitar logins anônimos.

Reinicie PureFTPd:

# /usr/local/etc/rc.d/pure-ftpd restart

Então nós criamos o diretório /home/ftp/incoming no qual irá permitir usuário anônimos para enviar arquivos. Nós iremos ter o diretório /home/ftp/incoming com permissões de 311 para que os usuários possam fazer upload, não vendo ou puxando quaisquer arquivos neste diretório. O diretório /home/ftp irá ter permissões de 555 no qual permite visualizar e puxar os arquivos:

# cd /home/ftp
# mkdir incoming
# chown ftp:nogroup incoming/
# chmod 311 incoming/
# cd ../
# chmod 555 ftp/

Agora usuários anônimos podem logar, e eles podem fazer download dos arquivos em /home/ftp, mas uploads são limitados para /home/ftp/incoming (uma vez que o arquivo seja enviado para /home/ftp/incoming, ele não poderá ser lido nem puxado, o administrador do servidor terá de movê-lo para /home/ftp primeiramente para disponibilizar para isto).

9 Links de referência

Artigo Original: http://www.howtoforge.com/debian_etch_virtual_hosting_pureftpd_mysql_quota
PureFTPd: http://www.pureftpd.org
MySQL: http://www.mysql.com
phpMyAdmin: http://www.phpmyadmin.net


Traduzido e modificado por Felippe de Meirelles Motta <lippe at fug dot com dot br>

Comentrios
Muito bom artigo
Por Renato em 20/01/2009 15:08:18
EU foi instalar e percebi que o sql esto errados pois a tabela criada users e nao ftpd como est no pureftpd-mysql.conf 
MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 
 
(Certo ) trocar em todos os sql 
MYSQLGetPW SELECT Password FROM users WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") 
 
essa linha aqui deu problema:  
Socket /var/run/mysqld/mysqld.sock 
troquei por :  
MYSQLSocket /tmp/mysql.sock 
# no caso do servidor se local e usar essa linha acima para conectar no mysql por sock 
# no preciso essa duas linha abaixo s se eu estiver usando mysql remoto  
#MYSQLServer localhost # so com mysql remoto 
#MYSQLPort 3306 
 
Grande abrao Felipe


Comente!*
Nome:
E-mail
Homepage
Ttulo:
Comentrio:

Cdigo:* Code

ltima Atualizao ( 15/06/2007 )
 
< Anterior   Prximo >
FUG-BR - Espalhando BSD
Dicas Rpidas:

Partição encheu e não sabe o motivo? Descubra com:

du -s /usr/* | sort -n

 






Wallpapers
Sua Opiniao
Online:
Ns temos 23 visitantes online


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

FUG-BR: Desde 1999, espalhando BSD pelo Brasil.