ProFTPD + MySQL - Servidor FTP com usuários em banco de dados

cvs

Aqui vamos instalar o servidor de FTP ProFTPd com suporte a MySQL para criar usuários virtuais e filtrar o IPs que podem se conectar ao serviço, assim aumentando a segurança do servidor e melhorando seu desempenho.

[ Hits: 82.817 ]

Por: Thiago Alves em 26/07/2006 | Blog: http://www.seeufosseopresidente.com.br


proftpd.conf



# Arquivo de configuração do proftpd: /etc/proftpd.conf
# Altere os locais que achar necessário de acordo com
# suas necessidades
#
#
#

ServerName      "Nome do Servidor"
ServerType      standalone
ServerIdent     on    "Servers identifying string"
DeferWelcome    on
DefaultServer   on

DisplayLogin    .welcome  # Textfile to display on login
DisplayConnect  .connect  # Textfile to display on connection
DisplayFirstChdir   .firstchdir  # Textfile to display on first changedir

UseReverseDNS   off
IdentLookups    off

Port            21
Umask           022
MaxInstances      15
MaxClientsPerHost 3    # Somente %m Conexões por host são permitidas
MaxClients        10   # Somente %m Conexões simultâneas são permitidas
MaxHostsPerUser   1

User              nobody
Group             nobody

ScoreboardFile    /var/log/scoreboard

# Some logging formats
LogFormat       default    "%h %l %u %t "%r" %s %b"
LogFormat       auth       "%v [%P] %h %t "%r" %s"
LogFormat       write      "%h %l %u %t "%r" %s %b"

# Define log-files to use
TransferLog     /var/log/proftpd.xferlog
ExtendedLog     /var/log/proftpd.access_log    WRITE,READ write
ExtendedLog     /var/log/proftpd.auth_log      AUTH auth
ExtendedLog     /var/log/proftpd.paranoid_log  ALL default
SQLLogFile      /var/log/proftpd.mysql

# Set up authentication via SQL
# ===========
AuthOrder       mod_sql.c
SQLAuthTypes    Backend
SQLConnectInfo  [email protected] root senhaXXX
SQLUserInfo     usertable userid passwd uid gid homedir shell
SQLGroupInfo    grouptable groupname gid members
SQLUserWhereClause   "disabled=0 and (NOW()<=expiration or expiration=-1 or expiration=0)"

# Log the user logging in
SQLLog PASS counter
SQLNamedQuery counter UPDATE "lastlogin=now(), count=count+1 WHERE userid='%u'" usertable

# logout log
SQLLog EXIT time_logout
SQLNamedQuery time_logout UPDATE "lastlogout=now() WHERE userid='%u'" usertable

# display last login time when PASS command is given
SQLNamedQuery login_time SELECT "lastlogin from usertable where userid='%u'"
SQLShowInfo PASS "230" "Last login was: %{login_time}"

# xfer Log in mysql
SQLLog RETR,STOR transfer1
SQLNamedQuery  transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat
SQLLOG ERR_RETR,ERR_STOR transfer2
SQLNamedQuery transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat
AllowStoreRestart       on
AllowRetrieveRestart    on
RequireValidShell       off
PathDenyFilter          "\.ftp)|\.ht)[a-z]+$"
DefaultRoot             ~
DenyFilter              *.*/


<Directory /ftp/*>
   AllowOverwrite          off
   HideNoAccess            off
   <Limit READ>
      AllowAll
   </Limit>

   <Limit WRITE>
      DenyGroup       !admins
   </Limit>
</Directory>

<Directory /ftp/usuario1/*>
   AllowOverwrite          on
   HideNoAccess            on
   <Limit STOR MKD WRITE DEL READ>
      AllowAll
   </Limit>
</Directory>

<Directory /ftp/usuario2/*>
   AllowOverwrite          on
   HideNoAccess            on
   <Limit STOR MKD WRITE DEL READ>
      AllowAll
   </Limit>
</Directory>

<Directory /ftp/usuario3/*>
   AllowOverwrite          on
   HideNoAccess            on
   <Limit STOR MKD WRITE DEL READ>
      AllowAll
   </Limit>
</Directory>

<Directory /ftp/usuario4/*>
   AllowOverwrite          on
   HideNoAccess            on
   <Limit STOR MKD WRITE DEL READ>
      AllowAll
   </Limit>
</Directory>
Página anterior     Próxima página

Páginas do artigo
   1. Iniciando
   2. Instalações
   3. proftpd.conf
   4. Bônus - Limitando IPs que podem se conectar
   5. Finalizando e criando usuários
   6. Conclusão
Outros artigos deste autor

Sylpheed - a GTK+ based, lightweight, and fast e-mail client

Slackware com kernel 2.6.10 - passo a passo

Montando um PDC com OpenBSD

Slackpkg, uma ótima ferramenta para Slackware

Apache2 + PHP + PostgreSQL + phpPgAdmin

Leitura recomendada

Instalar, configurar e navegar com softmodem no Slackware

Modem 3G no Ubuntu Linux 8.04 - Qualquer operadora

Laconica - Twitter? Open source? Sim! Eis nosso microbloging de código aberto

Implementação de VPN com OpenVPN

Amadeus: Ambiente Virtual de Aprendizagem - Instalação e Configuração

  
Comentários
[1] Comentário enviado por thelinux em 26/07/2006 - 13:37h

Thiago,

Parabéns pelo artigo.

[2] Comentário enviado por fabianotecnico em 26/07/2006 - 13:41h

Eae,

cara

Artigo de Respeito einh...muito bom!!!

[3] Comentário enviado por celiojs em 27/07/2006 - 13:45h

E aí rapaz!!
Mandando ver nos artigos!!!!
Artigo interessante.
Até mais,
Célio

[4] Comentário enviado por Airozi em 28/07/2006 - 02:44h

Legal o artigo, unica coisa ruim e q ele não
cria diretório especificado efim!!

[5] Comentário enviado por gilsonpaulo em 05/11/2006 - 01:56h

SQLHomedirOnDemand on / Adicione esta linha ao proftpd.conf
# se o diretorio nao existir criar no primeiro login

[6] Comentário enviado por baladao em 25/04/2007 - 12:25h

Usamos essa solução em servidores de hospedagem compartilhados, no entanto identificamos um problema que é um grande delay para estabelecer a conexão FTP.

Será pelo volume de acessos que é alto, ou por alguma config?

[7] Comentário enviado por airozi em 25/04/2007 - 21:05h

baladao, vc fez uma filtragem se não é o server que é fraco, link , verificou conf do BD, lembrando que bd que autentica tudo

[8] Comentário enviado por rbg000 em 27/06/2007 - 10:24h

Opa, Legal o artigo, tive um problema na parte do proftpd admin!
Estou com o proftpd e o phpmyadmin instalado e funcionando.
Qdo fui configurar o proftpd admin 1.0.4 tive um problema ao utilizar o comando mysql -psenha < misc/database_structure_mysql/db_structure.sql pois nao achou esse arquivo e tb nao entendi o q ele faz!
Qdo rodo no brownser o proftpd admin ele apresenta o seguinte erro:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/proftpdadmin/includes/db.php on line 72

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/proftpdadmin/index.php on line 25

Acredito que ele n esta enxergando minha database.
A distribuicao q estou usando eh o debian 3.1
Grato aguardo um retorno!

[9] Comentário enviado por rbg000 em 27/06/2007 - 13:56h

Acredito q o promema seja o ProFTPD admin identificar o database mysql!! se for o q devo fazer?

[10] Comentário enviado por metall em 14/11/2008 - 17:33h

Boa Tarde Estou implantando esta solucao num servidor Debian 4.0 estou com o seguinte problema apos cadastrar o usuario ele cadastra normal mais aparece este erro quando da um submit

Warning: Missing argument 4 for MySQL::do_add_vhuser(), called in /var/www/ftpadmin/user_list.php on line 11 and defined in /var/www/ftpadmin/class_database_mysql.php on line 343

Warning: Missing argument 5 for MySQL::do_add_vhuser(), called in /var/www/ftpadmin/user_list.php on line 11 and defined in /var/www/ftpadmin/class_database_mysql.php on line 343

Warning: Missing argument 6 for MySQL::do_add_vhuser(), called in /var/www/ftpadmin/user_list.php on line 11 and defined in /var/www/ftpadmin/class_database_mysql.php on line 343

Warning: Missing argument 7 for MySQL::do_add_vhuser(), called in /var/www/ftpadmin/user_list.php on line 11 and defined in /var/www/ftpadmin/class_database_mysql.php on line 343

Warning: Missing argument 8 for MySQL::do_add_vhuser(), called in /var/www/ftpadmin/user_list.php on line 11 and defined in /var/www/ftpadmin/class_database_mysql.php on line 343

Alguem saberia onde qual eh o problema

Desde Ja Agradeço.

Abraço.

[11] Comentário enviado por letwu em 17/03/2009 - 16:00h

Essa parte de limitação de IP's não funcionou aqui comigo não!

Limitei, conforme dito no passo a passo, mas não limitou a ninguém! Acessando tanto internamente quanto externamente, qualquer IP consegue acessar, independente se tem a opção Allow from xxx.xxx.xxx.xx Deny from all

Outro problema que estou tendo é que no Internet Explorer ele lista todos os diretórios, desde a raiz, e preciso que ele fique somente no diretório permitido. Este problema só acontece quando é acessado pelo Internet Explorer. Nos demais navegadores, clientes de email ou mesmo no Explorer não acontece.

PS: já coloquei a opção " DefaultRoot ~ " (sem aspas) no meu arquivo proftpd.conf


Mais alguém teve algum destes problemas?

[12] Comentário enviado por gabrielsimas em 07/04/2010 - 16:43h

Falta uma informação:

Dentro do diretório misc do proftpd_admin, existe uma subdiretório chamado config_sample, dentro dele existe este arquivo proftpd.conf no qual deve ser copiado ou apontado com link dinâmico para o diretório /usr/local/etc/ e lá se encontra justamente este arquivo copiado acima. Segue a linha encontrada no manual do Proftpd_admin:
cp misc/sample_config/proftpd.conf /usr/local/etc/proftpd.conf


Contribuir com comentário