Instalando e configurando o PureFTPD

Atualizado em 14/06/2005 às 17:31:55

Gosto muito do Vsftpd, mas o PureFTP me foi muito útil por que precisei interagir com o mysql e se fosse usar o vsftpd teria muito trabalho, então quando usei o PureFTPD, foi amor a primeira vista.

O Pure-FTP usa a lincensa (BSD) e é baseado no Troll-FTPd. Seu foco está na eficiência e na facilidade de utilização. É um excelente servidor de ftp, tanto para pequenas aplicações, quanto para provedores de hospedagem. Ele tem suporte a quase todos os tipos de autenticação: LDAP, MySQL, PostgreSQL, unix users e também tem um sistema de autentição próprio. Em nossa instalação vamos usá-lo com suporte a MySQL.

Para iniciar a instalação, vamos começar baixando o source:

cd /usr/src

wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.20.tar.bz2

Depois de ter baixado o source, descompacte-o:

tar xvjf pure-ftpd-1.0.20.tar.bz2

Com o source descompactado, vamos compilá-lo, lembrando que estou usando o mysql, por isso suponho que você já tenha o mysql instalado e rodando.

cd pure-ftpd-1.0.20

./configure --prefix=/usr/local/pureftpd-1.0.20 \
        --sysconfdir=/etc \
        --with-mysql=/usr/local/mysql --without-humor \
        --without-banner --with-largefile \
        --with-cookie --with-throttling \
        --with-ratios --with-altlog \
        --with-ftpwho --with-boring \
        --with-quotas --with-language=brazilian-portuguese

Repare que no configure estou usando --with-mysql=/usr/local/mysql por que o meu MySQL está instalado no /usr/local/mysql, se você está usando o MySQL da própria distro, então é só mudar esta linha para --with-mysql.

Se o configure não apresentou nenhum problema, é só rodar o make e make install para instalá-lo.

make && make install

Com o PureFTPD instalado, vamos agora criar o diretório de configuração e copiar alguns arquivos:

ln -s /usr/local/pureftpd-1.0.20 /usr/local/pureftpd
mkdir -p /etc/pureftpd

cp pureftpd-mysql.conf /etc/pureftpd/
cp configuration-file/pure-ftpd.conf /etc/pureftpd/
cp configuration-file/pure-config.pl /usr/local/bin/

chmod 0755 /usr/local/bin/pure-config.pl
ln -s /usr/local/pureftpd/sbin/pure-ftpwho /usr/local/bin/

Vamos agora criar a database no MySQL:

mysql -uroot -p

create database pureftpd;

use pureftpd;

CREATE TABLE users (
  id int(32) unsigned NOT NULL auto_increment,
  User varchar(16) NOT NULL default '',
  Password varchar(64) NOT NULL default '',
  Uid varchar(11) default '2000',
  Gid varchar(11) default '2000',
  Dir varchar(128) NOT NULL default '',
  QuotaSize smallint(5) NOT NULL default '0',
  ULBandwidth smallint(5) NOT NULL default '0',
  DLBandwidth smallint(5) NOT NULL default '0',
  Status enum('0','1') NOT NULL default '1',
  Clearpass varchar(128) default '',
  PRIMARY KEY  (id,User),
  UNIQUE KEY User (User)
);

Dando privilégios ao usuário pureftpd para que ele possa acessar a base de dados:

grant all on pureftpd.* to 'pureftpd'@'localhost' identified by 'dptferup';

Cadastre agora um usuário de teste:

insert into users (User,Password,Dir,QuotaSize,ULBandwidth,DLBandwidth,Status,Clearpass) \
values ('teste',MD5('teste'),'/home/teste','50','30','15','1','teste');

Você acabou de criar o usuário teste com os seguintes dados:

User - Nome do usuário.
Password - Password do usuário encriptado com MD5.
Dir - Diretório home do usuário.
QuotaSize - Quota do usuário em MB.
ULBandwidth - Limita o Upload do usuário em KB, muito útil para preservar o link do servidor.
DLBandwidth - Similar ao anterior, só que este aqui é para download.
Status - Os valores aqui dizem se a conta do usuário está ou não ativada. 1 = ativada e 0 = desativada.
Clearpass - senha do usuario sem encriptar. Este campo muito útil, caso o usuário perca sua senha, você não precisa ficar alterando.

criaremos agora os arquivos de configuração:

cd /etc/pureftpd

mv pure-ftpd.conf pure-ftpd.conf.orig
mv pureftpd-mysql.conf pureftpd-mysql.conf.orig

segue abaixo o exemplo do arquivo /etc/pureftpd/pure-ftpd.conf:

ChrootEveryone                  yes

BrokenClientsCompatibility      no

MaxClientsNumber                50

Daemonize                       yes

MaxClientsPerIP                 8

VerboseLog                      no

DisplayDotFiles                 no

AnonymousOnly                   no

NoAnonymous                     yes

SyslogFacility                  ftp

DontResolve                     yes

MaxIdleTime                     15

MySQLConfigFile                 /etc/pureftpd/pureftpd-mysql.conf

PAMAuthentication               no

UnixAuthentication              no

LimitRecursion                  2000 8

AnonymousCanCreateDirs          no

MaxLoad                         4

AntiWarez                       yes

Umask                           133:022

MinUID                          2000

AllowUserFXP                    no

AllowAnonymousFXP               no

ProhibitDotFilesWrite           no

ProhibitDotFilesRead            no

AutoRename                      no

AnonymousCantUpload             yes

AltLog                          clf:/var/log/pureftpd.log

MaxDiskUsage                    90

KeepAllFiles                    yes

CreateHomeDir                   yes

CustomerProof                   yes

agora o arquivo /etc/pureftpd/pureftpd-mysql.conf:

#MYSQLServer             127.0.0.1

#MYSQLPort               3306

MYSQLSocket            /tmp/mysql.sock

MYSQLUser               pureftpd

MYSQLPassword           dptferup

MYSQLDatabase           pureftpd

MYSQLCrypt              any

MYSQLGetPW              SELECT Password FROM users WHERE User="\L" AND Status="1"

MYSQLGetUID             SELECT Uid FROM users WHERE User="\L" AND Status="1"

MYSQLGetGID             SELECT Gid FROM users WHERE User="\L" AND Status="1"

MYSQLGetDir             SELECT Dir FROM users WHERE User="\L" AND Status="1"

MySQLGetQTASZ           SELECT QuotaSize FROM users WHERE User="\L" AND Status="1"

MySQLGetBandwidthUL     SELECT ULBandwidth FROM users WHERE User="\L" AND Status="1"

MySQLGetBandwidthDL     SELECT DLBandwidth FROM users WHERE User="\L" AND Status="1"

#MySQLTransactions      On

Criando um usuário chamado pureftpd com UID e GID 2000:

groupadd -g 2000 pureftpd
useradd -u 2000 -g 2000 -s /bin/false pureftpd

Para o Slackware crie o script /etc/rc.d/rc.pureftpd com o conteúdo:

#!/bin/sh
#
# start/stop/restart the Pure-FTPd Server:
#
pureftpd_start() {
        /usr/local/bin/pure-config.pl /etc/pureftpd/pure-ftpd.conf
}

pureftpd_stop() {
        pkill pure-ftpd
}

pureftpd_restart() {
        pureftpd_stop
        sleep 2
        pureftpd_start
}

case "$1" in
    start)
        echo "Starting Pure-FTPd"
        pureftpd_start
        ;;
    stop)
        echo "Shutting down Pure-FTPd"
        sleep 2
        pureftpd_stop
        ;;
    restart)
        echo "Restarting Pure-FTPd"
        pureftpd_restart
        ;;
    status)
        echo "Checking for Pure-FTPd:"
        echo "Pure-FTPd running on pid `pidof $pureftpd_bin`"
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac

Se você estiver usando o Debian crie o /etc/init.d/pureftpd com o conteúdo:

#!/bin/sh
#
# start/stop/restart the Pure-FTPd Server:
#
pureftpd_bin="pure-ftpd"
pureftpd_conf="/etc/pureftpd/pure-ftpd.conf"
pureftpd_pconfig="/usr/local/bin/pure-config.pl"

pureftpd_start() {
        $pureftpd_pconfig $pureftpd_conf
}

pureftpd_stop() {
        pkill pure-ftpd
}

pureftpd_restart() {
        pureftpd_stop
        sleep 2
        pureftpd_start
}

case "$1" in
    start)
        echo "Starting Pure-FTPd"
        pureftpd_start
        ;;
    stop)
        echo "Shutting down Pure-FTPd"
        sleep 2
        pureftpd_stop
        ;;
    restart)
        echo "Restarting Pure-FTPd"
        pureftpd_restart
        ;;
    status)
        echo "Checking for Pure-FTPd:"
        echo "Pure-FTPd running on pid `pidof $pureftpd_bin`"
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac

Para colocar o pureftpd para iniciar no boot, se for no Slackware digite:

echo "# Script para a inicializacao do pureftpd

/etc/rc.d/rc.pureftpd start" >> /etc/rc.d/rc.local

Se for no Debian:

update-rc.d pureftpd defaults

Agora é só iniciar seu pureftpd com o script de inicialização e pronto, você tem um excelente servidor ftp com suporte a mysql, que garante toda a segurança de não ter usuários no sistema.

Se você tem usuários no /etc/passwd e quer migrar para o mysql, não se desespere heehehe. Fiz um script que converte os usuários automaticamente. Você pode pegá-lo aqui. Para alterar os valores pré-definidos, é só editá-lo, após isso é só executá-lo.

Para ver quais usuários estão logados no sistema, qual o ip, etc, use o comando pure-ftpwho.

Até a próxima.

Cláudio Borges

claudio[at]linuxti.pro.br
www.linuxti.pro.br