Entendendo o LDAP

Saiba o que são diretórios e LDAP, em que momentos devemos usar um diretório ao invés de um banco de dados relacional, quais vantagens e desvantagens, além de implementações usando OpenLDAP.

[ Hits: 557.404 ]

Por: Francisco jonathan Rebouças Maia em 21/11/2005


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
...

# 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.
# 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 "DN do usuário" -W -f "arquivo_ldif_com_registros"

Veja uma pequena descrição do que cada parâmetro usado significa:
  • -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

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Definição de DIT e protocolo LDAP
   3. Registros
   4. Exemplo de registros
   5. Modelos de abordagem do LDAP
   6. Instalação do OpenLdap
   7. slapd.conf
   8. Inserindo registros no LDAP
   9. Removendo registros do LDAP
   10. Fazendo buscas no diretório
   11. Criando usuários, considerações finais e bibliografia
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Implementação LDAP e Java

Instalando o poderoso banco de dados IBM DB2!

Injeção de SQL

Gerencie suas informações através de instruções SQL com selects turbinados (para leigos e experts)

OpenAI - Como usar uma Inteligência Artificial a seu favor

  
Comentários
[1] Comentário enviado por thekind em 21/11/2005 - 15:22h

Excelente artigo, até agora não conseguia entender direito o LDAP mas depois de ler este artigo esse problema acabou, parabéns cara, segue assim, a comunidade agradece :)

[2] Comentário enviado por removido em 21/11/2005 - 23:27h

eu "tumem"...
;-))

[3] Comentário enviado por marlokko em 22/11/2005 - 02:01h

Sempre tive curiosidade em saber o que era realmente esse LDAP... esse artigo foi muito bom!

[4] Comentário enviado por manser em 22/11/2005 - 20:36h

Parabéns pelo artigo.

Mas poderia citar algumas utilidades práticas para o ldap, acho que isso não ficou bem claro?

[5] Comentário enviado por agk em 23/11/2005 - 13:40h

Muito bom o artigo, bem didático.
Para quem não sabe o LDAP é utilizado para autenticação, catálogo de endereços e tem muitas outras funcionalidades também.
Pode-se utilizar o LDAP para autenticar com o squid, samba, e-mail, enfim são diversas as utilidades dele.
Estou há algum tempo realizando testes com um servidor LDAP, que será o pdc da rede, para autenticar estações GNU/Linux e Windows e também para autenticar o proxy.

[6] Comentário enviado por andrack em 24/11/2005 - 10:06h

Kceta...

Parabéns pelo artigo, kra!


[7] Comentário enviado por balani em 24/11/2005 - 13:29h

Parebens pelo artigo, há alguma possibilidade usar o ldap num gw para ser autenticado por usuarios de um dominio controlado pelo win2003, infelizmente tenho que usa-lo no server de dados, mas os dias dele estão contados.......

[8] Comentário enviado por jonathanmaia em 24/11/2005 - 16:14h

Kara, num sei te informar pois não trabalho com windows, mas provavelmente deve haver uma solução!!

Até mais! Abraços!

[9] Comentário enviado por fischerdouglas em 26/12/2005 - 13:16h

Otimo artigo!

Eu gostaria que todos os artigos fossem
tão bem comentados quanto este!
- A cada passo um cometário!
- A cada linha uma explicação!

Eu tenho MUUUITA raiva de artigos que
propõe-se a dirimir algumas dúvidas e
nos deixam mais confusos que no inicio!!

[10] Comentário enviado por m4sk4r4 em 29/08/2006 - 17:36h

Bacana o artigo,

Tenho uma dúvida aqui no trabalho, temos o OpenLDAP implantado e funcionando.

Nas estações linux e windows os usuários logam-se perfeitamente, a única
diferença é que no windows cada usuário acessam suas pastas na rede sem precisar ficar digitando login e senha toda hora..
É como se as estações linux estivessem fora do dominio.

Alguem sabe de algo que possa ajuda.

t+

Gabriel Santana
M4sk4r4

[11] Comentário enviado por cleitão em 05/09/2006 - 11:29h

O artigo está excelente e quando se pega a bibliografia então nem se fala da pra fazer um servidor sem nenhuma dor de cabeça........

Valeu mesmo!!!!!!!!!!!!!

[12] Comentário enviado por girlmilla em 20/11/2006 - 19:49h

Olá.. Estou com problemas na após a criação do arquivo .ldif ao executar o comando:

# ldapadd -x -D cn=Manager,dc=teste,dc=com -W -f base.ldif

Retorna o erro:

# ldap_bind: Can't contact LDAP server (-1)

Qual seria a solução?

[13] Comentário enviado por removido em 06/12/2006 - 10:43h

Só para complementar a resposta do "agk" e para esclarecer melhor para o "manser", o LDAP também é usado em esquemas de autenticações de banco de dados. No Oracle, por exemplo, eu tenho que distribuir um arquivo texto com informações sobre as conexões disponíveis para cada cliente da rede. (o famoso "tnsname.ora") Ex: IP, porta, SID, etc... O LDAP dispensa esse trabalho porque os clientes enxergam os dados de conexão mencionados através do diretório LDAP disponível para a rede toda.

Espero ter agregado algum valor ao artigo.

Sds

[14] Comentário enviado por removido em 14/12/2006 - 17:47h

Muito Bom.
Vai direto para o Favoritos.

[15] Comentário enviado por lipecys em 05/10/2007 - 10:51h

Cara, simplesmente o melhor artigo sobre LDAP que já vi por aqui.
Valew mesmo.

[16] Comentário enviado por anselmu em 26/05/2008 - 14:36h

Ótimo artigo.
Parabéns!

[17] Comentário enviado por vinicius braga em 16/06/2008 - 15:47h

olha este seu artigo esta Otimo !!! meus parabens !!! todos elogios a ele sao validos

[18] Comentário enviado por mtutucv em 25/07/2008 - 09:34h

estava mesmo precisando de configurar o LDAP, Pelo que li achei muito facil agora configurar o LDAP. vejá se escrevas mais alguma coisa do tipo porque isso ficou Legal o proximo pode ficar melhor

[19] Comentário enviado por carlosdias98 em 07/09/2008 - 01:18h

Muito interessante, parabéns

[20] Comentário enviado por dandanlinux em 13/07/2009 - 13:44h

Parabéns, há muito tempo queria saber como funcionava o LDAP.

[21] Comentário enviado por andersoneugenio em 14/07/2009 - 16:32h

não estou conseguindo alterar a senha dos usuários cadastrados ele sempre dá a mensagem:
ldap_bind:invalid credentials(49) , alguém sabe o que é? acho que poderia ser a senha errada, mas não é.

[22] Comentário enviado por marujo em 24/08/2009 - 11:33h

Rpz... Meus parabens pelo artigo, otimas explanaçoes, sem duvida um documento exelente para pesquisas... Assim fica bem mais facil entender certos conceitos...


[23] Comentário enviado por mcl085 em 01/10/2009 - 11:06h

Muito bom Artigo. Parabéns. Estou precisando de uma apostila de LDAP, se vc tiver uma envie pra mim por favor: marcelowth(arroba)gmail.com

[24] Comentário enviado por jnetux em 29/09/2010 - 21:06h

Caro jonathanmaia, obrigado pelo excelente e esclarecedor tutorial.
Tenho só uma dúvida. Na máquina cliente, como faço para o usuário logar caso ela esteja desconectada?
Pois o login do usuário na máquina com LDAP, só é aceito se ela estiver conectada à rede.
Pois, aqui na minha configuração do trabalho, preciso que o usuário acesse a máquina mesmo com o servidor desligado.
Mais uma vez obrigado.
JNetux

[25] Comentário enviado por onilson em 21/04/2011 - 20:04h

amigos desculpa pela minha ignorância, mas eu já li alguns artigos e tutoriais pela internet e mesmo assim eu ainda não consegui entender para que serve o LDAP.Minhas dúvidas são: Para que serve? Que vantagens ele me traz?Quando devo usar?

[26] Comentário enviado por jeff.jno em 18/10/2011 - 16:12h

Pessoal LDap serve de uma maneira bem simplória de dizer para identificar máquinas e objetos na rede.
Cada computador cada usuário podem ser conectados a base Ladp assim quando alguem for usar um recurso de rede, como por exemplo, impressão ou internet ele precisa se identificar na LDap.
Até mesmo rede sem fio vocês podem utilizar a Ldap usando o FreeRadius, OpenLdap.
Serviço de impressão com autenticação de usuário a mesma coisa onde o FreeRadius é o "protocolo" que fornece o usuario e senha para os outros aplicativos sendo a ldap responsável apenas pela estrutura de dados.

O artigo está excelente, agora uma dúvida. Na minha instalação não veio o arquivo sldap.conf tenho apenas o ldap.conf.
Devo fazer essa configuração no arquivo ldap.conf mesmo ou devo criaro sldap.conf?
Outra coisa como eu troco a senha do usuario admin acho que esqueci ela :p

Valew pessoal.

[27] Comentário enviado por rogerioapsantos em 16/01/2014 - 09:59h

Parabéns pelo Artigo.
Estou com dificuldade com o comando ldappasswd, acontece o erro abaixo;

executo:
root@debian:/usr/sbin# ldappasswd -h 192.168.0.10 -p 389 -x -D "admin" -w senhaadmin -a senhaantiga -s novasenha '(&(objectClass=person)(sAMAccountName=usuario)'

retorna:
Result: Protocol error (2)
Additional info: 0000203D: LdapErr: DSID-0C090E71, comment: Unknown extended request OID, data 0, v23f0

O que poderia ser este erro?

Obrigado Pessoal

[28] Comentário enviado por hrcerq em 15/04/2017 - 21:11h

Por mais antigo que seja o artigo, continua sendo bastante útil. Favoritado!

---

Atenciosamente,
Hugo Cerqueira

[29] Comentário enviado por acsoprana em 03/06/2017 - 02:48h

Jonatham, muito bom ... mais tenho uma dúvida com relação de como o ldap faz a busca de um usuário que solicitou autenticação.. vc tem a figura que organiza a DIT certo, então levando em consideração este exemplo (registro 2), se eu fosse autenticar um usuário na minha aplicação com base nesta DIT como o Ldap faria a busca??
Registro 2
DN: ou=pop-ce,dc=rnp (identificador único)
RDN: ou=pop-ce (identificador no nível)

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

Neste caso como ele faz a busca do usuário? ele percorre toda a raiz do registro 2 indo para os diversos níveis a baixo automaticamente independente dos CN e de onde o usuário foi cadastrado? Ou deve ser passado toda vez que o usuário for autenticar a DN completa a que ele pertence "DN: cn=gerencia,ou=pop-ce,dc=rnp"..?

[30] Comentário enviado por hlbomfim em 04/01/2018 - 12:06h

muito bom... ajudou muito
parabéns


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts