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

