ProFTPD + MySQL + DProFTPAdmin + Debian Squeeze
Aqui vou abordar a configuração do ProFTPD com autenticação em MySQL com um gerenciador web de usuários que eu desenvolvi atualmente ele esta na versão 01 então erros e correções favor me informar, pois a intenção desse gerenciador web é ajudar o usuário final.
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
Vamos instalar os pacotes para o ProFTPD dar suporte a quota
aptitude install quota quotatool -y
Agora vamos editar o /etc/fstab para acertar o suporte a quota o sistema de arquivo ext3 usa usrquota e grpquota os ext4 e xfs utilizam usrjquota e grpjquota então configure de acordo com o seu sistema de arquivos
vim /etc/fstab [...] #configurando com sistema de arquivos ext3 /dev/sda6 /home ext3 defaults,errors=remount-ro,usrquota,grpquota 0 1 #configurando com sistema de arquivos ext4 /srv/ext4 /home ext4 defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 2 #configurando com sistema de arquivos xfs /srv/xfs /home xfs defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 2
Agora vamos a configuração e ao ajuste de quotas
Vamos criar os arquivos de controle de quotas e vamos acertar as permissões deles
touch /home/aquota.user /home/aquota.group touch /home/quota.user /home/quota.group chmod 600 /home/quota.*
Agora vamos remontar o sistema de arquivos e ativar as quotas
cd / mount -o remount,rw /home quotacheck -vaguM quotaon -vagu
Para editar quota utilizarmos o seguinte comando
edquota usuario
Para visualizar as quotas dos usuários utilizamos o seguinte comando
repquota -av
Vamos instalar o MySQL e suas dependências
aptitude install mysql-server mysql-client libmysqlclient-dev -y
Agora vamos instalar o apache e suas dependências
aptitude install apache2 apache2-doc libapache2-mod-php5 libapache2-mod-perl2 php5 php5-cli \ php5-common php5-curl php5-dev php5-xmlrpc php5-gd php5-imap php5-mhash php5-mysql php5-odbc \ php-pear curl libwww-perl imagemagick -y
Agora vamos habilitar alguns módulos do apache
a2enmod ssl a2enmod rewrite a2enmod suexec a2enmod include
Vamos reiniciar o apache
/etc/init.d/apache2 restart
Vamos instalar o proftpd e o seu módulo para conexão em MySQL
aptitude install proftpd libcrypt-mysql-perl proftpd-mod-mysql -y #Opções Selecione "standalone" ou "autônomo"
Agora vamos criar o grupo e o usuário para o nosso proftpd
groupadd -g 2001 ftpgroup useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
Vamos remover arquivos que não seram necessários
cd /var/www/ rm -rf *
Obtendo o pacote do dproftpadmin
cd /var/www wget -c http://wiki.douglasqsantos.com.br/Downloads/misc/dproftpadmin_v01.tar.gz
Desempacotando o dproftpadmin
tar -xzvf dproftpadmin_v01.tar.gz
Acertando a localização dos arquivos
mv html/* . rm -rf html dproftpadmin_v01.tar.gz
Acertando as permissões de diretórios e arquivos
find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \;
Acertando o dono dos arquivos
chown -R www-data:www-data /var/www/
Agora precisamos importar o banco de dados
mysql -u root -p < database/base.sql
Agora já podemos acessar o nosso DProFTPAdmin em http://ip_servidor
- Usuário: admin
- Senha: admin
Agora vamos acertar o proftpd
vim /etc/proftpd/proftpd.conf [...] UseIPv6 off [...] IdentLookups off ServerIdent on "FTP Server ready." [...] DefaultRoot ~ [...] User proftpd Group ftpgroup [...] Include /etc/proftpd/sql.conf
Agora temos que habilitar os modulos do sql e do mysql no proftpd
vim /etc/proftpd/modules.conf [...] LoadModule mod_sql.c [...] LoadModule mod_sql_mysql.c
Agora vamos editar o arquivo de conexão do proftpd com o MySQL
vim /etc/proftpd/sql.conf <IfModule mod_sql.c> #Banco de Dados que vai ser utilizado SQLBackend mysql SQLEngine on # Utilizar o tipo de autenticação aqui estou utilizando o crypt e o plaintext SQLAuthTypes crypt plaintext #Como vai ser a autenticação SQLAuthenticate users* groups* # Aqui estamos informando como foi feita a conexão # databasename@host database_user user_password # estes parametros de usuário e senha foram importados no base.sql do dproftpadmin SQLConnectInfo dproftpadmin@localhost proftpd password #Aqui informamos para o proftpd o nome da tabela de usuários e quais campos vão ser utilizados por ele SQLUserInfo ftpuser userid passwd uid gid homedir shell # Aqui informamos para o proftpd o nome da tabela de grupos e quais campos vão ser utilizados SQLGroupInfo ftpgroup groupname gid members # Definindo o UID minimo e GID minimo SQLMinID 2001 # Criar o diretório home do usuário caso não exista CreateHome on # Fazendo o update da quantidade de acessos do usuário SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser # Fazendo o pdate da hora da modificação pelo usuário tanto upload de arquivos como remoçãoSQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser # Parametros de quota QuotaEngine on QuotaDirectoryTally on QuotaDisplayUnits Mb QuotaShowQuotas on SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies QuotaLimitTable sql:/get-quota-limit QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally #Não liberar o root a efetuar login RootLogin off #Não necessita de um shell valido RequireValidShell off </IfModule>
Agora vamos reiniciar o proftpd para testarmos a configuração
/etc/init.d/proftpd restart Stopping ftp server: proftpd. Starting ftp server: proftpd.
Vamos acertar as permissões do diretório raiz do ftp aonde o usuário admin vai ter acesso
chgrp -R ftpgroup /home/ftp chmod -R 775 /home/ftp
Agora vamos fazer um teste de conexão ftp no servidor mesmo com o usuário admin e senha admin que foi criado pelo dproftpadmin
ftp localhost Connected to localhost. 220 FTP Server ready. Name (localhost:root): admin 331 Password required for admin Password: 230-Welcome, archive user admin@localhost ! 230- 230-The local time is: Mon Dec 26 18:10:54 2011 230- 230-This is an experimental FTP server. If you have any unusual problems, 230-please report them via e-mail to <root@debian.douglasqsantos.com.br>. 230- 230 User admin logged in Remote system type is UNIX. Using binary mode to transfer files. ftp> quit 221 Goodbye.
Agora vamos criar um novo usuário no proftpdadmin e vamos efetuar login com ele
ftp localhost Connected to localhost. 220 FTP Server ready. Name (localhost:root): douglas 331 Password required for douglas Password: 230 User douglas logged in Remote system type is UNIX. Using binary mode to transfer files. ftp> mkdir novo 257 "/novo" - Directory successfully created ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list drwxr-xr-x 2 douglas ftpgroup 4096 Dec 26 18:15 novo 226 Transfer complete ftp> quit 221 Goodbye.
Need to take a look at it
<IfModule mod_quotatab.c> QuotaEngine on QuotaLog /var/log/ftpd/quota.log </IfModule>