ProFTPD com autentica??o via MySQL

  • Post author:
  • Post category:Sem categoria

Artigo retirado do site LinuxIT

Download e instala??o do ProFTPD
OBS: Estou supondo que voc? j? possui o MySQL instalado no seu computador, por isso n?o abordarei a instala??o do mesmo neste tutorial.

Pacotes utilizados
* Distribui??o utilizada: Slackware 10;
* Vers?o do ProFTPD: 1.2.10;
* Vers?o do MySQL: 4.0.20.

Hora de colocar a m?o na massa.

A primeira coisa que voc? deve fazer ? verificar se o ProFTPD foi instalado na tua m?quina atrav?s de um pacote pr?-compilado. Se sim, voc? ter? que o desinstalar.
A? voc? se pergunta: “Pra que desinstalar e instalar de novo? No m?nimo esse cara quer me fazer de besta x/”.
N?o ? bem assim. O problema ? que precisamos instalar o ProFTPD atrav?s do source para podermos habilitar o suporte ao MySQL, afinal, o objetivo ? esse certo?

No Slackware eu fiz isso:

# ls /var/log/packages/ | grep proftpd
proftpd-1.2.9-i486-3

da?:

# removepkg /var/log/packages/proftpd-1.2.9-i486-3*

OBS:Voc? ter? que adaptar os comandos de acordo com sua distribui??o ou usar o gerenciador de pacotes de sua distro.

# pkgtool
(Slackware)

Agora que desinstalamos o pacote pr?-compilado, ? hora de baixar o source.
A p?gina oficial do ProFTPD ?:

* http://www.proftpd.org

E o link para a vers?o mais atual (no momento em que fiz o tutorial) ?:

ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2
use:

# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2

ou seu navegador preferido.

Terminado o download, temos que descompactar o arquivo:

# tar xvjf proftpd-1.2.10.tar.bz2 -C /usr/local/src/
(isso descompactar? o arquivo na pasta /usr/local/src/)

# cd /usr/local/src/proftpd-1.2.10/

Preparando o arquivo para a compila??o:

Antes temos que encontrar as pastas “include” e “lib” relacionadas ao MySQL.

# find / -name mysql | grep lib
Sa?da: /usr/lib/mysql (pode variar de acordo com sua distribui??o)

# find / -name mysql | grep include
Sa?da: /usr/include/mysql (pode variar de acordo com sua distribui??o)

Com esses resultados eu posso preparar a compila??o:

# ./configure –with-modules=mod_sql:mod_sql_mysql
–with-libraries=/usr/lib/mysql
–with-includes=/usr/include/mysql

Se tudo estiver OK:

# make

Espere terminar (o tempo vai variar de acordo com seu computador) e fa?a:

# make install

OBS: N?o esque?a de substituir as pastas no –with-libraries e –with-includes pelas pastas encontradas no seu sistema ao usar os comandos:

# find / -name mysql | grep include
# find / -name mysql | grep lib

Criando a tabela de usu?rios no MySQL

Agora que j? temos o ProFTPD instalado com os m?dulos corretos, precisamos criar uma database e uma tabela onde ser?o guardados os dados dos usu?rios do FTP.

Primeiro chame o MySQL:

# mysqld_safe &
( No Slackware )

Agora crie uma database:

# mysqladmin create ftp -u root -p

Logando-se ao MySQL:

# mysql -u root -p

Agora vamos criar as tabelas. Primeiramente temos que pensar no que precisaremos para cadastrar um usu?rio. Acho que nome, login, senha, UID, GID, shell e diret?rio s?o suficientes. ? bom colocar um campo mostrando se o usu?rio ? ativo ou n?o, pois assim voc? poder? desativar determinados usu?rios temporariamente apenas modificando o conte?do desse campo.

Uma vez logado e supondo que o nome da database criada seja “ftp”, digite:

mysql> use ftp
Database changed

Criando a tabela:

mysql> CREATE TABLE ftpusers (
-> nome varchar(255) NOT NULL DEFAULT ‘fulano’,
-> login varchar(20) NOT NULL UNIQUE,
-> senha varchar(20) NOT NULL,
-> uid int(10) UNIQUE AUTO_INCREMENT,
-> gid int(10),
-> ativo char(1) NOT NULL DEFAULT ‘s’,
-> dir varchar(255) NOT NULL,
-> shell varchar(255) NOT NULL,
-> email varchar(255));
Query OK, 0 rows affected (0.00 sec)

* O comando: “CREATE TABLE ftpusers (” est? dizendo ao MySQL para iniciar a cria??o de uma tabela chamada “ftpusers”.
* “nome varchar(255) NOT NULL DEFAULT ‘fulano'” significa que a vari?vel “nome” poder? ter at? 255 caracteres e “fulano” como padr?o.
* Os outros campos seguem o mesmo esquema.

Com a tabela criada, precisamos criar um usu?rio para que o ProFTPD possa acessar a database “ftp”, que foi a que criamos e dar a ele todos os privil?gios de acesso a essa database:

mysql> GRANT ALL PRIVILEGES ON ftp.* to [email protected] IDENTIFIED BY ‘ftpsenha’; Query OK, 0 rows affected (0.03 sec)

Assim o usu?rio “usuario”, que tem como senha “ftpsenha”, ter? todos os privil?gios sobre a database “ftp”.

Entenderam? ? s? trocar “usuario” e “ftpsenha” pelo nome e senha que deseja.

Em seguida mandamos o MySQL atualizar as permiss?es:

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

Agora vamos inserir um usu?rio para usarmos como teste:

mysql> INSERT INTO ftpusers VALUES (‘nome de teste’, ‘teste’, ‘casa’, 8099, 8099, ‘s’, ‘/home/teste’, ‘/bin/bash’, ‘[email protected]’);

O comando acima mandou inserir na tabela “ftpusers” os valores: ‘nome de teste’, ‘userteste’, ‘senhateste’, 9000, 8099, ‘s’, ‘/home/teste’, ‘/bin/bash’, ‘[email protected]’.

Para verificar os usu?rios cadastrados ? s? digitar:

mysql> SELECT * FROM ftpusers;

Caso queira em ordem alfab?tica (usando “login” como refer?ncia):

mysql> SELECT * FROM ftpusers ORDER BY login;

Agora j? podemos sair do MySQL:

mysql> quit
Bye

Configurando o ProFTPD

Com a tabela criada no MySQL e um usu?rio teste cadastrado, est? na hora de configurar o ProFTPD.

Primeiramente localize o arquivo de configura??o do ProFTPD (proftpd.conf):

# find / -name proftpd.conf

No meu caso obtive isto: /usr/local/etc/proftpd.conf

Da? ? s? usar seu editor preferido:
# pico /usr/local/etc/proftpd.conf

Tudo o que voc? precisa fazer para ter o ProFTPD funcionando em cima do MySQL ? adicionar as seguintes linhas ao arquivo:

SQLAuthTypes Plaintext Crypt
SQLAuthenticate users
SQLConnectInfo [email protected] usuario ftpsenha
SQLUserInfo ftpusers login senha uid gid dir shell
SQLUserWhereClause “ativo=’s'”
SQLHomedirOnDemand on

* SQLAuthTypes Plaintext Crypt: Passwords no MySQL s?o encriptados usando CRYPT.
* SQLAuthenticate: Mostra o m?todo de autentica??o e o que autenticar.
* SQLConnectInfo [email protected] usu?rio ftpsenha: aqui ? onde s?o colocados os dados necess?rios para se conectar a database.

Modo de usar:
SQLConnectInfo [email protected] usuario_da_database senha_do_usuario

* SQLUserInfo ftpusers login senha uid gid dir shell: aqui colocamos os nomes das colunas criadas na tabela “ftpusers”.

Modo de usar:
SQLUserInfo nome_da_tabela login senha uid gid dir shell

* SQLUserWhereClause “ativo=’s'”: Indica ao ProFTPD que ele tamb?m precisa verificar se este campo possui como valor “s”.
* SQLHomedirOnDemand on: Diz ao ProFTPD para criar o diret?rio home do usu?rio caso n?o exista.

Agora que adicionamos as linhas ao proftpd.conf, tudo o que precisamos ? inicializar o servidor FTP:

# proftpd

Agora j? temos o ProFTPD configurado e rodando. Hora de test?-lo:

$ ftp localhost
Connected to localhost.
220 ProFTPD 1.2.10 Server (Angelina Jolie Me Deseja) [127.0.0.1]

Name (localhost:n0z3y): userteste
331 Password required for userteste.

Password: ******
230 User userteste logged in.

Remote system type is UNIX.
Using binary mode to transfer files.

Caso esteja tudo OK, meus parab?ns, voc? acaba de montar um servidor de FTP com autentica??o via MySQL, caso contr?rio refa?a os passos e me avise caso encontre algum erro.

Em seguida mostrarei algumas coisas legais e configura??es adicionais do ProFTPD, n?o sendo obrigat?rias para o funcionamento do servidor.

Entendendo o arquivo proftpd.conf

Agora vamos entender um pouco como funciona o arquivo de configura??o do ProFTPD.

Se voc? visualizar seu arquivo novamente, ver? que ele est? mais ou menos parecido com isso:

ServerName “ProFTPD Default Installation”
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30

User nobody
Group nogroup

Directory /*>
AllowOverwrite on
/Directory>

Anonymous ~ftp>
config
/Anonymous>

SQLAuthTypes Plaintext Crypt
SQLAuthenticate users
SQLConnectInfo [email protected]ost usuario ftpsenha
SQLUserInfo ftpusers login senha uid gid dir shell
SQLUserWhereClause “ativo=’s'”
SQLHomedirOnDemand on

Explicando as op??es:

* ServerName: Aqui ? onde ser? definido o nome do servidor. Exemplo:

ServerName “Servidor Ftp de teste”

* ServerType: Aqui voc? define o tipo do servidor. Pode ser standalone ou inetd. No arquivo acima ele est? definido como standalone.
* DefaultServer: Diz ao ProFTPD para usar a configura??o padr?o caso a conex?o n?o seja feita pelo IP da pr?pria m?quina ou por algum VirtualHost.
* Port: Porta padr?o que o ProFTPD rodar?.
* Umask 022: Serve para previnir novos diret?rios e arquivos te terem permiss?o de escrita global.
* MaxInstances: Limita o n?mero de conex?es simult?neas, em nosso caso, para 30.
* Anonymous ~ftp> e /Anonymous>: Tudo que estiver aqui dentro ser? uma configura??o espec?fica para um acesso an?nimo ao servidor.

A parte do MySQL j? foi explicada anteriormente.

Isto foi s? uma vis?o geral sobre algumas coisas b?sicas do proftpd.conf. Na verdade estas e outras op??es est?o explicadas com mais detalhes no pr?prio proftpd.conf.

Criando Virtual Hosts

A diretriz ? usada pra criar configura??es diferentes para determinados hosts e/ou IPs. Pode ser usado tamb?m para oferecer conex?es a diferentes portas na mesma m?quina.

A maneira de se criar um VirtualHost ? a seguinte:

VirtualHost endere?o_e/ou_ip>
configura??o
/VirtualHost>

Exemplos de VirtualHost:

VirtualHost www.angelina_me_quer.org>
ServerName “Estou sonhando”
ServerAdmin [email protected]
Port 21
MaxClients 05
DefaultServer on
TransferLog /var/log/proftpd/angelinameker.log
DefaultRoot /home/ftp/angelina
AllowOverwrite yes
/VirtualHost>

VirtualHost ftp.dom?nio.com.br>
ServerName “Servidor ftp”
Port 8021
DefaultRoot ~
DefaultServer on
AllowOverwrite yes
ServerAdmin [email protected]
Umask 022
TransferLog /var/log/proftpd/serverftp.log
/VirtualHost>

Configura??es adicionais

O que vimos at? agora foi uma configura??o b?sica do ProFTPD. Na verdade ele possui um grande n?mero de fun??es que podem ser de grande uso para voc?s. Justamente por ser um grande n?mero, citarei apenas algumas destas fun??es aqui.

Existem fun??es, por exemplo, que servem para personalizar as mensagens mostradas durante uma se??o no ProFTPD.

Para mostrar uma mensagem quando um usu?rio se logar voc? usa:

AccessGrantMsg “mensagem”

Exemplo:
AccessGrantMsg “Seja bem vindo %u”

* %u –> Ser? trocado pelo nome do usu?rio.

Para mostrar uma mensagem quando um usu?rio falhar ao tentar se logar use:

AccessDenyMsg “mensagem”

Exemplo:
AccessDenyMsg “Acesso negado ? %u ! V? com Deus filho …”

Para mostrar uma mensagem antes do login voc? usa:

DisplayConnect diret?rio/arquivo.msg

Exemplo:
DisplayConnect /usr/local/proftpd/connect.msg

Setando mensagem de login e logout:

DisplayLogin login.msg
DisplayQuit logout.msg
OBS: Os arquivos login.msg e logout.msg devem estar abaixo do diret?rio principal do usu?rio.

Existem fun??es que usam o tempo que o usu?rio est? conectado para executar determinadas a??es. Para desconectar um usu?rio se ele ficar ocioso durante um certo tempo:

TimeoutIdle Tempo_em_segundos

Exemplo:
TimeoutIdle 180

Desconecta o usu?rio se ele ficar ocioso por 3 minutos.

Para desconectar algu?m que n?o se logou com sucesso durante um determinado tempo:

TimeoutLogin tempo_em_segundos

Exemplo:
TimeoutLogin 60

Para desconectar um usu?rio caso ele fique um determinado tempo sem transferir nada:

TimeoutNoTransfer tempo_em_segundos

Exemplo:
TimeoutNoTransfer 120

Desconecta o usu?rio depois de 2 minutos sem transfer?ncia.

Para desconectar algu?m depois de um determinado tempo:

TimeoutSession tempo_em_segundos

Exemplo:
TimeoutSession 600

Desconecta qualquer usu?rio logado por 10 minutos.

Uma fun??o bastante ?til ? a “TransferRate”. Com ela voc? pode limitar a taxa de transfer?ncia do servidor. Para us?-la:

TransferRate RETR taxa_em_kbps:byteslivres

Exemplo:
TransferRate RETR 8:10

Limita a taxa de transfer?ncia para 8kbps.

* taxa_em_kbps: ? a taxa limite de transfer?ncia que voc? deseja aplicar.
* bytes_livres: ? a quantidade de bytes que podem ser transferidos antes do controle de taxa de transfer?ncia ser aplicado.

Outra bastante utilizada ? a:

DefaultRoot diret?rio

Exemplo:
DefaultRoot /home/tal

Com ela voc? pode limitar os usu?rios a um determinado usu?rio. Caso use:

DefaultRoot ~

voc? estar? limitando o usu?rio ao seu pr?prio home (recomend?vel).

Exemplo de proftpd.conf

ServerName “Angelina Jolie Me Deseja”
ServerType standalone
DefaultServer on
Port 8021
#Umask 022
MaxInstances 20
User nobody
Group nogroup
DefaultRoot ~
AccessGrantMsg “Uepaa!! Seja Bem Vindo %u”
AccessDenyMsg “ADEUS!”
DisplayConnect /usr/local/message.msg

TimeoutLogin 60
TimeoutNoTransfer 120
TimeoutIdle 180

# Normally, we want files to be overwriteable.
AllowOverwrite on

# Bar use of SITE CHMOD by default
Limit SITE_CHMOD>
DenyAll
/Limit>

SQLAuthTypes Plaintext Crypt
SQLAuthenticate users
SQLConnectInfo [email protected] usuario ftpsenha
SQLUserInfo ftpusers login senha uid gid dir shell
SQLUserWhereClause “ativo=’s'”
SQLHomedirOnDemand on

Concluindo …

Como dito anteriormente, isto foi apenas uma configura??o b?sica do ProFTPD. Aconselho dar uma olhada na p?gina oficial do mesmo para configura??es adicionais.

* http://www.proftpd.org

Espero ter ajudado.

[]’s

PS: Sou novo nesse neg?cio de Linux e artigos, ent?o qualquer sugest?o para que eu possa melhorar ser? muito bem vinda. Valeu, abra?o ? todos o/

[email protected]

Hugo D?ria

Este artigo veio de LinuxIT – Linux e Tecnologia
http://www.linuxit.com.br

O link desta artigo ?:
http://www.linuxit.com.br/modules.php?name=Sections&op=viewarticle&artid=727