BOMBOLOM.COM

(ldap) Instalar e configurar o OpenLDAP

Neste artigo vamos analisar a forma de instalar e configurar um servidor de LDAP no Debian Linux.

No entanto, antes disso, convém explicar o que vem a ser um servidor de LDAP. Assim vai-se explicar de uma forma rápida no que consiste o servidor de LDAP. E a seguir vamos instalar e configurar o OpenLDAP.

O servidor consiste numa base de dados leve que é acedida por diversos serviços unificando-se desta forma num único ponto a informação do sistema. Os servidores de LDAP podem ser utilizados para diversas funções:

Em regra, esta base de dados não é modificada com muita frequência, sendo utilizada mais para leitura do que para escrita.

A base de dados é organizada numa estrutura hierarquica em árvore. Por exemplo:

É importante compreender desde o início que esta árvore pode ter qualquer estrutura que nós queiramos. No entanto o modelo apresentado é seguido em muitos sitios, porque permite usar o DNS para para localizar serviços de LDAP.

O formato completo desta estrutura é definido no RFC2253 , "Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names."
StringX.500 AttributeType
CNcommonName
LlocalityName
STstateOrProvinceName
OorganizationName
OUorganizationalUnitName
CcountryName
STREETstreetAddress
DCdomainComponent
IDuserid

A estrutura da árvore é governada por schemas. Existem muitos shemas standard.

Com a distribuição do OpenLDAP são fornecidos vários que podem ser utilizados como estão. Notar também que os serviços que suportam LDAP são feitos para funcionar com um certo schema, logo a nossa árvore tem de se adaptar a estes constrangimentos.

Na realidade não somos muito limitados por estes uma vez que é possível extender estes, ou mesmo criar novos shemas. É normal certas aplicações terem os seus próprios schemas, que deverão ser incluídos na configuração do servidor.

Outro ponto com que nos devemos preocupar é se o nosso servidor vai funcionar em modo standalone ou se vai interagir com outros servidores.O servidor LDAP pode ser configurado para depender de um servidor mestre, ou diferir os pedidos dos clientes para um terceiro servidor, eventualmente de nível superior. Por agora vamos apenas preocupar-nos com a configuração mais simples, i.e., uma configuração composta apenas por um servidor e multiplos clientes.

Instalação

No Debian a instalação é bastante simples. Para instalarmos o servidor de LDAP basta fazer:

# apt-get install slapd ldap-utils libsasl2

Vai aparecer uma tela onde se pergunta se se quer que o sistema faça a configuração inicial do servidor. A configuração que é feita é bastante standard e até poderia ser utilizada para os nossos objectivos. No entanto, para compreendermos melhor a estrutura do servidor, prefiro fazer a configuração completa, pelo que, vamos escolher Yes para omitir este passo da configuração.

Antes de termos o servidor correctamente configurado, convêm desligá-lo. Para isso fazemos:

/etc/init.d/slapd stop

O pacote openssl é utilizado para providenciar serviços de encriptação na ligação ao servidor LDAP. Uma vez que as redes são cada vez mais sítios inseguros e como um serviço de directório vai, pela sua própria natureza, conter material de caracter sensível, faz todo o sentido encriptar as comunicações com o servidor.

O pacote libsasl2 proporciona os mecânismos de autenticação ao servidor.

Configuração

A configuração vai residir em /etc/ldap e tem a seguinte árvore de directorias:

.
|-- ldap.conf
|-- sasl2
`-- schema
    |-- README
    |-- corba.schema
    |-- core.ldif
    |-- core.schema
    |-- cosine.schema
    |-- dyngroup.schema
    |-- inetorgperson.schema
    |-- java.schema
    |-- misc.schema
    |-- nis.schema
    |-- openldap.ldif
    |-- openldap.schema
    `-- ppolicy.schema

Além desta estrutura ainda temos o ficheiro /etc/default/slapd onde são definidos alguns parâmetros de inicialização.

Em primeiro lugar vamos concentrar-nos no ficheiro /etc/ldap/slapd.conf. Este ficheiro pode ser dividido em três grandes secções, a primeira preocupa-se com os parâmetros necessários para o servidor funcionar, a segunda configura o backend da base de dados e finalmente, na terceira, definimos os níveis de acesso à informação.

Parâmetros Globais de slapd.conf

Começamos por escolher os schemas que serão incluídos no servidor. Naturalmente que os schemas escolhidos dependem das aplicação que vão interagir com servidor.

# /etc/ldap/slapd.conf
#####################
## Parâmetros Globais

# Schemas incluídos:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema

A seguir é necessário definir o nível de logging que o servidor vai fazer:

# Registos (consultar slapd.conf(5) para mais informação):
loglevel 296
pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args

São suportados módulos no servidor, que são carregados quando este é iniciado. Necessitamos de carregar o módulo do backend da base de dados:

# Onde estão guardados os módulos e qual o backend utilizado: 
modulepath      /usr/lib/ldap
moduleload      back_bdb

O servidor OpenLDAP suporta vários mecanismos de autenticação (ver man 5 slapd.conf e procurar por sasl-secprops. No nosso servidor vamos utilizar:

# Negar o uso de autenticação em texto simples, ou anónima
# Usar encriptação DES
sasl-secprops noplain,noanonymous,minssf=56

Finalmente, na secção global, resta-nos definir o tipo de encriptação usado para guardar as palavras passe:

# Várias configurações de segurança:
password-hash {SSHA}

Até agora a nossa configuração consiste de:

# /etc/ldap/slapd.conf
#####################
## Parâmetros Globais

# Schemas incluídos:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema

# Registos (consultar slapd.conf(5) para mais informação):
loglevel 296
pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args

# Onde estão guardados os módulos e qual o backend utilizado:
modulepath      /usr/lib/ldap
moduleload      back_bdb

# Negar o uso de autenticação em texto simples, ou anónima
# Usar encriptação DES
sasl-secprops noplain,noanonymous,minssf=56

# Várias configurações de segurança:
password-hash {SSHA}

Parâmetros de definição da base de dados

Agora, na segunda parte do ficheiro de configuração, vamos definir os parâmetros que governam a base de dados. O backend escolhido deve ser (na maioria dos casos) o bdb (baseado na Berkeley DB 4):

## Início da secção da base de dados
backend bdb
database bdb

Depois devemos definir o sufixo de raíz da base do nosso servidor:

# Roor suffix:
suffix "dc=meudominio,dc=com"

Nesta altura define-se também o utilizador que vai administrar o servidor e a respectiva palavra passe:

# Administrador do servidor:
rootdn "cn=Manager,dc=meudominio,dc=com"
rootpw {SSHA}N9R59Iv4CCg+trgsG0XUOoZBMwisNiip

Para gerar o hash da palavra passe faz-se:

# slappasswd -s teste
{SSHA}N9R59Iv4CCg+trgsG0XUOoZBMwisNiip

Neste caso a hash apresentada corrasponde à hash da palavra "teste".

Devemos definir a directoria que vai conter os ficheiros da base de dados:

# Directoria com a base de dados
directory /arquivo/ldap

# Modo de criação dos ficheiros (apenas leitura e escrita para o dono
# do ficheiro
mode 0600

Deve-se já criar esta directoria e dar-lhe as permissões e ownership adequadas (assume-se que foi criada a partição "/arquivo", como sugerido no artigo sobre a instalação do sistema operativo, se não tem esta directoria, deve escolher um sitio apropriado, com espaço suficiente para albergar a base de dados):

# mkdir /arquivo/ldap
# chown openldap:openldap /arquivo/ldap

Na versão do Debian utilizada, este necessita de um ficheiro de configuração da base de dados, extra. Basta copiar a versão disponibilizada no pacote de instalação:

# cd /arquivo/ldap
# cp /usr/share/doc/slapd/examples/DB_CONFIG .
# chown openldap:openldap DB_CONFIG

Este ficheiro está profusamente comentado, pelo que mais tarde se devem ajustar os parâmetros de acordo com a carga a que o nosso servidor está sujeito.

O user e grupo openldap são automáticamente criados.

A base de dados faz uso intenso de índices para melhorar a performance de acesso à base. Devemos pois indicar ao servidor quais os índices que deve criar:

# Índices da base de dados
index objectClass eq
index cn pres,eq

# Manter em memória 2000 registos
cachesize 2000

Esta configuração vai indexar a informação necessária para fazer uma procura exacta quando se pergunta à base de dados quais as objectClass presentes. Também é indexada a informação necessária para responder a perguntas sobre o cn quanto à presença ou igualdade. Podem, e devem-se, acrescentar mais índices de acordo com os schemas escolhidos. Muitos dos problemas de performance devem-se à não construção dos índices ou então à sua definição de forma errada.

Temos pois, que, esta segunda secção consiste de:

## Início da secção da base de dados
backend bdb
database bdb

# Roor suffix:
suffix "dc=meudominio,dc=com"

# Administrador do servidor:
rootdn "cn=Manager,dc=meudominio,dc=com"
rootpw {SSHA}N9R59Iv4CCg+trgsG0XUOoZBMwisNiip

# Directoria com a base de dados
directory /arquivo/ldap

# Modo de criação dos ficheiros (apenas leitura e escrita para o dono
# do ficheiro
mode 0600

# Índices da base de dados
index objectClass eq
index cn pres,eq

# Manter em memória 2000 registos
cachesize 2000

Listas de Controlo de Accesso

Restanos agora definir os acessos ao nosso servidor:

## Listas de controlo de acesso
access to *
  by * read

Estes controlos de acesso devem ser lidos da seguinte forma: "acesso a * (indica tudo) por * (indica todos) apenas de leitura".

Este é o tipo de acesso mais simples que se pode conceber. Num directório em produção vamos querer de certeza ter esquemas de acessos mais complicados. Por exemplo, é natural que queiramos dar acesso de escrita a certas pessoas na organização para actualizarem o livro de endereços.

Por agora este controlo vai ser suficiente para testar o servidor.

Notar que no ficheiro de configuração slapd.conf considera-se que estamos na mesma linha, desde que a linha seguinte comece com um espaço. Assim:

access to *
  by * read

É equivalente a:

access to * by * read

Ficheiro slapd.conf completo

O nosso ficheiro /etc/ldap/slapd.conf fica:

# /etc/ldap/slapd.conf
####################
# Parâmetros Globais

# Schemas incluídos:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema

# Registos (consultar slapd.conf(5) para mais informação):
loglevel 296
pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args

# Onde estão guardados os módulos e qual o backend utilizado:
modulepath      /usr/lib/ldap
moduleload      back_bdb

# Negar o uso de autenticação em texto simples, ou anónima
# Usar encriptação DES
sasl-secprops noplain,noanonymous,minssf=56

# Várias configurações de segurança:
password-hash {SSHA}

## Início da secção da base de dados
backend bdb
database bdb

# Roor suffix:
suffix "dc=meudominio,dc=com"

# Administrador do servidor:
rootdn "cn=Manager,dc=meudominio,dc=com"
rootpw {SSHA}N9R59Iv4CCg+trgsG0XUOoZBMwisNiip

# Directoria com a base de dados
directory /arquivo/ldap

# Modo de criação dos ficheiros (apenas leitura e escrita para o dono
# do ficheiro
mode 0600

# Índices da base de dados
index objectClass eq
index cn pres,eq

# Manter em memória 2000 registos
cachesize 2000

## Listas de controlo de acesso
access to *
  by * read

Ficheiro /etc/defaults/slapd

Antes de pudermos inicializar o servidor, temos que definir alguns parâmetros de sistema. O ficheiro /etc/defaults/slapd é lido pelos scripts de inicialização do servidor. Os ajustes são simples o suficiente:

SLAPD_CONF=/etc/ldap/slapd.conf
SLAPD_SERVICES="ldap:///"

A primeira variável modificada indica o caminho para o ficheiro de configuração que acabámos de criar e a segunda faz com que o servidor escute em todas as interfaces sem usar encriptação.

Iniciar o servidor e consulta dos logs

Pra iniciar o servidor fazemos:

# /etc/init.d/slapd start

Em /var/log/syslog vai aparecer:

Jun  4 17:00:51 localhost slapd[9944]: @(#) $OpenLDAP: slapd 2.3.30 (Mar  9 2007 05:43:02) $ ^Iroot@windlord:/tmp/buildd/openldap2.3-2.3.30/debian/build/servers/slapd
Jun  4 17:00:51 localhost slapd[9944]: daemon: IPv6 socket() failed errno=97 (Address family not supported by protocol)
Jun  4 17:00:51 localhost slapd[9947]: slapd starting
Jun  4 17:00:51 localhost slapd[9949]: daemon: added 4r listener=(nil)
Jun  4 17:00:51 localhost slapd[9949]: daemon: added 6r listener=0x8129c00
Jun  4 17:00:51 localhost slapd[9949]: daemon: added 7r listener=0x8129d00
Jun  4 17:00:51 localhost slapd[9949]: daemon: select: listen=6 active_threads=0 tvp=NULL
Jun  4 17:00:51 localhost slapd[9949]: daemon: select: listen=7 active_threads=0 tvp=NULL

Para desligar o servidor fazer:

# /etc/init.d/slapd stop

Para verificarmos se o servidor está a correr, fazer:

$ ps -ef | grep slapd | grep -v grep
openldap  1246     1  0 21:19 ?        00:00:00 /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf
openldap  1247  1246  0 21:19 ?        00:00:00 /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf
openldap  1248  1247  0 21:19 ?        00:00:00 /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf
openldap  1252  1247  0 21:19 ?        00:00:00 /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf
openldap  1283  1247  0 21:27 ?        00:00:00 /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf

Criar a estrutura da árvore

Agora que temos o servidor configurado, é altura de construirmos os nós principais:

Devemos desligar o servidor:

# /etc/init.d/slapd stop

A seguir devemos construir o ficheiro LDIF, com o seguinte conteúdo:

# Ficheiro construção dos nós (/tmp/root_node.ldif)
# Nó raiz
dn: dc=meudominio,dc=com
dc: meudominio
objectClass: dcObject
objectClass: organizationalUnit
ou: Gato Pardo Enterprises

# Nó Pessoas
dn: ou=pessoas,dc=meudominio,dc=com
ou: pessoas
objectClass: organizationalUnit

A seguir utilizamos o programa slapadd para adicionar os nós:

# slapadd -v -l root_node.ldif
added: "dc=meudominio,dc=com" (00000001)
added: "ou=pessoas,dc=meudominio,dc=com" (00000002)

Se voltarmos a iniciar o servidor, já podemos efectuar uma busca no mesmo:

$ ldapsearch -x -b "dc=meudominio,dc=com" "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# meudominio.com
dn: dc=meudominio,dc=com
dc: meudominio
objectClass: dcObject
objectClass: organizationalUnit
ou: Gato Pardo Enterprises

# pessoas, meudominio.com
dn: ou=pessoas,dc=meudominio,dc=com
ou: pessoas
objectClass: organizationalUnit

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Adicionar entradas ao livro de endereços

No pacote ldap-utils existem vários utilitários para gerir a base de dados:

Por exemplo para acrescentar um contacto ao nosso livro de endereços, usando estas ferramentas, teríamos primeiro de definir o ficheiro LDIF. Notar que muitas das aplicações que gerem livros de endereços, podem exportar directamente neste formato, facilitando assim o nosso trabalho.

# Entrada para o livro de enderços /tmp/contacto.ldif
dn: cn=Helder Guerreiro,ou=pessoas,dc=meudominio,dc=com
cn: Helder Guerreiro
sn: Guerreiro
mail: helder@bombolom.com
mail: webmaster@bombolom.com
labeledURI: http://www.bombolom.com
objectClass: inetOrgPerson

Como os acessos de escrita estão neste momento restritos ao administrador do servidor, temos que ligar ao mesmo com as suas credenciais:

$ ldapmodify -W -D "cn=Manager,dc=meudominio,dc=com" -x -a -f contacto.ldif
Enter LDAP Password:
adding new entry "cn=Helder Guerreiro,ou=pessoas,dc=meudominio,dc=com"

É claro que existem editores da base de dados gráficos, por exemplo:

Configurar os clientes para acederem ao servidor

Resta-nos configurar os clientes. Por exemplo para o Thunderbird, temos:

Adicionar um novo livro de endereços (só que desta vez remoto).

Configurar o nosso servidor recém criado.

Consultar o servidor.

Conclusão

Neste momento temos o nosso servidor instalado e a funcionar. Os passos seguintes serão:

Para quem está a usar o SuSE este documento pode-se usar sem grandes alterações:

As diferenças da configuração do slapd no SuSE em relacção ao Debian são as seguintes:

  • Os Pacotes a instalar são:
    • openldap2 - Servidor;
    • openldap2-client - Cliente;
  • A directoria de configuração é: /etc/openldap ;
  • O SuSE tem links preparados para facilitar o inicio dos daemons, para o slapd o script a usar é: rcslpd {start|stop|try-restart|restart|force-reload|reload|status};

Naturalmente que convém usar os processos normais do SuSE para inscrever o serviço nas listas de inicialização. Para o caso do slapd isto implica fazer:

# chkconfig slpd on

Para começar os serviços.

Finalmente ter em conta a configuração da firewall, nas interfaces em que queremos prestar o serviço tem de ser aberta as portas:

ldap            389/tcp    # Lightweight Directory Access Protocol
ldap            389/udp    # Lightweight Directory Access Protocol
e
ldaps           636/tcp    # ldap protocol over TLS/SSL (was sldap)
ldaps           636/udp    # ldap protocol over TLS/SSL (was sldap)

Por agora ficamos por aqui...

04.06.2007 | Ler mais | Comentários | Tags , ,

Voltar à Página principal | Made with PyBlosxom