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: 86.972 ]

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  proftpd_admin@localhost 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

Servidor de e-mail com OpenBSD - Postfix & Cia

Instalando o DB Designer

ProFTPD + ClamAV - FTP livre de vírus

Instalação do CentOS 5.3

Servidor FTP com NetBSD (PureFTPD + MySQL)

Leitura recomendada

Webconferência com OpenMeetings no Debian 5.0

Redes de comunicação sem fio (Wireless)

Instalação do serviço de NTP (servidor de tempo) no Debian

Configurando modem MF622 no Linux com velocidade superior a 512K

OpenMeetings - Configuração no Ubuntu Server 11.10

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts