ProFTPD com autenticação via MySQL

Artigo mostrando como instalar e configurar o ProFTPD para usar autenticação via banco de dados. Mostra também como criar Virtual Hosts e algumas configurações adicionais do ProFTPD.

[ Hits: 104.802 ]

Por: Hugo Doria em 28/01/2005 | Blog: http://hugodoria.org


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 usuario@localhost 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', 'teste@mail.com');

O comando acima mandou inserir na tabela "ftpusers" os valores: 'nome de teste', 'userteste', 'senhateste', 9000, 8099, 's', '/home/teste', '/bin/bash', 'teste@mail.com'.

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

Página anterior     Próxima página

Páginas do artigo
   1. Download e instalação do ProFTPD
   2. Criando a tabela de usuários no MySQL
   3. Configurando o ProFTPD
   4. Entendendo o arquivo proftpd.conf
   5. Criando Virtual Hosts
   6. Configurações adicionais
   7. Exemplo de proftpd.conf
   8. Concluindo
Outros artigos deste autor

KDEMod 4.1 no Arch Linux

Colocando ícones no menu do Fluxbox

AUR - Arch Linux User-Community Repository

Python no PSP: "Olá Mundo"

Como criar pacotes para o Arch Linux (parte 2) - pacotes svn e cvs

Leitura recomendada

Openfire + Gateway + MSN

Configurando o CACIC (parte 3)

Adaptador Bluetooth no Slackware

Runlevel

Instalação da placa TRENDnet TEW-421PC Wireless com ndiswrapper Debian

  
Comentários
[1] Comentário enviado por elbriga em 28/01/2005 - 10:12h

As vezes eu queria acessar meu servidor para fazer uma manutenção e demorei pra descobrir como entrar no FTP como root, então se alguém precisar é só adicionar esta linha no conf:

RootLogin on

Espero que ajude....

Ótimo artigo n0z3y.

[2] Comentário enviado por hdoria em 28/01/2005 - 14:17h

vlw pela dica ai elbriga.

E também eu acho que encontrei um erro no artigo... logo no começo. Deveria ser assim:

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

Sem o asterisco no final.

Desculpem

Abraços \o/




[3] Comentário enviado por fabio em 28/01/2005 - 14:27h

Essa solução é bem bacana. Certa vez migrei todas as contas de e-mail de um provedor pra MySQL, daí tive de encontrar as soluções pra POP, FTP e radius, acabei encontrando: qpopper, proFTPD e freeradius.Fica tudo bem integrado e o bom é que isso lhe permite uma facilidade incrível na hora de programar sistemas de gerenciamento de usuários (PHP + MySQL).

[]'s

[4] Comentário enviado por removido em 28/01/2005 - 20:23h

como eu faço para fazer um script de receba uma tela e teste o valor, se for impar mostrar na tela do dialog (calendario) onde a data marcada vai ser o número digitado,. E se for par me mostrar uma janela do dialog (horario), onde a hora vai coincidir com o numero digitado.

[5] Comentário enviado por fernandoamador em 28/01/2005 - 21:52h

ótimo

[6] Comentário enviado por claytom em 01/03/2005 - 14:35h

Amigo esta dando este erro depois da instalação, estou do FEDORA CORE 3.

Connected to localhost.
220 ProFTPD 1.2.10 Server (ProFTPD Default Installation) [127.0.0.1]
500 AUTH not understood
500 AUTH not understood
KERBEROS_V4 rejected as an authentication type
Name (localhost:root):

[7] Comentário enviado por hdoria em 01/03/2005 - 17:09h

já tentou usar outro cliente ftp?
Qual vc está usando?

[8] Comentário enviado por freehand em 02/03/2005 - 10:59h

Parabéns pelo artigo, muito bom e muito funcional ..........t+

[9] Comentário enviado por hdoria em 02/03/2005 - 17:11h

obrigado cara,
espero ter ajudado.

[10] Comentário enviado por mafioso em 04/03/2005 - 15:11h

Connected to localhost.
421 Service not available, remote server has closed connection

Alguma sugestão? Por favor, enviar para vitor em noclique.com.br.

[11] Comentário enviado por hdoria em 29/03/2005 - 10:38h

iso deve ser algo da parte referente ao mysql no proftpd.conf.

Revise suas configurações. qualquer coisa so mandar um email

[12] Comentário enviado por mafioso em 19/11/2005 - 12:03h

Ótimo artigo! Comigo funcionou blz! Parabéns por mais essa contribuição!

[13] Comentário enviado por danilorlima em 03/12/2005 - 14:31h

Instalei o vsFtp mas quero desisntalar e instalar o ProFtpd , como faço isso, ja removi o vsftpd do /usr/local/sbin mas parece que ainda esta rodando

[14] Comentário enviado por danilorlima em 03/12/2005 - 14:49h

quando vou executar proftpd, surge esse erro :
proftpd: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory

uso mysql 5.0.16

[15] Comentário enviado por nesken em 28/12/2005 - 17:34h

e se eu quiser instalar soment o proftpd pra uma simples ftp... sem autenticaçao em SQl... como eu faria????

[16] Comentário enviado por diegoszch em 12/03/2006 - 15:29h

danilorlima eu tava com o mesmo problema q vc. Testei no Mysql 3,4,5, e sempre dava este mesmo erro: "proftpd: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory", então descobri que só funcionava quando o mysql era binario. Contudo futriquei e descobri que vc tem que editar o arquivo "/etc/ld.so.conf", e colocar o endereco do lib do teu mysql (/usr/local/mysql/lib/mysql). Depois é só digitar 'ldconfig' e tudo vai funcionar corretamente.
[ ]'s
Diego

[17] Comentário enviado por d.darlan em 29/11/2006 - 14:52h

Muito bom esse artigo, me ajudou muito, muito legal mesmo, pois o artigo está muito bem explicado ao ponto de se criar um ftp server sem nenhum problema e sem nenhuma dificuldade. Seja livre, seja Linux...

[18] Comentário enviado por cleitão em 07/03/2007 - 10:55h

Fala Galera do VOL to montando um servidor de ftp na empresa onde trabalho só que o proftpd não levanta o serviço da a seguinte mensagem:

Fatal: unknown configuration directive 'SQLAuthTypes'

alguém sabe me dizer o que esta faltando???

Desde já agradeço a atenção!!!!!

[19] Comentário enviado por tpozzi em 17/04/2007 - 21:41h

Ae o artigo ficou muito bom mas eu estou com o seguinte problema.
tenho 2 dominios e os ftps deles ficam em /var/www/dominio1 e /var/www/dominio2 mas quando eu logo com o usuario do dominio1 eu consigo ir para sem problemas para a pasta do usuario2 e assim vale para o outro tambem. Como eu vou solucionar isso vcs podem me ajudar?

[20] Comentário enviado por TSM em 03/08/2007 - 20:51h

Muito bom, um dos mais completos sobre o assunto.
Parabéns.

t+

[21] Comentário enviado por gabrielvivian em 12/09/2007 - 16:31h

Quando dei o comando find / -name mysql | grep lib
apareceu o seguinte

/var/lib/mysql
/var/lib/mysql/mysql
/usr/lib/mysql
/usr/lib/perl5/site_perl/5.8.4/i486-linux/DBD/mysql
/usr/lib/perl5/site_perl/5.8.4/i486-linux/auto/DBD/mysql

qual diretorio devo usar?
abraco t+

[22] Comentário enviado por freehand em 13/09/2007 - 13:00h

gabrielvivian use o /usr/lib/mysql

Espero que ajude....

[23] Comentário enviado por gabrielvivian em 13/09/2007 - 13:18h

Opa
valeu,
usei esse mesmo e deu certo
obrigado

[24] Comentário enviado por seniDEac em 24/11/2007 - 19:35h

?comentario= seguindo o mesmo problema do FREEHAND, eu sequer acho o "--with-libraries=/usr/lib/mysql"

nãotem nada que bata com "include" + "mysql" na minha máquina, mas o MySQL está 100$ fubcionando na versão 5.0

agradeço qualquer ajuda

[]s Sena

[25] Comentário enviado por fernando_penetta em 18/01/2008 - 17:29h

Olá amigo segui passo a passo o artigo postado. A instalação não deu nenhum erro, porém quando coloco ftp.localhost pede usuário e senha, coloco o usuario cadastrado na tabela ftpusers e retorna um erro 530 login incorrect. O que faço? Obrigado.. meu e-mail é penetta@tecnovideo.com.br

[26] Comentário enviado por raihom em 24/04/2008 - 12:14h

OLA PESSOAL CONFIGUREI O PROFTPD

MAS SO NA HORA DE LOGAR ESTA DANDO O SEGINTE ERRO

PRECISO DE UM HELP

421 Service not available

favor enviar algo..para o email raihom@gmail.com

[27] Comentário enviado por zete em 28/05/2008 - 22:43h

EU INSTALEI TUDO E CONFERI , MAS NA HORA DE EXECUTAR O PROFTPD DA ESTE ERRO :


Fatal: unknown configuration directive 'SQLAuthTypes' on line 33 of '/etc/proftpd.conf'

POR FAVOR ALGUEM PODE ME AJUDAR ?

[28] Comentário enviado por petslack em 29/08/2008 - 22:59h

raihom,
não sei se vc ainda num sanou o seu problema com o erro 421.
mas vai ai uma dica...

tive o mesmo problema e fui dar uma olhada nos logs, que na minha configuração estava no arquivo "/var/log/proftpd.mysql"...se não for o seu caso então procure no arquivo de configuração do proftpd onde está o tal log do MySQL (SQLLogFile)...

Veja o erro que está dando lá...provalvelmente vai ser igual ao meu:

Aug 28 23:53:06 mod_sql/4.2.2[32179]: name: 'default'
Aug 28 23:53:06 mod_sql/4.2.2[32179]: user: 'proftpd'
Aug 28 23:53:06 mod_sql/4.2.2[32179]: host: 'localhost'
Aug 28 23:53:06 mod_sql/4.2.2[32179]: db: 'proftpd_admin'
Aug 28 23:53:06 mod_sql/4.2.2[32179]: port: '3306'
Aug 28 23:53:06 mod_sql/4.2.2[32179]: ttl: '0'
Aug 28 23:53:06 mod_sql/4.2.2[32179]: exiting mysql cmd_defineconnection
Aug 28 23:53:06 mod_sql/4.2.2[32179]: entering mysql cmd_open
Aug 28 23:53:07 mod_sql/4.2.2[32179]: exiting mysql cmd_open
Aug 28 23:53:07 mod_sql/4.2.2[32179]: unrecoverable backend error
Aug 28 23:53:07 mod_sql/4.2.2[32179]: error: '1045'
Aug 28 23:53:07 mod_sql/4.2.2[32179]: message: 'Access denied for user: 'proftpd@localhost' (Using password: YES)'

Então é só mudar os parametros do usuário da database, no meu caso que criei a database sem senha:
No proftpd.conf
"
SQLConnectInfo proftpd_admin@localhost root
"

então é só ir pra galera!!!!

[29] Comentário enviado por letwu em 04/03/2009 - 14:29h

Prezados,

Estou utilizando o Slackware 12.2 e tentei seguir o passo a passo. Estou utilizando o Mysql 5 (versão mysql-5.0.67-i486-1) e baixei a versão 1.3.2 do proftpd. Ao dar o "./configure", o arquivo roda sem nenhum problema, porém ao dar "make", ocorre os seguintes erros:

Ps: "make" e "./configure" é sem aspas. As aspas foram só pra enfatizar.


root@ftp:/usr/local/src/proftpd-1.3.2# make
cd lib/ && make lib
make[1]: Entering directory `/usr/local/src/proftpd-1.3.2/lib'
make[1]: Nothing to be done for `lib'.
make[1]: Leaving directory `/usr/local/src/proftpd-1.3.2/lib'
cd src/ && make src
make[1]: Entering directory `/usr/local/src/proftpd-1.3.2/src'
make[1]: Nothing to be done for `src'.
make[1]: Leaving directory `/usr/local/src/proftpd-1.3.2/src'
cd modules/ && make static
make[1]: Entering directory `/usr/local/src/proftpd-1.3.2/modules'
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -Iusr/include/mysql -O2 -Wall -cmod_sql_mysql.c
mod_sql_mysql.c:138:19: error: mysql.h: No such file or directory
mod_sql_mysql.c:164: error: expected specifier-qualifier-list before 'MYSQL'
mod_sql_mysql.c: In function '_build_error':
mod_sql_mysql.c:302: warning: implicit declaration of function 'mysql_errno'
mod_sql_mysql.c:302: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:304: warning: implicit declaration of function 'mysql_error'
mod_sql_mysql.c:304: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c: In function '_build_data':
mod_sql_mysql.c:315: error: 'MYSQL' undeclared (first use in this function)
mod_sql_mysql.c:315: error: (Each undeclared identifier is reported only once
mod_sql_mysql.c:315: error: for each function it appears in.)
mod_sql_mysql.c:315: error: 'mysql' undeclared (first use in this function)
mod_sql_mysql.c:316: error: 'MYSQL_RES' undeclared (first use in this function)
mod_sql_mysql.c:316: error: 'result' undeclared (first use in this function)
mod_sql_mysql.c:317: error: 'MYSQL_ROW' undeclared (first use in this function)
mod_sql_mysql.c:317: error: expected ';' before 'row'
mod_sql_mysql.c:326: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:332: warning: implicit declaration of function 'mysql_store_result'
mod_sql_mysql.c:338: warning: implicit declaration of function 'mysql_num_rows'
mod_sql_mysql.c:339: warning: implicit declaration of function 'mysql_num_fields'
mod_sql_mysql.c:344: error: 'row' undeclared (first use in this function)
mod_sql_mysql.c:344: warning: implicit declaration of function 'mysql_fetch_row'
mod_sql_mysql.c:354: warning: implicit declaration of function 'mysql_free_result'
mod_sql_mysql.c: In function 'cmd_open':
mod_sql_mysql.c:407: warning: implicit declaration of function 'mysql_ping'
mod_sql_mysql.c:407: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:419: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:419: warning: implicit declaration of function 'mysql_init'
mod_sql_mysql.c:421: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:432: warning: implicit declaration of function 'mysql_options'
mod_sql_mysql.c:432: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:432: error: 'MYSQL_READ_DEFAULT_GROUP' undeclared (first use in this function)
mod_sql_mysql.c:434: warning: implicit declaration of function 'mysql_real_connect'
mod_sql_mysql.c:434: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:436: error: 'CLIENT_INTERACTIVE' undeclared (first use in this function)
mod_sql_mysql.c: In function 'cmd_close':
mod_sql_mysql.c:571: warning: implicit declaration of function 'mysql_close'
mod_sql_mysql.c:571: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:572: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c: In function 'cmd_select':
mod_sql_mysql.c:885: warning: implicit declaration of function 'mysql_real_query'
mod_sql_mysql.c:885: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c: In function 'cmd_insert':
mod_sql_mysql.c:998: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c: In function 'cmd_update':
mod_sql_mysql.c:1096: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c: In function 'cmd_query':
mod_sql_mysql.c:1211: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c:1226: warning: implicit declaration of function 'mysql_field_count'
mod_sql_mysql.c:1226: error: 'db_conn_t' has no member named 'mysql'
mod_sql_mysql.c: In function 'cmd_escapestring':
mod_sql_mysql.c:1314: warning: implicit declaration of function 'mysql_escape_string'
mod_sql_mysql.c: In function 'cmd_checkauth':
mod_sql_mysql.c:1380: warning: implicit declaration of function 'make_scrambled_password'
make[1]: *** [mod_sql_mysql.o] Error 1
make[1]: Leaving directory `/usr/local/src/proftpd-1.3.2/modules'
make: *** [modules] Error 2

O interessante foi que eu procurei arquivo por arquivo e TODOS eles (que aparecem nos erros) existem, como por ex o primeiro que está dentro de :

/usr/include/mysql/mysql.h


Alguém tem idéia do que possa ser?

Obrigado.

[30] Comentário enviado por letwu em 05/03/2009 - 14:37h

O erro acima eu consegui resolver desinstalando o MySQL que vêm default no Slackware 12.2 e instalando "na mão", passando os seguintes parâmetros:

Depois de descompactado o pacote:

#> groupadd mysql
#> useradd -g mysql mysql
#> ./configure --prefix=/usr/local/mysql --with-unix-socket-path=/usr/local/mysql/mysql.sock
#> make
#> make install
#> cp support-files/my-medium.cnf /etc/my.cnf
#> cd /usr/local/mysql
#> bin/mysql_install_db --user=mysql
#> chown -R root .
#> chown -R mysql var
#> chgrp -R mysql .
#> bin/mysqld_safe --user=mysql &

Porém ao rodar o comando ./configure --with-modules=mod_sql:mod_sql_mysql \ --with-libraries=/usr/lib/mysql \ --with-includes=/usr/include/mysql (alterando os caminhos de acordo com os meus diretórios de instalação) , ele não encontra o "mysql.c" depois de ter compilado por vários minutos.

O engraçado é que em vários outros servidores com o MySQL rodando e em funcionamento, não se encontra este mesmo arquivo.

Alguém tem alguma idéia?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts