Tutorial 
OpenLDAP com replicação no 
Debian Squeeze.
Este tutorial mostrará como criar um servidor OpenLDAP com replicação no Debian Squeeze (6.0.3). Ao final teremos um servidor Master e um 
Shadow (Slave).
Obs.: Para realizar os passos deste tutorial, esteja logado como 'root'.
1) Instalando o OpenLDAP no servidor Master.
Edite o "sources.list":
# nano /etc/apt/sources.list
Acrescente as seguintes linhas e salve:
deb http://ftp.br.debian.org/debian squeeze main contrib
deb-src http://ftp.br.debian.org/debian squeeze main contrib
Atualize a lista de pacotes:
# apt-get update
Instale o OpenLDAP e o ldap-utils:
# apt-get install slapd ldap-utils
1.1) Configurando OpenLDAP Master
Nas últimas versões do OpenLDAP, é utilizado um esquema de configuração onde você pode alterar as configurações em tempo real acessando os
dados diretamente dentro do OpenLDAP, porém, iniciaremos a configuração da forma tradicional e converteremos para este novo esquema.
Pare o Serviço do OpenLDAP (slapd):
# service slapd stop
Edite o arquivo "/etc/ldap/slapd.conf":
# nano /etc/ldap/slapd.conf
Adicione a configuração inicial:
# Arquivo slapd.conf exemplo básico para OpenLDAP Master
  include     /etc/ldap/schema/core.schema
  include     /etc/ldap/schema/cosine.schema
  include     /etc/ldap/schema/nis.schema
  include     /etc/ldap/schema/inetorgperson.schema
  allow     bind_v2
  pidfile     /var/run/slapd/slapd.pid
  argsfile     /var/run/slapd/slapd.args
# Nível de verbosidade do Log. O nível 256 traz alguma verbosidade para analisamos problemas.
 loglevel     256
# Diretório com os Módulos LDAP, incluíndo o módulo de sincronização
  modulepath /usr/lib/ldap
  moduleload back_bdb
  moduleload syncprov # Módulo de Sincronização usado para replicação SyncRepl
# Limites Aplicado a toda as buscas no LDAP, Tamanho e Tempo Limite (Segundos)
  sizelimit 256
  timelimit 60
# Número de CPUs Utilizada para criar indíces
  tool-threads 2
  backend  bdb
# Base de Configuração
  database config
  rootdn "cn=admin,cn=config"
  rootpw secreta
# Base Principal
  database bdb
  suffix "dc=juntadados,dc=org"
  rootdn "cn=admin,dc=juntadados,dc=org"
  rootpw secreta
  directory     "/var/lib/ldap"
  dbconfig set_cachesize 0 2097152 0
  dbconfig set_lk_max_objects 1500
  dbconfig set_lk_max_locks 1500
  dbconfig set_lk_max_lockers 1500
  index     objectClass eq
  lastmod     on
  checkpoint     512 30
# Configuração da Sincronização SyncRepl
  overlay syncprov
  syncprov-checkpoint 50 5
  syncprov-sessionlog 100
# ACLs (Permissões) Básicas.
  access to   attrs=userPassword,shadowLastChange
      by dn="cn=admin,dc=juntadados,dc=org" write
      by anonymous auth
      by self write
      by * none
  access to dn.base="" by * read
  access to * by dn="cn=admin,dc=juntadados,dc=org" write by * read
Remove o 'slapd.d' antigo:
# rm -rf /etc/ldap/slapd.d/*
Criando 'slapd.d' (configurações) novo:
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/
Definindo permissões dos arquivos de configuração:
# chown openldap.openldap /etc/ldap -R
Antes de iniciar o OpenLDAP, configure o 'rsyslog' para capturar mensagens de Log do OpenLDAP:
# nano /etc/rsyslog.conf
Acrescente ao final do "rsyslog.conf":
  local4.*    /var/log/ldap.log
Reinicie o 'rsyslog':
# service rsyslog restart
Inicie o Serviço OpenLDAP (slapd):
# service slapd start
1.2) Iniciando registros do OpenLDAP
Crie um arquivo "LDIF Base":
# nano /etc/ldap/base.ldif
Adicione a "/etc/ldap/base.ldif":
  dn: dc=juntadados,dc=org
  dc: juntadados
  objectClass: top
  objectClass: domain
  dn: ou=Pessoa, dc=juntadados,dc=org
  ou: Pessoa
  description: Todas as Pessoas
  objectclass: organizationalunit
Execute o comando para adição de registro:
# ldapadd -h localhost -a -W -x -D "cn=admin,dc=juntadados,dc=org" -f /etc/ldap/base.ldif
Crie uma entrada em Pessoa (LDIF):
# nano /etc/ldap/pessoa.ldif
Adicione os dados básicos:
  dn: cn=Marcelo Soares Souza,ou=Pessoa,dc=juntadados,dc=org
  objectclass: inetOrgPerson
  cn: Marcelo Soares Souza
  sn: souza
  uid: mssouza
  userpassword: secreta
  mail: marcelo@juntadados.org
  description: http://marcelo.juntadados.org
Execute o comando para adição de registro:
# ldapadd -h localhost -a -W -x -D "cn=admin,dc=juntadados,dc=org" -f /etc/ldap/pessoa.ldif
1.3) Consultando um Registro no OpenLDAP
Para buscar o registro, adicionado use o comando 'ldapsearch':
# ldapsearch -h localhost -x -b ou=Pessoa,dc=juntadados,dc=org uid=mssouza
1.4) Criando usuário para a replicação
Crie um arquivo LDIF Base:
# nano /etc/ldap/replication.ldif
Adicione a "/etc/ldap/replication.ldif":
 dn: uid=syncrepl,dc=juntadados,dc=org
 uid: syncrepl
 ou: System
 userPassword: secreta
 description: Conta para o SyncRepl
 objectClass: account
 objectClass: simpleSecurityObject
Execute o comando para adição de registro:
# ldapadd -h localhost -a -W -x -D "cn=admin,dc=juntadados,dc=org" -f /etc/ldap/replication.ldif
1.5) Facilitando a Administração do OpenLDAP
A Fundação Apache mantém uma ferramenta muito útil para administração de diretórios LDAP, é o 
Apache Directory Studio. Todas as configurações ou manipulações de registros agora podem ser feitas através desta interface gráfica para isto. Conforme definimos na configuração o usuário (Bind DN or user) para administração dos registros no diretório:
 Bind DN or user: cn=admin,dc=juntadados,dc=org
 Bind Password: secreta
O usuário (Bind DN or user) utilizado para configuração do OpenLDAP:
 Bind DN or user: cn=admin,cn=config
 Bind Password: secreta
2) Replicando o OpenLDAP no servidor Shadow (Slave)
Faça os passos dos segmentos 1 e 1.1, porém, coloque a configuração abaixo no arquivo "/etc/ldap/slapd.conf":
# Arquivo slapd.conf exemplo básico para OpenLDAP Master
 include      /etc/ldap/schema/core.schema
 include      /etc/ldap/schema/cosine.schema
 include      /etc/ldap/schema/nis.schema
 include      /etc/ldap/schema/inetorgperson.schema
 allow      bind_v2
 pidfile    /var/run/slapd/slapd.pid
 argsfile    /var/run/slapd/slapd.args
# Nível de verbosidade do Log. O nível 256 traz alguma verbosidade para analisamos problemas.
 loglevel   256
# Diretório com os Módulos LDAP, incluíndo o módulo de sincronização.
 modulepath /usr/lib/ldap
 moduleload back_bdb
 moduleload syncprov # Módulo de Sincronização usado para replicação SyncRepl
# Limites Aplicado a toda as buscas no LDAP, Tamanho e Tempo Limite (Segundos).
 sizelimit 256
 timelimit 60
# Número de CPUs Utilizada para criar indíces.
 tool-threads 2
 backend  bdb
# Base de Configuração.
 database config
 rootdn "cn=admin,cn=config"
 rootpw secreta
# Base Principal.
 database bdb
 suffix "dc=juntadados,dc=org"
 rootdn "cn=admin,dc=juntadados,dc=org"
 rootpw secreta
 directory   "/var/lib/ldap"
 dbconfig set_cachesize 0 2097152 0
 dbconfig set_lk_max_objects 1500
 dbconfig set_lk_max_locks 1500
 dbconfig set_lk_max_lockers 1500
 index      objectClass eq
 lastmod      on
 checkpoint   512 30
 syncrepl rid=001
   provider=ldap://IP_OPENLDAP_MASTER
   type=refreshAndPersist
   retry="30 10 600 20"
   schemachecking=off
   searchbase="dc=juntadados,dc=org"
   binddn="uid=syncrepl,dc=juntadados,dc=org"
   credentials=secreta
 updateref ldap://IP_OPENLDAP_MASTER
# ACLs (Permissões) Básicas.
  access to   attrs=userPassword,shadowLastChange
  by dn="cn=admin,dc=juntadados,dc=org" write
  by anonymous auth
  by self write
  by * none
 access to dn.base="" by * read
 access to * by dn="cn=admin,dc=juntadados,dc=org" write by * read
2.1) Testando replicação
Pesquisa pelo usuário de 'uid=mssouza' localmente:
# ldapsearch -h localhost -x -b ou=Pessoa,dc=juntadados,dc=org uid=mssouza
Caso tenha o retorno abaixo, a replicação foi bem sucedida:
 # extended LDIF
 #
 # LDAPv3
 # base  with scope subtree
 # filter: uid=mssouza
 # requesting: ALL
 #
 # Marcelo Soares Souza, Pessoa, juntadados.org
 dn: cn=Marcelo Soares Souza,ou=Pessoa,dc=juntadados,dc=org
 objectClass: inetOrgPerson
 cn: Marcelo Soares Souza
 sn: souza
 uid: mssouza
 mail: marcelo@juntadados.org
 description: http://marcelo.juntadados.org
 # search result
 search: 2
 result: 0 Success
 # numResponses: 2
 # numEntries: 1
Originalmente Publicado em: