No LDAP, o que exatamente é um DN de ligação?

19

Escrevi vários códigos que se conectam aos servidores LDAP e executam consultas, mas sempre foi um vodu para mim. Uma coisa que eu realmente não entendo é o conceito de um DN de ligação. Aqui está um exemplo usando a ldapsearchferramenta de linha de comando disponível no openldap. (Ignore a falta de autenticação.)

ldapsearch -h 1.2.3.4 -D dc=example,dc=com [query]

Qual é o propósito e a função da -D dc=example,dc=comparte disso? Por que precisamos vincular a um local específico na hierarquia de diretórios? É para estabelecer a qual parte do diretório minhas perguntas devem ser aplicadas? Por exemplo, se o nó raiz do diretório for dc=come ele tiver dois filhos ( dc=fooe dc=bar), talvez eu queira que minhas consultas sejam contra a dc=foo,dc=comsubárvore e não a dc=bar,dc=comsubárvore?

dirtside
fonte

Respostas:

18

Um DN de ligação é um objeto ao qual você se liga dentro do LDAP para fornecer permissões para fazer o que você está tentando fazer. Algumas (muitas?) Instâncias LDAP não permitem ligações anônimas ou não permitem que determinadas operações sejam conduzidas com ligações anônimas; portanto, você deve especificar um bindDN para obter uma identidade para executar essa operação.

De uma maneira não técnica semelhante - e sim, é exagero - um banco permitirá que você entre e observe as taxas de juros sem fornecer nenhum tipo de identificação, mas para abrir uma conta ou sacar dinheiro, você deve ter uma identidade que eles conhecem - essa identidade é o bindDN.

John
fonte
O bindDN sempre corresponde a um nó no diretório? Ou pode ser uma string arbitrária?
dirtside
Sim. Ele deve corresponder a um nó que possui a capacidade de transportar um atributo de senha ou de outro modo ser autenticado.
John
Tomayto, tomahto. Ername Nome de usuário, vincule DN. E🏻‍♂️
emallove
31

Não fique confuso entre o baseDN e o bindDN .

O baseDN de uma pesquisa é o ponto de partida. Onde ele começará a pesquisar. Bastante auto-explicativo.

O DN do bindDN é basicamente a credencial que você está usando para se autenticar em um LDAP. Ao usar um bindDN, ele geralmente vem com uma senha associada a ele.

Em outras palavras, quando você especifica um bindDN, está usando o acesso de segurança desse objeto para percorrer a árvore LDAP.

Agora, a cadeia dc = example, dc = com não é o melhor exemplo para um bindDN, pois é um "domínio" para uma árvore LDAP. dc significa componente de domínio e toda árvore LDAP define sua raiz com uma string na forma de dc = string, dc = string, ... Mas essas strings não são um "caminho" como o resto da árvore.

Exemplos válidos são:

  • dc = exemplo, dc = com
  • dc = meudomínio
  • dc = avery, dc = longo, dc = lista, dc = de, dc = domínios

Mas, esses elementos raiz são indivisíveis. Eles se parecem com eles são vários elementos que representam um caminho como o resto da árvore, mas eles são não . Por exemplo, no último exemplo, um objeto dc = of, dc = domain não existe.

Imagine nomear sua unidade C: como "D: \ my \ folder \". Todo caminho lá vai parecer algo como "D: \ minha \ pasta \ meu \ real \ caminho", o que seria confuso, pois o caminho real do arquivo seria \ meu \ real \ caminho, certo? Bem, é assim que a base (raiz) de um LDAP se parece, com um conjunto de elementos dc =.

Link relevante: http://docs.oracle.com/cd/E19199-01/816-6400-10/lsearch.html

Marcelo
fonte
7
Parece um design desnecessariamente confuso, mas sua explicação faz sentido.
dirtside
11
Sim, eu concordo. Nomear sua raiz também se parece com um caminho não é a melhor escolha, mas acho que deve ter suas razões. Agora você sabe por que todos os DNs terminam com uma série de componentes dc =. =)
Marcelo