Вы находитесь на странице: 1из 13

Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?

codigo=4028

Entendendo o LDAP

Autor: Francisco jonathan Rebouças Maia <jonathanmaia at pop-ce.rnp.br>


Data: 21/11/2005

Introdução

Um diretório, em uma definição bem simplória, é um banco de dados desenvolvido para atender
principalmente a grandes quantidades de consultas e não a grandes volumes de atualizações (inserções ou
remoções).

A forma em que os diretórios armazenam suas informações é hierárquica e não relacional, ou seja, em
sistemas de diretórios não temos tabelas de dados como temos em bancos relacionais (como MySQL,
Oracle, SQL Server...). No lugar de tabelas, os dados são organizados em uma DIT (Directory Information
Tree - Árvore de informação do diretório), que é uma árvore onde cada vértice é um registro (onde um
registro é um conjunto de informações sobre determinado objeto que queremos guardar).

Definição de DIT e protocolo LDAP

Para quem conhece estruturas computacionais chamadas grafos, talvez a definição de árvore e de vértices
já esteja bem clara, mas se você não sabe o que é isso, vou tentar explicar de uma forma simples e
resumida através de um exemplo usando a própria DIT.

Uma árvore é formada por vértices (no caso da DIT cada vértice é um registro) e por arestas, que são
"linhas" que relacionam dois vértices. Veja a seguinte DIT:

Figura 1

Nesse exemplo, cada elipse é um vértice da árvore, ou seja, cada elipse representa um registro da árvore,
que é onde as informações de certo objeto são guardadas. No exemplo, temos o registro "POP-CE", que

1 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

pode guardar várias informações, como onde localiza-se o Pop-ce, quais membros, quais projetos em
andamento, etc (mais a frente explicarei como as informações são armazenadas em cada registro).

Cada linha que relaciona (liga) dois registros é chamada de aresta. Dessa forma, temos uma aresta entre
os registros "RNP" e "POP-CE", outra entre "POP-CE" e "VOIP", etc. Nesse caso, essas arestas são
usadas para podermos perceber o caráter hierárquico dessa árvore. Veja que "POP-CE", "POP-RJ",
"POP-PE" estão todos abaixo de "RNP", assim como "VOIP" e "GERENCIA" estão abaixo de
"POP-CE".

Tente ver a DIT como se fosse um sistema de pastas (isso é apenas uma analogia), no qual a pasta
principal é a pasta "RNP" e dentro dela estão as pastas "POP-CE", "POP-RJ" e "POP-PE", dentro da
pasta POP-CE estão as pastas "VOIP" e "GERENCIA", etc.

Assim, já podemos ter uma idéia do que é uma árvore. A DIT é uma árvore enraizada, pois sempre vamos
ter um único registro na parte mais alta da árvore, registro esse chamado de raiz (no exemplo, a raiz é o
registro "RNP").

O LDAP é basicamente um sistema de diretórios que engloba o diretório em si (a DIT) e um protocolo


também denominado LDAP* (LightWeight Directory Access Protocol - Protocolo leve de acesso a
diretórios), que é o protocolo que permite o acesso à DIT (sempre que for me referir ao protocolo LDAP,
colocarei um * no final).

O nome do sistema de diretórios ser LDAP se deve ao fato do protocolo usado para acessar o sistema se
chamar LDAP*. O sistema LDAP é derivado de um sistema de diretórios chamado X.500. O X.500 usava
como protocolo para acessar sua DIT o protocolo DAP (Directory Access Protocol). Mas quais as
diferenças entre o X.500 e o LDAP? O LDAP, como o próprio nome diz, é mais leve, retirou alguns
problemas que haviam no X.500 (como redundância de dados), mas as principais diferenças estão entre
os protocolos de acesso LDAP* e DAP.

O protocolo DAP era implementado sobre o padrão OSI de sete camadas, o que o deixava um tanto
quanto incompatível e pesado. Já o LDAP* é implementado sobre o sistema TCP/IP, que atualmente é
mundialmente difundido, o que permite uma boa portabilidade entre os sistemas que desejam utilizar
LDAP, além de possuir um menor overhead que o DAP nos pacotes enviados.

Registros

Vamos descrever agora um pouco mais como os registros são construídos e organizados na DIT. Cada
registro, como já foi dito, é um conjunto de informações sobre certo objeto. Cada informação é guardada
em um atributo no registro.

Mas, nesse ponto, surge a pergunta: quais atributos podem ser colocadas em um registro? Depende de
quais OBJECT CLASSES (Classes de objetos) constituem o registro. Uma object class apenas informa
quais atributos são obrigatórios e quais são opcionais para certo registro. Cada registro pode ser
constituído por uma ou mais object classes.

Usando o exemplo da figura 1, suponha que, na definição do registro "GERENCIA", dizemos que esse
registro faz parte de duas object classes: da top e da inetOrgPerson. A object class top exige que o registro
faça parte de pelo menos uma outra object class, que nesse caso é a inetOrgPerson. Já a inetOrgperson,
exige que o registro tenha os atributos "cn" e "sn" (que significam commonname - nome comum e
surname - sobrenome) e tenha os seguintes atributos como opcionais: mail, manager, mobile, o, pager,
photo, roomNumber, secretary, uid, userCertificate, entre outros.

2 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

Você deve estar se perguntando como saber quais atributos são obrigatórios em uma objectclass, quais
objects classes você pode usar, entre outras coisas. Na verdade, a descrição de quais objectclasses você
pode usar encontram-se em arquivos chamados schema (esquema). Nos schemas, você verá quais
atributos são obrigatórios e quais são opcionais em certa objectclass, qual a sintaxe que cada atributo te
que obedecer (se é uma string, se é um inteiro, etc).

Existe uma página bem interessante, que caso você queira já pode ir dando uma olhada, que descreve
várias object classes, mostrando quais atributos ela pode conter. A página é:

http://www.ldap.liceu.com.br/topo/classes_atributtos/classes.htm

Cada registro na DIT tem que possuir um identificador único, para não haver ambiguidades na hora das
buscas. Esse identificador único é chamado de DN (Distinguished Name - nome distinto), que é
basicamente o caminho de registros que fica entre o registro a ser especificado e a raiz. Mas como indicar
quais os registros que ficam nesse caminho? Através de vários RDN (Relative Distinguished Name), onde
cada RDN é um atributo que identificará um registro em seu nível. Um pouco complicado não? Vamos
ver o exemplo na próxima página para facilitar o entendimento.

Exemplo de registros

Figura 2

Veja que nossa figura já está diferente. Agora, já temos uma organização da DIT bem mais próxima de
como ela realmente é. Nesse exemplo da figura 2, para facilitar o entendimento, foi colocado um número
para identificar cada registro. Veja a seguir o DN e o RDN de cada registro dessa DIT:
Registro 1
DN: dc=rnp
RDN: dc=nrp
Registro 2
DN: ou=pop-ce,dc=rnp (identificador único)
RDN: ou=pop-ce (identificador no nível)
Registro 3
DN: ou=pop-rj,dc=rnp
RDN: ou=pop-rj
Registro 4
DN: ou=pop-pe,dc=rnp
RDN: ou=pop-pe
Registro 5
DN: cn=voip,ou=pop-ce,dc=rnp (identificador único)
RDN: cn=voip (identificador no nível)
Registro 6
DN: cn=gerencia,ou=pop-ce,dc=rnp
RDN: cn=gerencia
Registro 7
DN: cn=voip,ou=pop-rj,dc=rnp
RDN: cn=voip
Registro 8

3 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

DN: cn=seguranca,ou=pop-pe,dc=rnp
RDN: cn=seguranca

Perceba que todos DN são distintos (pois são identificadores únicos de cada registro), mas os RDN não
precisam ser distintos (com excessão de RDNs de registros que estão abaixo do mesmo registro, pois
senão teríamos DNs iguais, o que não pode acontecer - por exemplo: não poderíamos ter dois registros
exatamente abaixo do registro 1 com RDNs iguais).

Outra coisa a ser percebida é que o DN de um registro é exatamente o seu RDN seguido do DN do
registro que está exatamente acima dele. Sempre que formos adicionar um registro na árvore, devemos
então decidir abaixo de qual registro ele deve estar (isso irá depender de organização que você deseja que
seu diretório possua), registro esse que deve estar previamente criado por você ou deve ser a raiz do
diretório (que no OpenLdap é indicada no arquivo de configuração slapd.conf - O OpenLdap é a
implementação livre usada do LDAP neste documento) e também devemos decidir qual atributo
usaremos para especificar o RDN desse registro (você pode escolher o atributo que desejar, desde que a
objectclass que permite que ele seja usado também esteja especificada na declaração do registro).

Para inserir um registro em nosso diretório, usaremos arquivos LDIF (Ldap Data Interchange Format -
formato de intercâmbio de dados LDAP), que é onde especificamos de quais objectclasses o registro faz
parte e os valores de seus atributos. Esses arquivos também podem ser usados para remover e alterar
registros do diretório.

Modelos de abordagem do LDAP

Até o momento já falamos sobre dois modelos de abordagem do LDAP: o modelo de nomes e o modelo de
informações. O modelo de nomes é o que trata da organização da DIT, como os RDNs e os DNs, já o
modelo de informações é o que trata dos atributos, das objectclasses, dos schemas, etc.

No modelo de informações, ainda falta falarmos como os atributos e as objectclasses estão organizadas.
Cada atributo e objectclass, quando declarado em um schema, possui um OID (Object Identifier) único,
que também é especificado no schema. Da mesma forma que na DIT, esses atributos e objectclasses
também ficam organizados em uma árvore e o OID indica onde eles estão nessa árvore.

Veja o exemplo do OID do atributo cn: 2.5.4.3, onde 2 indica a raiz da árvore de informações onde esse
atributo está, 5 é um filho da raiz, 4 é um dos filhos de 5 e 3 indica o atributo cn.

Cada objectclass também possui um OID que a identifica da mesma forma acima, ou seja, com um
caminho entre a raiz e a própria object class. Esses números de OID são padronizados e distribuídos pela
IA A (Internet Assigned umbers Authority - www.iana.org), dessa forma, se você quiser criar seu
próprio atributo e sua própria objectclass oficiais, você deve procurar essa instituição para requisitar OIDs
gratuitamente. Mas se você não vê necessidade de registrar suas criações, basta utilizar um OID que não
está sendo usado no momento que seus atributos e object classes irão funcionar.

Temos outros dois modelos de abordagem do LDAP: modelo de segurança e modelo funcional. O
modelo de segurança trata de aspectos como autenticação e autorização. No LDAP, podemos ter vários
usuários além do administrador. Na verdade, caso você deseje, o LDAP pode tratar cada registro da DIT
como um usuário.

Para dizer o que cada usuário terá permissão de fazer (ler ou modificar) e em quais registros ele poderá
fazer isso (registros próprios dele ou dos outros), existem as ACLs (Access Control Lists).

O modelo funcional é o que descreve o que poderemos fazer com o diretório e através de quais

4 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

ferramentas, como por exemplo: fazer autenticação, buscar no diretório, modificar dados, etc.

Instalação do OpenLdap

Vamos agora iniciar com a prática usando o OpenLdap. Aqui usaremos a versão 2.2.28 do OpenLdap, que
pode ser encontrada em:

www.openldap.org

Não iremos explicar aqui o processo de instalação do OpenLdap a partir do código fonte (pode ser visto
na documentação que acompanha o software). Você também poderá usar o apt-get para instalar o
OpenLdap:

# apt-get install slapd

Caso deseje removê-lo através do apt, é só usar o comando:

# apt-get remove slapd

Caso deseje instalar a partir dos fontes, é necessário que sejam instalados antecipadamente os
pré-requisitos, que são os seguintes:

OpenSSL (www.openssl.org/source);
Berkeley DB (www.sleepycat.com);
SASL (ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/);
Gdbm (http://ftp.matrix.com.br/pub/gnu/gdbm).

No momento da instalação do OpenLdap, será perguntado a você o DN da raiz da DIT de seu diretório.
Geralmente, como raiz da árvore, é colocado o domínio da empresa ou algo que represente o local onde o
diretório está instalado. Seguindo o exemplo da figura 2, o DN da raiz de nosso diretório será:

dc=rnp

Onde dc (domain component - componente de domínio) é um atributo da objectclass dcObjet. Você


poderia especificar um DN com mais subdivisões para a raiz, por exemplo, poderíamos ter o DN da
seguinte forma:

dc=popce,dc=rnp

ou

o=popce,dc=rnp

Perceba que para o último e penúltimo caso, onde o DN da raiz é composto por mais de um atributo, não
precisamos criar antecipadamente o registro cujo DN é dc=rnp. Podemos dizer logo o DN completo da
raiz como nós queremos que fique, pois o DN da raiz é (intuitivamente) como se fosse um sufixo para
todos os DNs de todos os registros de nosso diretório.

O DN da raiz pode conter um ou mais atributos, fica a seu critério. Outra coisa a ser observada é que
podemos usar outros atributos além de dc para especificar o DN da raiz. No OpenLdap, o registro da raiz

5 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

(que é criado automaticamente durante a instalação) pertence a três objectclasses:

objectClass: top
objectClass: dcObject
objectClass: organization

A top é apenas para indicar que é obrigatório que o registro contenha outras objectclasses em sua
declaração. As outras duas indicam os atributos que podem ser usados para elaborar o DN da raiz
(também comumente chamada de base do diretório). Os atributos mais usados são dc e o (organization -
organização).

Durante a instalação, também será pedido a você a senha do administrador do diretório, cujo DN de seu
registro será:

cn=admin,dc=rnp

O registro do administrador é criado automaticamente durante as instalação, já com seu DN levando em


consideração ao DN da raiz escolhida. É interessante ver como os usuários do LDAP são também
guardados como registro no próprio diretório. Lembre-se da senha do administrador, pois ela será
importante na hora de fazermos alterações no diretório.

Após instalar, você perceberá dois daemons novos: o slapd (Standalone Ldap Daemon - Daemon
autônomo Ldap) e o slurpd (Standalone Ldap Update Replication Daemon - Daemon de replicação e
atualização autônomo Ldap).

O slapd é o que inicia o serviço de diretórios e o slurp é o responsável por propagar as informações entre
diretórios que estão conectados (é um sistema bastante interessante que o LDAP disponibiliza, que
permite que servidores LDAP possam ser mantidos como réplicas de outros, ou que vários servidores
LDAP se integrem, cada um contendo uma parte de uma DIT global).

Para iniciar o slapd basta digitar em qualquer shell:

# slapd

Para finalizar o servidor LDAP você pode digitar:

# killall slapd

Após fazer qualquer modificação no arquivo de configuração do Slapd (/etc/ldap/slapd.conf), lembre-se


de finalizar e reiniciar o servidor, pois só ai as novas mudanças irão vigorar.

slapd.conf

O próximo passo é ver o arquivo de configuração do slapd, que está em /etc/ldap/slapd.conf. Na parte
inicial do arquivo, veja várias linhas iniciadas por include, onde cada include indica um arquivo de
esquema, que contém , como já visto, declarações de objectclasses e atributos a serem usados pelo LDAP.

Você poderá ver também nesse arquivo a declaração do DN da base de nossa DIT, que no arquivo está
como um atributo chamado suffix. Você também verá em alguns locais a palavra bdb (Berkeley
Database), que indica a base de dados escolhida para implementar seu diretório (é como se fosse a forma
em que os dados serão organizados).

6 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

No final do arquivo, estão as ACLs (Access Control Lists), que indicam quem pode acessar "o que" e o
que pode ser feito por quem está acessando.

Veja o seguinte trecho do arquivo, onde linhas começadas com # são comentários:

# indica que para modificar algum atributo de um registro é


# necessário que o usuário passe um nome de usuário e senha
access to attrs=userPassword

# o admin pode escrever em tudo


by dn="cn=admin,dc=popce,dc=rnp" write

# um anônimo tem que se identificar


by anonymous auth

# o dono de um registro pode escrever nele


by self write

# para o restante dos usuários não é permitido modificar nada nos registros
by * none

# A próxima opção deve sempre ser deixada da seguinte forma,


# senão poderá comprometer o acesso dos usuários ao diretório.
# Essa opção dá permissão de leitura para a base (raiz) da DIT
# (dn.base="") a todos (*).
access to dn.base="" by * read

# A próxima seção permite que o admin escreva em qualquer registro


# e que qualquer pessoa (inclusive anônima) possa fazer leituras
# no diretório.
access to *
by dn="cn=admin,dc=popce,dc=rnp" write
by * read

Inserindo registros no LDAP

O próximo passo é iniciar a inserir registros no diretório. Mas para isso é preciso aprender a criar arquivos
Ldif. Nesses arquivos ficam basicamente a descrição de um ou mais registros a serem inseridos. A
descrição de um registro é, na maioria dos casos, da seguinte forma:

# DN do registro a ser inserido


dn: ...
# uma lista de object classes que compõe o registro
objectClass: ...
objectClass: ...
...
# uma lista de atributos permitidos pelas objectclasses acima
atributo: valor
atributo: valor
...

7 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

# acima temos a especificação do primeiro registro. A partir


# daqui já podemos colocar outras descrições de outros registros.

Veja a seguir como fica o arquivo que será usado para inserir e construir o diretório da figura 2. Esse
arquivo chama-se "insere.ldif" e pode ser criado em qualquer editor de texto comum. Serão colocados
comentários aqui na descrição do arquivo, mas no arquivo verdadeiro os comentários devem ser retirados.
Outra coisa a se falar é que o método de leitura do arquivo pelo slapd é case sensitive (sensível a caixa),
ou seja, "Bola" é diferente de "bola".

# insere.ldif

# descrição do registro 2 da figura 2.


# DN do registro

dn: ou=pop-ce,dc=rnp

# colocando as object classes de que o registro faz parte.


# a escolha dessas object classes é feita vendo quais
# atributos serão necessários no registro. Nos registros 2,
# 3 e 4 serão usadas as mesmas object classes, pois eles
# são estruturalmente iguais. A object class top é necessária
# pois será preciso o uso de outras object classes. A object
# class organizationalUnit é colocada para poder ter o
# atributo ou (organizational unit - unidade organizacional).

objectClass: top
objectClass: organizationalUnit

# início do trecho onde os valores dos atributos são colocados.


# veja que tem que se colocar aqui o RDN, que nesse caso é ou:
# pop-ce, igual a forma que o RDN foi colocado no DN do registro

ou: pop-ce

# descrição do registro 3 da figura 2.

dn: ou=pop-rj,dc=rnp
objectClass: top
objectClass: organizationalUnit
ou: pop-rj

# descrição do registro 4 da figura 2.

dn: ou=pop-pe,dc=rnp
objectClass: top
objectClass: organizationalUnit
ou: pop-pe

# agora será iniciada a descrição dos registros das áreas


# em cada pop (nesse caso, as áreas aqui são fictícias).
# Nesse tipo de registro, o atributo cn (commonname - nome
# comum) será necessário. Para isso iremos colocar nos
# registros 5, 6, 7 e 8 da figura 2 a objectclass inetOrgPerson.

8 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

# Além de usar o atributo cn (que será o RDN desses registros),


# também iremos usar os atributos sn (usaremos esse atributo
# surname pois ele é obrigatório pela objectclass inetOrgPerson
# - nele colocaremos o nome de um responsável por essa área - o
# intuito real era colocar o sobrenome de alguém, mas deixemos
# as formalidades totais de lado) e mail (conterá o e-mail da
# pessoa contida em sn). Perceba que outras objectclasses também
# poderiam ser colocadas nesses registros, mas para manter a
# simplicidade vamos colocar o mínimo possível de coisas
# em cada registro.

# descrição do registro 5 da figura 2


dn: cn=voip,ou=pop-ce,dc=rnp
objectClass: top
objectClass: inetOrgPerson
cn: voip
sn: joao
mail: joao@pop-ce.rnp.br

# descrição do registro 6 da figura 2


dn: cn=gerencia,ou=pop-ce,dc=rnp
objectClass: top
objectClass: inetOrgPerson
cn: gerencia
sn: jose
mail: jose@pop-ce.rnp.br

# descrição do registro 7 da figura 2


dn: cn=voip,ou=pop-rj,dc=rnp
objectClass: top
objectClass: inetOrgPerson
cn: voip
sn: maria
mail: maria@pop-rj.rnp.br

# descrição do registro 8 da figura 2


dn: cn=seguranca,ou=pop-pe,dc=rnp
objectClass: top
objectClass: inetOrgPerson
cn: seguranca
sn: pedro
mail: pedro@pop-pe.rnp.br

# fim do arquivo insere.ldif

Após colocar todas essas definições em um arquivo chamado insere.ldif (lembre-se de retirar do arquivo
as linhas começadas com #, que são comentários), só falta inserir esses registros no diretório. Para isso,
será usado o comando ldapadd. A sintaxe mais básica para a inserção no diretório é a seguinte:

ldapadd -x -D D
" do usuário"-W -f "arquivo_ldif_com_registros"

Veja uma pequena descrição do que cada parâmetro usado significa:

9 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

-x : indica que será usada autenticação simples;


-D "Dn do usuário" : indica o Dn do usuário que vai fazer a operação no diretório. Em nosso caso
usaremos o Dn do admin, pois no arquivo slapd.ldif temos que ele é o único usuário que pode
escrever em todo o diretório;
-W : faz que apareça um prompt pedindo a senha do usuário;
-f "arquivo_ldif_com_registros" : indica o arquivo que contém os registros a serem inseridos no
diretório.

Para ver todos os parâmetros permitidos pelo ldapadd, digite em qualquer shell:

# ldapadd --help

No exemplo atual, para inserir os registros contidos no arquivo insere.ldif, usaríamos a seguinte linha de
comando:

# ldapadd -x -D "cn=admin,dc=rnp" -W -f insere.ldif

Removendo registros do LDAP

Para remover um registro, pode-se usar o comando ldapdelete. A sintaxe básica que ele usa é a seguinte:

ldapdelete -v -x -D D
" do usuário"-W -f "ldif_com_registros_a_serem_deletados"

Os parâmetros têm o mesmo sentido dos usados no comando ldapadd. Só foi usado aqui um parâmetro a
mais, que é o:

-v : faz com que os resultados da operação sejam mostrados na tela. Caso esse parâmetro não seja
colocado, você não verá se o registro foi excluído ou não, só se fizer uma busca e verificar que ele
não está mais lá.

No arquivo ldif, a diferença é que deve-se ter apenas os Dns dos registros a serem deletados. Caso você
deletar um registro, basta criar um arquivo chamado delete.ldif (pode ser o nome que você quiser) que
contenha o DN do registro a ser excluído (no arquivo, não coloque "dn:" na frente do DN) e depois
executar o seguinte comando:

# ldapdelete -v -x -D "cn=admin,dc=rnp" -W -f delete.ldif

Um exemplo de como ficaria a arquivo delete.ldif é o seguinte:

# início de delete.ldif

cn=voip,ou=pop-ce,dc=rnp

# fim de delete.ldif - Lembre-se de retirar os comentários

Fazendo buscas no diretório

No momento, já foi ensinado como inserir e remover registro, mas ainda está faltando o mais importante,

10 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

que é como fazer buscas no diretório. Para isso será usado o comando ldapsearch. A sintaxe básica desse
comando é:

ldapsearch -x -b D
" _da_raiz_da_DIT"f"iltros"

Aqui temos o atributo novo -b:

-b "DN_da_raiz_da_DIT" : indica o DN da raiz da DIT, pois caso não seja informado, talvez sua
busca não consiga retornar os resultados desejados.

No comando também foi usada a expressão "filtros", que serve para procurar apenas registros com certo
valor para um atributo. Por exemplo, se quisermos fazer uma busca por todos os registros que tenham o
atributo cn=voip, teríamos o seguinte comando já fazendo a adaptação do filtro:

# ldapsearch -x -b "dc=rnp" cn=voip

Perceba que nessa busca não foi preciso se autenticar, pois no arquivo slapd.conf temos que qualquer
pessoa pode ter acesso de leitura ao diretório.

Existem várias outras formas de filtragem de buscas que não serão abordadas nesse documento, pois o
objetivo das implementações feitas aqui é apenas o de que o usuário possa ter uma melhor visão de como
funciona um diretório LDAP.

Informações mais aprofundadas sobre a sintaxe de consultas, inserções e outras operações usando o
OpenLdap podem ser encontradas na página oficial do software:

http://www.openldap.org

Nos manuais que acompanham o programa e nos helps que podem ser acessados através do parâmetro --
help na linha de comandos (Ex: ldapsearch --help).

Uma coisa que ainda deve ser citada é que se o seu servidor LDAP não estiver na mesma máquina onde
você está fazendo as inserções, remoções ou consultas, é necessário adicionar o seguinte parâmetro aos
respectivos comandos:

-h "ip_ou_nome_do_servidor" : indica o endereço ou o nome do servidor LDAP.

Exemplo:

# ldapsearch -h 192.168.0.12 -x -b "dc=rnp" cn=voip

Caso você queira fazer buscas usando o modo gráfico, é possível usar browsers (clientes) LDAP. Um
browser bastante interessante, o LBE (LDAP Browser Editor) pode ser encontrado em:

http://www.iit.edu/~gawojar/ldap/download.html

Esse cliente Java é bem fácil de configurar. Basta informar qual o servidor LDAP, qual a porta que ele
está usando (a porta padrão é a 389) e qual o DN da base do diretório. É possível também, diretamente do
browser, fazer modificações nos registros, caso você se autentique com o usuário adequado (para fazer
modificações via shell deve ser usado o comando ldapmodify).

11 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

Criando usuários, considerações finais e bibliografia

Já falamos algumas vezes nesse documento em usuários do LDAP, mas até agora não foi visto como criar
esses usuários. Para criar um usuário, basta inserir um registro no diretório (preferencialmente que seja
um registro que contenha os dados desse usuário) e colocar uma senha para ele.

Esse registro tem que possuir um RDN que seja formado por um atributo que possa referenciar um
usuário, como por exemplo cn ou uid (User Identifier), pois não são todos atributos que o LDAP aceita
para criar um usuário (por exemplo, mail não é aceito).

Para colocar a senha e criar o usuário propriamente dito, pode-se usar o comando ldappasswd, cuja
sintaxe é:

ldappasswd -x -D D
" _do_admin"D
" _do_registro_do_usuário"-W -S

O parâmetro -S quer dizer:

-S : faz que um prompt seja usado para indicar a nova senha do usuário.

Nesse caso (adicionar um novo usuário), com o parâmetro -D temos que usar o DN do admin, pois só ele
vai ser capaz de adicionar usuários. Mas depois de criado, o usuário pode mudar sua própria senha apenas
usando com o parâmetro -D seu próprio DN. Um exemplo de criação do usuário cujo DN é cn=voip,
ou=pop-rj, dc=rnp fica da seguinte forma:

# ldappasswd -x -D "cn=admin,dc=rnp" "cn=voip,ou=pop-rj,dc=rnp" -W -S

Caso o usuário voip queira mudar sua senha, basta ele usar o seguinte comando:

# ldappasswd -x -D "cn=voip,ou=pop-rj,dc=rnp" "cn=voip,ou=pop-rj,dc=rnp" -W -S

De acordo com o arquivo slapd.conf, usuários extras que forem criados além do admin não têm permissão
de escrita no diretório, a não ser em seu próprio registro.

Concluímos dizendo que o LDAP é uma solução interessante na área de diretórios, que como todas
aplicações, tem suas vantagens e desvantagens dependendo dos objetivos.

Bibliografia:

http://www.ldap.org.br
http://www.ldap.liceu.com.br/topo/classes_atributtos/classes.htm
http://geocities.yahoo.com.br/cesarakg/artigos.html#ldap
http://rfc.net/rfc3703.html
http://rfc.net/rfc2252.html
http://rfc.net/rfc2253.html
http://rfc.net/rfc2254.html
http://rfc.net/rfc2255.html
http://rfc.net/rfc2256.html

12 de 13 16/09/2009 09:10
Entendendo o LDAP [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4028

http://www.vivaolinux.com.br/artigo/Entendendo-o-LDAP

Voltar para o site

13 de 13 16/09/2009 09:10

Вам также может понравиться