Replicação de servidores ldap
1. Introdução
Com a crescente de disponibilização de sistemas aplicativos através da Internet, a segurança e padronização de acessos por parte dos usuários de determinada instituição vêm acumulando uma importância cada vez maior. Arquiteturas do tipo “single sign-on”, onde o usuário se autentica apenas uma vez e recebe autorização para executar determinados aplicativos, têm sido implementadas através da disponibilização de uma base de dados geralmente rodando através de um, ou mais, servidores LDAP.
Este tutorial busca apresentar dois tipos de configuração para a replicação de um servidor ldap. A primeira delas, chamada de master-slave, permite a atualização da base de dados em apenas um dos nós (o chamado master) e sua replicação automática para o escravo (slave). Já a segunda proposta (mirror mode) possibilita a alteração em qualquer um dos nós e subseqüente atualização para os demais.
2. Replicação “master-slave”
Para esta configuração, a atualização do banco de dados é realizada através do servidor principal (master) e é replicada ao escravo (slave), não sendo possível alteração a partir do último.
Para sua implementação, alterar a configuração do arquivo /etc/ldap/slapd.conf em ambos os servidores (master e slave), conforme descrito a seguir.
a) configuração do servidor “master”
# PARA A REPLICACAO VIA SYNCREPL FUNCIONAR E NECESSARIO CARREGAR O MODULO ABAIXO
modulepath /usr/lib/ldap
moduleload back_hdb
moduleload syncprov.la
## Estruturas de Indices – acrescentar...
index uniqueMember,entryCSN,entryUUID eq
# PARA A REPLICACAO VIA SYNCREPL
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
# Save the time that the entry gets modified, for database #1
lastmod on
b) configuração do servidor “slave”
Acrescentar as seguintes linhas no arquivo de configuração
syncrepl rid=001
provider=ldap://10.1.22.30
type=refreshOnly
interval=00:00:00:10
searchbase="dc=seudominio,dc=com,dc=br"
scope=sub
schemachecking=off
bindmethod=simple
binddn="cn=admin,dc=seudominio,dc=com,dc=br"
credentials="senha do admin no master"
updateref ldap://10.1.22.30
A seguir, reiniciar o slapd em ambos os servidores.
3. Replicação “mirror mode”
Este tipo de arquitetura permite que a atualização seja realizada a partir de qualquer um dos nós e replicada para os demais.
Para sua implementação, alterar a configuração do arquivo /etc/ldap/slapd.conf em todos os servidores, conforme descrito a seguir:
# Global Directives:
# Features to permit
# compatibilidade com a versão 2 do LDAP, requerida pelo Samba para suas consulta
allow bind_v2
# Schema and objectClass definitions
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
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
# Where the dynamically loaded modules are stored
modulepath /usr/lib/ldap
moduleload back_hdb
moduleload syncprov.la
# The maximum number of entries that is returned for a search operation
sizelimit 500
# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1
# cada um dos servidores do esquema mirrormode necessita de uma identificacao
# deve ser igual ao atributo “rid” abaixo
serverID 001
backend hdb
database hdb
# The base of your directory in database #1
suffix "dc=seudominio,dc=com,dc=br"
# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
rootdn "cn=admin,dc=seudominio,dc=com,dc=br"
rootpw {SSHA}7/ZHk3KgjdDNsW3AG7ejUrlg16oPtR81
# Where the database file are physically stored for database #1
directory "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500
## Estruturas de Indices
index cn,sn,uid,displayName pres,sub,eq
index memberUID,mail,givenname eq,subinitial
index objectClass,uidNumber,gidNumber eq
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq
index uniqueMember,entryCSN,entryUUID eq
# PARA A REPLICACAO VIA SYNCREPL
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
# Save the time that the entry gets modified, for database #1
lastmod on
# Checkpoint the BerkeleyDB database periodically in case of system
# failure and to speed slapd shutdown.
checkpoint 512 30
syncrepl rid=001
provider=ldap://10.1.22.30
type=refreshAndPersist
interval=00:00:00:10
searchbase="dc=seudominio,dc=com,dc=br"
scope=sub
schemachecking=off
bindmethod=simple
binddn="cn=admin,dc=seudominio,dc=com,dc=br"
credentials="senha do usuario admin"
retry="60 +"
syncrepl rid=002
provider=ldap://172.16.236.128
type=refreshAndPersist
interval=00:00:00:10
searchbase="dc=seudominio,dc=com,dc=br"
scope=sub
schemachecking=off
bindmethod=simple
binddn="cn=admin,dc=seudominio,dc=com,dc=br"
credentials="senha do usuario admin"
retry="60 +"
mirrormode on
access to attrs=sambaLMPassword,sambaNTPassword,userPassword,sambaPasswordHistory,sambaPwdLastSet
by dn="cn=admin,dc=seudominio,dc=com,dc=br" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
# The admin dn has full write access, everyone else
# can read everything.
access to *
by dn="cn=admin,dc=seudominio,dc=com,dc=br" write
by * read
Para a configuração do arquivo slapd.conf do segundo servidor, basta alterar o atributo serverID (no arquivo de configuração acima) para 002.