LDAP Tool Box Project Self Service Password

ltb-project_logo

O que é o LTB Self Service Password?

Quando eu estava a planejar uma implementação de servidor LDAP, pensei num problema bastante inconveniente que é o esquecimento de senha. Imagine uma horda de usuários invadindo a sua sala todos os dias para redefinir senha! Então, ao buscar por soluções, encontrei o LDAP Account Manager que possuia um módulo “Pro” para resetar senhas, mas esse era proprietário e fui obrigado a descartá-lo. Então, encontrei um projeto com um slogan bastante interessante: “LDAP Tool Box project, even LDAP administrators need help” , que em uma tradução livre significa “Projeto LDAP Tool Box, até mesmo os administradores LDAP precisam de ajuda”.

O LDAP Tool Box Project, ou simplesmente LTB, é uma compilação de ferramentas para administradores LDAP que visam facilitar a sua vida difícil. Entre tantas ferramentas, estava o Self Service Password (SSP) que é uma aplicação em PHP que permite aos usuários mudarem suas senhas em um diretório LDAP. Seus principais recursos são: política de senhas, redefinição por email, questão ou SMS e tem até recaptcha do Google.

Preparando o ambiente

O ambiente do servidor SSP será preparado em outro servidor separado do servidor LDAP.

Vamos supor que o fqdn do servidor seja meuid.dominio.local

No Debian Wheezy, instale os pacotes necessários:

# apt-get install apache2 php5 -y
# apt-get install php5-ldap
# apt-get install php5-mcrypt

Ative o módulo SSL no apache para que seus usuários executem a troca de senha através de uma conexão segura:

# a2ensite default-ssl
# a2enmod ssl
# /etc/init.d/apache2 restart

Force os usuários a serem direcionados de http para https adicionando as seguintes opções no arquivo 000-default:

# vim /etc/apache2/sites-enabled/000-default
...
 RedirectPermanent / https://meuid.dominio.local/
 UseCanonicalName Off

Instalando o SSP

Baixe a última versão do SSP na seção de downloads do site do projeto <http://ltb-project.org/>:

# wget -c http://tools.ltb-project.org/attachments/download/497/ltb-project-self-service-password-0.8.tar.gz

Descompacte o arquivo e mova o conteúdo para o diretório raíz do apache:

# tar zxvf ltb-project-self-service-password-0.8.tar.gz
# mv ltb-project-self-service-password-0.8/* /var/www/
# chown root.root -Rfv /var/www/

Pronto! O SSP está instalado e já estará acessível no endereço http://meuid.dominio.local

Configurando

O arquivo de configuração é comentado, portanto, torna-se uma ação bastante intuitiva.

# vim /var/www/conf/config.inc.php

No meu caso, o arquivo ficou assim:


Conectando via SSL

Caso tenha habilitado o TLS no servidor LDAP, é interessante que instale a ferramenta ldap-utils para executar alguns testes:

# apt-get install ldap-utils

Copiar o certificado auto-assinado da CA criado no servidor LDAP para o servidor SSP (no caso, em /etc/ldap/tls/cacert.pem).

Atenção: Não tive sucesso em conectar o SSP no LDAP por START_TLS. Portanto, no servidor LDAP, você deve ativar o serviço na depreciada porta ldaps para conectar por SSL. =(

Assim, faça a seguinte alteração:

# vim /etc/default/slapd
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Editar o arquivo de configuração do LDAP necessário para a conexão.

# vim /etc/ldap/ldap.conf
#
# LDAP Defaults
#
 # See ldap.conf(5) for details
# This file should be world readable but not world writable. 
BASE    dc=dominio,dc=local
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
URI     ldaps://ldap.dominio.local
 #SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never # TLS certificates (needed for GnuTLS)
#TLS_CACERT     /etc/ssl/certs/ca-certificates.crt
TLS_CERT /etc/ldap/tls/cacert.pem
TLS_REQCERT allow

Executar o teste:

# ldapsearch -x

Enviando email através de um servidor que exija autenticação

Caso seu servidor de email (de preferência um Zimbra 😀 ) exija autenticação, e eu espero que sim, instale a classe phpmailer para que seja possível enviar o “token” para o email do usuário:

# apt-get install libphp-phpmailer

Edite o arquivo index.php adicionando mais uma opção logo no início do arquivo na parte de “includes”:

# vim /var/www/index.php
require_once("libphp-phpmailer/class.phpmailer.php");

Alterar a função send_mail() da seguinte forma:

# vim /var/www/lib/functions.inc.php
function send_mail($mail, $mail_from, $subject, $body, $data) {      $result = false;      if (!$mail) {         error_log("send_mail: no mail given, exiting...");         return $result;     }      /* Replace data in mail, subject and body */     foreach($data as $key => $value ) {         $mail = str_replace('{'.$key.'}', $value, $mail);         $mail_from = str_replace('{'.$key.'}', $value, $mail_from);         $subject = str_replace('{'.$key.'}', $value, $subject);         $body = str_replace('{'.$key.'}', $value, $body);     }      /* Encode the subject */     mb_internal_encoding("UTF-8");     $subject = mb_encode_mimeheader($subject);      /* Set encoding for the body */     $header = "MIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n";      /* envio de email */     $pmail = new PHPMailer();     $pmail->IsSMTP();     $pmail->SMTPSecure = "tls";     $pmail->SMTPAuth = true;     $pmail->CharSet = "utf-8";     $pmail->Host = "mail.dominio.local";     $pmail->Username = "registro";     $pmail->Password = "senha";     $pmail->SMTPDebug = 0;     $pmail->Port = 587;     $pmail->From = "$mail_from";     $pmail->Sender = "registro@dominio.local";     $pmail->FromName = "Registro - Instituição X";     $pmail->AddAddress("$mail");     $pmail->IsHTML(true);     $pmail->Subject = $subject;     $pmail->Body = $body;     $pmail->AltBody = $body;      $result = $pmail->Send();     $pmail->ClearAllRecipients();      /* Send the mail */     //if ($mail_from) {     //    $result = mail($mail, $subject, $body, $header."From: $mail_from\r\n","-f$mail_from");     //} else {     //    $result = mail($mail, $subject, $body, $header);     //}      return $result;  }

Espero que facilite a sua vida.

Ah! Gostaria de agradecer o Marcos Thomaz pela ajuda com o PHPMailer. Valeu PythonMan!!!

Geowany Galdino escreveu 45 artigos

Assistente em Tecnologia da Informação na Universidade Federal do Acre. Licenciado em História na mesma instituição.

Um comentário em “LDAP Tool Box Project Self Service Password

Deixe um comentário

Seu endereço de email não será publicado. Os campos com * são obrigatórios

Você pode usar estes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>