• Nenhum resultado encontrado

Virtual Hosting com PureFTPd e MySQL

N/A
N/A
Protected

Academic year: 2021

Share "Virtual Hosting com PureFTPd e MySQL"

Copied!
5
0
0

Texto

(1)

Virtual Hosting com PureFTPd e MySQL

Autoria de Felippe de Meirelles Motta 14/05/2007

Última Atualização 15/06/2007

Publico 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.

(2)

# 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

(3)

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

(4)

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 ender eç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 ilimi tado.

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/

(5)

# 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>

Referências

Documentos relacionados

Em algumas parcelas de inventário, previamente seleccionadas, serão recolhidas amostras de folhada/manta morta e amostras de solo a duas profundidades: 0-30 cm e 30-60 cm. Com a

Na apresentação dos dados estatísticos, ficou demonstrada à todos os participantes a dimensão da pesquisa, abrangendo o setor produtivo como um todo, enfocando a produção

 Para os agentes físicos: ruído, calor, radiações ionizantes, condições hiperbáricas, não ionizantes, vibração, frio, e umidade, sendo os mesmos avaliados

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de

NÃO havendo lance(s) no LOTE 02, os bens móveis serão divididos por segmentos/categorias conforme detalhamento a saber: LOTE 03 – Bens Móveis pertencentes a CATEGORIA AUDIO

Tal será possível através do fornecimento de evidências de que a relação entre educação inclusiva e inclusão social é pertinente para a qualidade dos recursos de

Na sua qualidade de instituição responsável pela organização do processo de seleção, o Secretariado-Geral do Conselho garante que os dados pessoais são tratados nos termos do

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política