Mini-Howto Compilando o Pure ftpd com suporte ao OpenLDAP Autor: André Alexandre Gaio aagaio (at) linwork.com.br O que é o pure-ftpd??? Pure-FTPd é um servidor de ftp rápido, estável, concordante com o padrão de servidores ftp e muito seguro, é baseado no Troll-FTPd. Este servidor foi desenhado para ser seguro e não existem históricos de vulnerabilidades, ele é fácil de configurar e é especialmente desenhado para kernel's modernos. Foi portado com sucesso para Linux, FreeBSD,NetBSD, OpenBSD, ISOS, EkkoBSD, MirBSD, BSDi, Solaris, Darwin, Tru64, Irix, AIX and HPUX. Suas características são chroot() e/ou virtual chroot() home directories,virtual domains, built-in 'ls', anti-warez system, configurable ports for passive downloads, FXP protocol, bandwidth throttling, ratios,LDAP / MySQL / PostgreSQL-based authentication, fortune files, Apache-like log files, fast standalone mode, text / HTML / XML real-time status report, virtual users, virtual quotas, privilege separation, SSL/TLS e ainda mais. Quem usa??? Algumas empresas são: (A lista completa pode ser vista em http://www.pureftpd.org/users.shtml) SUSE, Silicon Graphics, LinkSys, the Spanish National Research Network, etc Compilação e instalação: 1-) Baixe o pacote em: # wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pureftpd-1.0.20.tar.bz2 2-) Descompacte-o em algum lugar. P. Ex: /var/tmp # cd /var/tmp; tar -xvjf pure-ftpd-1.0.20.tar.bz2 # cd pure-ftpd-1.0.20 3-) Crie o Makefile´s e os demais arquivos para a compilação com: # ./configure --with-ldap --with-cookie --with-throttling \ --with-ratios --with-altlog --with-ftpwho –-with-boring \ -–with-language=brazilian-portuguese --with-quotas \ --with-virtualhosts --with-welcomemsg Isto habilitará suporte à consequentemente: ao ldap; fortunes; controle de banda; rate de (up|down)loads; suporte a logs alternativos (o padrão é o syslog); suporte ao pure-ftpwho (lista de usuários que não podem usar o ftp); suporte à pt_BR; suporte a .ftpquota (controle de quotas pelo próprio daemon) suporte a vários servidores virtuais com um único ip; suporte a arquivos welcome.msg com mensagens. suporte a mensagens profissionais (???). *** Para maiores informações digite: ./configure --help 4-) Compile com: # make 5-) Instale: # make install OBS: Recomendo o uso do checkinstall. --> http://freshmeat.net/projects/checkinstall/ 6-) O pure-ftpd não necessita de arquivo de configuração, porém quando usamos informações de autenticação em algum banco de dados, ldap, etc, é interessante a criação do mesmo no objetivo de esconder informações sensíveis dos usuários locais que poderiam vê-las com um ps -axfwww por exemplo. Crie um diretório no /etc com o nome de pureftpd e copie o arquivo de configuração de exemplo do diretório /var/tmp/pureftpd-1.0.20/configuration-files para o /etc, e o arquivo que contém as configurações do ldap que está em /var/tmp/pure-ftpd1.0.20/pureftpd-ldap.conf. # mkdir /etc/pureftpd # cp /var/tmp/pure-ftpd-1.0.20/configuration-files/pureftpd.conf /etc/pureftpd # cp /var/tmp/pure-ftpd-1.0.20/pureftpd-ldap.conf / etc/pureftpd 7-) Edite o arquivo de configuração de acordo com as suas necessidades (o arquivo é bem comentado e auto-explicativo). Não se esqueça do principal, para fazer com que ele reconheça as configurações do ldap descomente a linha que contém a diretiva "LDAPConfigFile" e referencie o arquivo /etc/pureftpd/pureftpdldap.conf. -> LDAPConfigFile /etc/pureftpd/pureftpd-ldap.conf 8-) Copie o arquivo /var/tmp/pure-ftpd-1.0.20/configurationfiles/pure-config.pl para /usr/local/bin, e ajuste as permissões. # cp /var/tmp/pure-ftpd-1.0.20/configuration-files/pureconfig.pl /usr/local/bin # chmod 700 /usr/local/bin/pure-config.pl 9-) Crie um arquivo rc.pureftpd em /etc/rc.d com o seguinte conteúdo: ----------------------- < rc.pureftpd > ---------------------#!/bin/bash function start { BIN_DIR=/usr/local/bin CONF_FILE=/etc/pureftpd/pure-ftpd.conf [ ! -e "$CONF_FILE" ] && echo "Arquivo de configuração não encontrado." && exit if ps -axf | grep -v grep | grep pure-ftpd > /dev/null 2>&1 ; then echo "O Serviço já está em execução." ; exit fi perl $BIN_DIR/pure-config.pl $CONF_FILE > /dev/null 2>&1 if ps -axf | grep -v grep | grep pure-ftpd > /dev/null 2>&1; then echo "Servidor Pure-ftpd iniciado com sucesso." else echo "Falha na inicialiazação." ; exit fi } function stop { killall pure-ftpd } case $1 in "") start;; start) start;; stop) stop;; restart) stop; start;; *) echo "Opções possíveis: $(basename $0) {stop | start | restart}" && exit;; esac ---------------------- </ rc.pureftpd > ---------------------10-) Coloque a permissão de 700 no arquivo: # chmod 700 /etc/rc.d/rc.pureftpd 11-) Edite o arquivo /etc/pureftpd/pureftpd-ldap.conf: --------------------< pureftpd-ldap.conf >----------------LDAPServer ldap.seudominio.com.br <-- Seu servidor ldap LDAPPort 389 <-- Porta de seu servidor ldap LDAPBaseDN ou=Users,ou=TI,o=enterprise,c=BR <-- O contexto se seus usuários na árvore de diretórios LDAPBindDN cn=Manager,c=BR <-- O usuário para a conexão ao LDAP LDAPBindPW senha <-- Senha do user definido em LDAPBindDN LDAPDefaultUID 500 <-- UID default quando o usuário no ldap não possuir este campo definido. LDAPDefaultGID 100 <-- GID default quando o usuário no ldap nao possuir este campo definido. ---------------------< /pureftpd-ldap.conf >-----------------12-) Copie o schema do pureftpd para o diretório de schemas do OpenLDAP. # cp /var/tmp/pure-ftpd-1.0.20/pureftpd.schema / usr/local/etc/openldap/schema 13-) Inclua o schema do pureftpd no final dos "includes" no arquivo slapd.conf. include /usr/local/etc/openldap/schema/pureftpd.schema 14-) E agora o macete da história. A fim de não termos a desagradável mensagem de "object class violation" quando importarmos os usuários com as propriedades do pureftpd, modifique o arquivo /usr/local/etc/openldap/schema/pureftpd.schema: Onde está: ---> objectclass ( 1.3.6.1.4.1.6981.11.2.3 NAME 'PureFTPdUser' Coloque: ---> objectclass ( 1.3.6.1.4.1.6981.11.2.3 NAME 'PureFTPdUser' SUP top AUXILIARY 15-) Reinicie o slapd. 16-) O arquivo LDIF com os atributos para os usuários do pureftpd são: ----------------------- <arquivo ldif> ------------------dn: uid=user,ou=Users,ou=TI,o=enterprise,c=BR objectClass: PureFTPdUser objectClass: posixAccount cn: User da Silva uid: usilva uidNumber: 888 gidNumber: 888 homeDirectory: /home/usilva userPassword: {SSHA}1w58NLo5z... FTPStatus: enabled FTPQuotaFiles: 50 FTPQuotaMBytes: 10 FTPDownloadBandwidth: 50 FTPUploadBandwidth: 50 FTPDownloadRatio: 5 FTPUploadRatio: 1 ---------------------- </arquivo ldif> --------------------Onde: FTPStatus: enabled FTPQuotaFiles: 50 <-- enable/disable o acesso ao ftp <-- A quota em número de arquivos do objeto (usuário) FTPQuotaMBytes: 10 <-- A quota em MB do objeto (usuário) FTPDownloadBandwidth: 50 <-- A largura de banda máxima para download FTPUploadBandwidth: 50 <-- A largura de banda máxima para upload FTPDownloadRatio: 5 <-- Se você deseja forçar as pessoas a fazer upload de novos arquivos antes de poderem baixar outros arquivos, ratios são para você. Não se sabe que tipo de negócio (Warez?) você tem, mas PureFTPd é projetado para favorecer a todos. ;-) FTPUploadRatio: 1 <-- Esta linha e a de cima juntas querem dizer, para você baixar 5 arquivo, você deve subir pelo menos 1. 17-) Importe o arquivo ldif para a sua base ldap: # ldapadd -x -v -D 'cn=Manager,c=BR' -W -f <arquivo ldif> 18-) Dicas: 18.1-) Os objetos devem ser do tipo "posixAccount", embora seja possível outros tipos de objetos, leia a documentação para maiores detalhes. 18.2-) Não se esqueça que a propriedade "loginShell" deve existir para o objeto e deve apontar para um shell válido (/etc/shells): loginShell: /bin/bash Se isto não for observado você pode digitar um par nome/senha válidos no login e receber a mensagem: "Sorry, I can't trust you". 18.3-) Para melhorar a performance de pesquisa ao ldap acrescente esta linha no final de seu arquivo slapd.conf e dê um restart no slapd: --> index uid pres,eq,sub 19-) Inicie o pure-ftpd e faça os testes. 20-) Be happy! :-) Observação: Este artigo pode ser reproduzido à vontade desde que seja preservado o nome do autor. Qualquer dúvida, por favor leia a documentação do programa. Sugestões? Por favor email-me: Autor: André Alexandre Gaio Linwork Informática aagaio (at) linwork.com.br "...Porquê Deus amou o mundo de "tal" maneira, que deu o Seu Filho único para que todo aquele que Nele crer não pereça, mas tenha a vida eterna..." (João 3:16)