17 Dezembro 2017 Dom

2 visitantes e 0 Usuários online

  Indique Download Forums Links Polita de Privacidade
PC-SOS :: Internet :: Servidor FTP com autenticação via banco de dados
PC-SOS
Notícias
Anúncios
Estatística
FAQ
Usuários
Usuários Online
Conteúdo
1-Política de Privacidade
Artigos
Celular
Flash
Linux
Discos Rígidos
Hardware
Internet
Modem
MSOffice
MSOffice - Excel
Multimedia
Photoshop
Programação
Rede
Segurança
Sistema Operacional
Software
Software p/ PenDrive
Termos & Siglas
WEB
Windows
Xoops
Área de Usuário

Usuário:
Senha:
Lembrar!
Esqueci minha senha
Registrar

Pesquisa Avançada

Patrocinadores

 


Teste de Velocidade

Desenvolvido por

 

 

 

2.01.2009
Como configurar o Windows para aceitar 8GB de RAM
3.12.2008
Quando Pen Drive USB Não Aparece No Windows
15.02.2008
BBS, sistema que foi o antecessor da internet
26.11.2007
Firefox 3.0
5.10.2007
Hitachi trabalha em Blu-Ray de 100GB e 200GB
24.09.2007
Novo supercomputador entra em operação no Brasil
24.09.2007
IBM oferece software gratuito de edição de texto
19.09.2007
Processador com 80 NÚCLEOS
19.09.2007
IBM terá suíte de escritório gratuita
17.09.2007
Clone do Office online, e grátis

Servidor FTP com autenticação via banco de dados
7.08.2005

O tutorial abaixo explica como ele fez para criar um servidor ProFTPd com autenticação via usuários registrados em um banco de dados SQL.

Software necessário:

MySQL (www.mysql.com)
ProFTPd (www.proftpd.org)

Documentação utilizada:

www.mysql.com/doc/en/index.html
www.proftpd.org/docs/configs/mysql_simple.conf
www.castaglia.org/proftpd/modules/mod_sql.html
www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-SQL.html

Download e instalação dos softwares utilizados

MySQL (Não é obrigatório utilizar o MySQL, esta escolha foi com base em minha experiência com este banco. Nada impede que você utilize postgreSQL).
Baixe a versão estável mais recente do mysql de www.mysql.com. No momento, esta versão é a 4.0.15.

Para instalar esta versão do mysql, descompacte-a dentro do diretório /usr/local:
tar zxvf /usr/local/downloads/mysql-standard-4.0.15-pc-linux-i686.tar.gz

Será criado um diretório mysql-standard-4.0.15-pc-linux-i686
Crie o seguinte link:
ln -s mysql-standard-4.0.15-pc-linux-i686 mysql

Caso seja necessário, crie um usuário chamado mysql pertencendo ao grupo mysql.

Crie a base inicial do MySQL
cd mysql
scripts/mysql_install_db

Vamos agora modificar as permissões de acesso dos arquivos do MySQL
chmod -R 770 *
chown -R mysql.mysql *

Vamos agora colocar o MySQL no ar
bin/mysqld_safe &

Para testar se o MySQL está funcionando, digite:
bin/mysql

Deve aparecer uma mensagem de boas vindas e abrir um prompt "mysql>" . Saia, digitando o comando quit e pressionando a tecla ENTER.
Para facilitar um pouco, insira o caminho /usr/local/mysql/bin em seu PATH
PATH=$PATH:/usr/local/mysql/bin

Isto garante que não seja necessário digitar toda a vez o caminho completo para o cliente do mysql.

Com isto encerramos a etapa de instalação do MySQL.

ProFTPd
Baixe a versão estável (1.2.8p).

Descompacte o arquivo baixado:
cd /usr/local/src
tar jxvf /usr/local/downloads/proftpd-1.2.8p.tar.bz2

entre no diretório criado:
cd proftpd-1.2.8

Agora, vamos compilar o proftpd, não nos esquecendo de ligar o suporte a MySQL (ou postgres):
./configure --with-modules=mod_sql:mod_sql_mysql
--with-includes=/usr/local/mysql/include
--with-libraries=/usr/local/mysql/lib

Para utilizar o PostgreSQL em vez do MySQL, troque o mod_sql_mysql por mod_sql_postgres

Após alguns instantes, o ProFTPd estará pronto para ser compilado. Mas antes de compilar-mos, é necessário fazer uma alteração em um arquivo do proftpd. Abra o arquivo modules/mod_sql_mysql.c com o editor de sua preferência e localize a linha 136:
#include

Deixe-a assim:
#include

Agora sim, o ProFTPd está pronto para ser compilado e instalado
make

Caso você, como eu, esteja utilizando o Kurumin, e nesta etapa apresentar um erro /usr/bin/ld: cannot find -lz, instale o pacote zlib1g-dev e re-execute o comando make.

E finalmente, vamos instalar o ProFTPd:
make install

Neste ponto, temos o MySQL rodando e o ProFTPd instalado. Vamos agora configurar o ProFTPd:

Precisamos antes, criar as tabelas necessárias no MySQL (usuários de postgres precisam adaptar este trecho):

mysql Chama o cliente em modo texto do mysql

create database proftpd; Cria um banco de dados chamado proftpd, este nome foi escolhido por ficar fácil de lembrar

use proftpd Seleciona o banco recém criado

create table usuario (
Usuario char(30),
Senha char(30),
UID int,
GID int,
DirBase char(30),

Shell char(30)); Cria a tabela de usuários. Aqui são definidos os usuários que podem utilizar o serviço de ftp, que UID/GID serão atribuídos a eles e qual o diretório que eles tem acesso.

grant all on proftpd.* to proftpd_user@localhost identified by

'proftpd_password'; Cria um usuário para o ProFTPd poder acessar a base de dados, dando todos os direitos a ele sobre o banco de dados "proftpd".

Este usuário chama-se proftpd_user e sua senha é proftpd_password.

flush privileges; Faz com que o mysql re-leia a tabela de permissões.
insert into usuario values

('teste','teste',1001,1001,'/home/teste','/bin/bash'); Insere um usuário para testes. Note que os campos UID e GID devem ser válidos.

Preparando o ProFTPd para utilizar esta base de dados criada:

Edite o arquivo /usr/local/etc/proftpd.conf com seu editor favorito.
Insira as seguintes linhas no arquivo:
SQLAuthTypes Plaintext
SQLAuthenticate users
SQLConnectInfo proftpd@localhost proftpd_user proftpd_password
SQLUserInfo usuario usuario senha uid gid dirbase shell

O segredo está nestas 2 últimas linhas:
SQLConnectInfo indica ao ProFTPd qual banco deve conectar e com que usuário e senha.
SQLUserInfo é composto dos seguintes campos:
Nome da tabela (neste nosso exemplo, usuario)
Campos utilizados (Login, password, UID, GID, HomeDir e Shell).

Inicialize o proFTPd (execute o comando proftpd) e tente fazer um ftp com o usuário teste e senha teste (criados agora a pouco).
Neste ponto já temos o proFTPd autenticando via MySQL. Nada mais é necessário para funcionar. Abaixo tem alguns pontos que podem ser melhorados nesta integração ProFTPd e MySQL.

Para dificultar um pouco as coisas, vamos supor que seja necessário fazer uma verificação extra para aceitar ou não a conexão de determinado usuário. (Você pode manter o cadastro de usuários mas por algum motivo quer bloquear momentaneamente algum usuário, por exemplo).
Vamos inserir um novo campo na tabela de usuários. Este campo indicará se o usuário está temporariamente bloqueado ou não.

mysql proftpd
alter table usuario add bloqueado char(1) default 'N';
quit

Agora precisamos informar ao proFTPd que ele também precisa verificar se este campo contém 'N'.

Edite novamente o arquivo /usr/local/etc/proftpd.conf e insira o seguinte parâmetro:
SQLUserWhereClause "bloqueado='N'"

Você pode criar qualquer verificação extra necessária, como limitar alguns usuários a se conectarem apenas de manhã, ou apenas nas quintas-feiras. Sua imaginação é o limite.

Reinicialize o profTPd e teste novamente, variando os valores para o campo bloqueado.

Gerando o log de conexões e transferências.

Agora, nós precisamos gerar no MySQL as informações referentes ao log do ProFTPd, quem conectou, quando conectou e o que transferiu, por exemplo.
Novamente vamos voltar ao MySQL para criar as tabelas que reterão estas informações. Neste exemplo, vou criar apenas uma tabela que conterá o que o usuário fez.

Nada impede que você crie mais tabelas.
mysql proftpd
create table log (id int unsigned not null auto_increment primary key,
Usuario char(30),
Host char(15),
DataHora datetime,
Acao char(20),
Referencia text);
quit

Com a tabela criada, vamos agora alterar o ProFTPd para gravar nela os dados necessários. Abra o arquivo /usr/local/etc/proftpd.conf novamente e insira as seguintes linhas:


SQLNamedQuery conexao INSERT "'%u','%a',now(),'conexão',null" log
SQLNamedQuery download INSERT "'%u','%a',now(),'download','%f'" log
SQLNamedQuery upload INSERT "'%u','%a',now(),'upload','%f'" log
SQLNamedQuery err_download INSERT "'%u','%a',now(),'ERRO download','%f'" log
SQLNamedQuery err_upload INSERT "'%u','%a',now(),'ERRO upload','%f'" log
SQLLog PASS conexao
SQLLog RETR download
SQLLog STOR upload
SQLLog ERR_RETR err_download
SQLLog ERR_STOR err_upload

Coloquei abaixo algumas substituições que podem ser feitas:


%a IP do usuário
%A Anonymous ou Unknown se não anônimo
%b Bytes transferidos (tanto upload quanto download)
%d Nome do diretório
%D Nome do diretório (caminho completo)
%f Arquivo transferido, com caminho absoluto
%F Arquivo transferido, da mesma forma que o cliente o encherga
%h Nome do host do cliente
%l Usuário remoto ou UNKNOWN se desconhecido
%L IP do servidor
%m Comando recebido pelo cliente
%p Número da porta local
%P Pid do processo local
%r Linha de comando completa recebida pelo cliente
%s Código numérico de resposta do FTP
%t Hora local
%T Tempo de transferência do arquivo
%u Nome do usuário autenticado
%U Nome do usuário, enviado originalmente pelo cliente

Com isso, chegamos ao final deste mini tutorial sobre autenticação do ProFTPd via banco de dados.
Não quis entrar em detalhes de como colocar os softwares rodando automaticamente a cada boot, mesmo por que não era este o objetivo deste documento.

-----
Sobre o autor:
Luciano Barcaro é graduando em ciência da computação, trabalha com desenvolvimento de software e brinca com linux desde 1998.
Email: luciano@alvaro.com.br

PC-SOS
Hits: 1838
Internet >>
 Ruim  Bom 
Comentário de Usuário: Nosso usuário podem revisar conteúdos

 

 

 

     

Número de visitas deste fev/2005 - Número de consultas ao site:

  © Copyright 2005 PC SOS. All Rights Reserved. contato@robweb.com.br