Configurando um Servidor Ldap no Debian

Observações:

  • Iremos levar em consideração que você possui uma instalação “limpa” do S.O. Debian GNU/Linux.
  • Os serviços que estão sendo usandos na solução também devem estar devidamente configurados e em operação.

Instalando o Servidor LDAP

Antes de instalar o Ldap, precisamos ajustar o arquivo hosts.

root@debian:~# vi /etc/hosts

127.0.0.1       localhost.localdomain    localhost
10.0.0.22       nome.dominio.com.br      nome

Em seguida, vamos instalar os pacotes.

root@debian:~# aptitude install slapd ldap-utils

Omitir a configuração do servidor OpenLDAP: <Não>
Senha do admin: *********
Confirme a senha: *********
Permitir protocolo LDAPv2? <Não>

Em seguida

root@debian:~# aptitude install libnss-ldap libpam-ldap

Identificador de Recurso Uniforme (URI) do Servidor LDAP: ldap://localhost:389
O nome distinto ("distinguished name") da base de procura: dc=dominio,dc=com,dc=br
Versão LDAP a ser utilizada: 3
A base de dados LDAP requer login? <Não>
Privilégios especiais LDAP para o root? <Não>
Permitir a leitura/escrita no ficheiro de configuração apenas para o dono? <Não>
O nsswitch.conf não é gerido automaticamente. <OK>
Tornar a conta root local o administrador da base de dados. <Não>
A base de dados LDAP requer autenticação? <Não>

Configurando o Servidor LDAP

Agora vamos configurar o servidor LDAP e habilitar o sistema operacional para realizar autenticação no mesmo. Verifique as seguintes linhas:

root@debian:~# vi /etc/ldap/slapd.conf

#######################################################################
# Diretivas Globais:

# Recursos disponiveis
#allow bind_v2

# Definindo os schemas
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/samba.schema

# Local do Pidfile
pidfile         /var/run/slapd/slapd.pid

# Argumentos adicionar que sao passados ao slapd
argsfile        /var/run/slapd/slapd.args

# Habilitando Logs
loglevel        256

# Opcoes de modulos
modulepath      /usr/lib/ldap
moduleload      back_hdb

# Quantidade maxima de entradas que serao retornadas na busca
sizelimit 5000

# Quantidade de CPUs que serao usados para as indexacoes
tool-threads 1

#######################################################################
# Especificando as diretivas de backend
backend         hdb

#######################################################################
# Especificando diretivas para a base de dados
database        hdb

# Base DN
suffix          "dc=dominio,dc=com,dc=br"

# Root DN
rootdn          "cn=admin,dc=dominio,dc=com,dc=br"
#rootpw         123

# Diretorio de armazenamento da base de dados
directory       "/var/lib/ldap"

# Definindo o tamanho do cache - Para o Debian vamos usar o padrao de 2MB
dbconfig set_cachesize 0 2097152 0
# Numero de objetos que estarao em lock
dbconfig set_lk_max_objects 1500
# Numero de locks
dbconfig set_lk_max_locks 1500
# Numero de lockers
dbconfig set_lk_max_lockers 1500

# Indexes
#index           objectClass eq
index objectClass,entryCSN,entryUUID      eq,pres
index sambaSID                            eq
index sambaPrimaryGroupSID                eq
index sambaDomainName                     eq
index ou,cn,mail,surname,givenname        eq,pres,sub
index uidNumber,gidNumber,loginShell      eq,pres
index uid,memberUid                       eq,pres,sub

# Tempo em que a entrada e modificada
lastmod         on

# Permissoes e ACLs
access to attrs=userPassword,shadowLastChange,sambaLmPassword,sambaNtPassword
        by dn="cn=admin,dc=dominio,dc=com,dc=br" write
        by anonymous auth
        by self write
        by * none

access to dn.base=""
        by * read

access to *
        by dn="cn=admin,dc=dominio,dc=com,dc=br" write
        by * read

Obs.: Um exemplo de arquivo slapd.conf pode ser obtido em http://downloads.fabriciovc.eti.br/ldap/

root@debian:~# vi /etc/ldap/ldap.conf

BASE    dc=dominio,dc=com,dc=br
URI     ldap://127.0.0.1:389

Não esquecendo de reiniciar o serviço.

root@debian:~# /etc/init.d/slapd stop
root@debian:~# /etc/init.d/slapd stop

Configurando a PAM

E agora vamos habilitar a PAM para autenticar no LDAP, permitindo assim que o sistema operacional possa utilizar os usuários e grupos contidos no servidor.

Nota: No Debian Squeeze algumas configurações de PAM já são configuradas automaticamente.

root@debian:~# vi /etc/pam.d/common-account
#account    required      pam_unix.so
account     sufficient    pam_ldap.so
account     required      pam_unix.so try_first_pass
root@debian:~# vi /etc/pam.d/common-auth
#auth       required      pam_unix.so nullok_secure
auth        sufficient    pam_ldap.so
auth        required      pam_unix.so nullok_secure use_first_pass
root@debian:~# vi /etc/pam.d/common-password
#password   required      pam_unix.so nullok obscure min=4 max=8 md5
password    sufficient    pam_ldap.so
password    required      pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass
root@debian:~# vi /etc/pam.d/common-session
#Adicionar
session     optional      pam_mkhomedir.so skel=/etc/skel umask=0027
[...]
root@debian:~# vi /etc/nsswitch.conf
[...]
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
[...]
root@debian:~# vi /etc/pam_ldap.conf
[...]
base dc=dominio,dc=com,dc=br
uri ldap://127.0.0.1
ldap_version 3
[...]
root@debian:~# vi /etc/libnss-ldap.conf
[...]
base dc=dominio,dc=com,dc=br
uri ldap://127.0.0.1
ldap_version 3
rootbinddn cn=admin,dc=dominio,dc=com,dc=br
[...]
root@debian:~# vi /etc/libnss-ldap.secret
senha_de_admin_da_base_ldap

Instalando o phpLdapAdmin

Agora iremos realizar o download do utilitário phpLdapAdmin para que a administração do LDAP seja facilitada. O download de uma versão justada para melhor administração com templates em português pode ser obtida em http://downloads.fabriciovc.eti.br/ldap/.

root@debian:/var/www# wget -c http://downloads.fabriciovc.eti.br/ldap/phpldapadmin-1.1.0.5.tar.gz

Pacotes extras necessários:

  • apache2
  • php5
  • php5-ldap
root@debian:~# aptitude install <pacotes>

Realizado o download e instalado os pacotes do apache2 e do php5 necessários, descompacte o pacote do phpLdapAdmin na área de hospedagem (/var/www). Lembre-se que essa aplicação precisa ser configurada.

root@debian:/var/www# tar xzvf phpldapadmin-1.1.0.5.tar.gz
root@debian:/var/www# mv phpldapadmin-1.1.0.5 phpldapadmin
root@debian:/var/www# cd phpldapadmin/config
root@debian:/var/www/phpldapadmin/config# cp config.php.example config.php
root@debian:/var/www/phpldapadmin/config# vi config.php

Configure as seguintes linhas.

$ldapservers->SetValue($i,'server','name','DN LDAP Server');
$ldapservers->SetValue($i,'server','host','127.0.0.1');
$ldapservers->SetValue($i,'server','port','389');
$ldapservers->SetValue($i,'server','base',array('dc=dominio,dc=com,dc=br'));
$ldapservers->SetValue($i,'server','auth_type','session');
$ldapservers->SetValue($i,'login','dn','cn=admin,dc=dominio,dc=com,dc=br');
$ldapservers->SetValue($i,'server','sasl_auth',false);
$ldapservers->SetValue($i,'server','low_bandwidth',false);
$ldapservers->SetValue($i,'appearance','password_hash','md5');
$ldapservers->SetValue($i,'appearance','show_create',true);
$ldapservers->SetValue($i,'auto_number','enable',true);
$ldapservers->SetValue($i,'auto_number','mechanism','search');
$ldapservers->SetValue($i,'auto_number','min','1000');
$ldapservers->SetValue($i,'login','timeout',30);

Adicionando dados na base LDAP (com arquivos .ldif)

raiz.ldif

dn: dc=dominio,dc=com,dc=br
dc: exemplo
objectClass: domain
objectClass: top

unidadeorganizacional.ldif

dn: ou=contatos,dc=dominio,dc=com,dc=br
ou: contatos
objectClass: organizationalUnit
objectClass: top

dn: ou=usuarios,dc=dominio,dc=com,dc=br
ou: usuarios
objectClass: organizationalUnit
objectClass: top

dn: ou=grupos,dc=dominio,dc=com,dc=br
ou: grupos
objectClass: organizationalUnit
objectClass: top

usuarios.ldif

dn: uid=fabricio,ou=usuarios,dc=dominio,dc=com,dc=br
givenName: Fabricio
sn: Vaccari Constanski
cn: Fabricio Vaccari Constanski
uid: fabricio
userPassword: {MD5}F5dfrtvcmAMadsZZsjaasdsdspBQ==
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/usuarios/fabricio
loginShell: /bin/bash
objectClass: OpenLDAPperson
objectClass: posixAccount
objectClass: top

grupos.ldif

dn: cn=nome_do_grupo,ou=grupos,dc=dominio,dc=com,dc=br
cn: nome_do_grupo
gidNumber: 1000
objectClass: posixGroup
objectClass: top

Comando de adição

root@debian:~# ldapadd -x -W -D "cn=admin,dc=dominio,dc=com,dc=br" -f arquivo.ldif

Referências Consultadas

linux/artigos/ldap-howto.txt · Última modificação: 13/01/2015 10:44 (edição externa)