Tentativa de detectar padrões aceitáveis de DN de base LDAP para vários servidores de diretório em um script bash

2

Basicamente, estou escrevendo um script que determina um padrão aceitável para um DN base quando apontado para um nome de host específico. Estou envolvendo em torno de ldapsearch output.

  • Eu posso fazer o Active Directory olhando diretamente para o DSE raiz e puxando defaultNamingContext
  • Eu posso fazer o Domino iniciando uma pesquisa de um nível diretamente abaixo da filtragem de DSE para o dominoOrganization objectClass e apenas pegando o primeiro (é um padrão, portanto, se ele não estiver correto, eles podem alterá-lo). / li>
  • Eu posso fazer o OpenLDAP olhando diretamente para o DSE raiz e extraindo o primeiro valor de namingContexts

Mas eu também gostaria que isso desse suporte ao eDirectory apenas por precaução. O problema é que eu não tenho nenhuma instalação do eDirectory e não é software livre, então não posso instalar uma versão de teste dele para ver como ele está configurado.

Olhando para o site da Novell, parece que eles realmente não fazem a mesma defaultNamingContext coisa que a AD faz, e eles definitivamente não vão fazer uma classe de objeto dominoOrganization. A maioria dos exemplos de DNs que vi para o eDirectory parecem também usar o=OrganizationName como existe no Domino, mas também vi o=OrganizationName,C=US , portanto, se a abreviação do país puder ou não estar no DN base, eu precisaria fazer mais do que apenas um_level.

O que piora as coisas é se o servidor de diretórios é particionado (como algumas configurações do AD) ou é como o Domino, onde há muitas organizações padrão internas que não refletem onde você encontra as informações importantes do LDAP. Por exemplo, há uma organização O=RSA Data Security\, Inc.,C=US na instância LDAP do Domino que estou vendo agora.

Existe uma objectClass em particular que eu posso filtrar se eu iniciar uma pesquisa no DSE raiz? Eu percebo que esta é uma pesquisa cara (esp quando eu tenho que ir cheio sub no escopo), mas isso deve ser uma coisa do tipo uma vez-em-um-enquanto.

Longa história: Quais atributos de identificação a base da organização de uma empresa tem no eDirectory e como localizá-la se eu definir minha base de pesquisa como DSE raiz?

Eu prefiro exemplos, pois não serei capaz de validar seu código até que eu tenha a chance de precisar executar esse script em um servidor do eDirectory (estamos no ensino superior, então isso é definitivamente possível) .

    
por Bratchley 26.07.2013 / 00:59

1 resposta

3

Parece que namingContext é bastante onipresente para o objeto DSE raiz na maioria dos diretórios. Portanto, um padrão razoável geralmente é pegar o primeiro (a menos que o DSA específico defina um como padrão, como no AD). Se eles tiverem uma configuração exótica em que há várias partições / DITs no mesmo DSA não pertencente ao AD, os mesmos administradores provavelmente também saberão o que é um DN de base apropriado, se o primeiro namingContext for 't aquele que deveríamos estar procurando por usuários / grupos abaixo.

Pseudocódigo de como executar a detecção automática dos padrões de DN base para vários DSAs:

  # Active Directory Test
  # rootDSE lists acceptable default base DN for us
If "1.2.840.113556.1.4.800" in rootDSE["supportedCapabilities"]:
    defaultBase = rootDSE["defaultNamingContext"]

  # IBM Domino LDAP Test
  # Take the dn of the first dominoOrganization Object we find
If "IBM Lotus Software" == rootDSE["vendorname"]
    ldapsearch -LLL "objectClass=dominoOrganization" dn | head -1

  # eDirectory Test
  # Take the first Partition Object we find
If "Novell Inc." == rootDSE["vendorName"]
    ldapsearch -LLL "objectClass=Partition" dn | head -1

  # OpenLDAP Tests
  # This is the same as the default action so not technically required but it shows 
  # how you identify OpenLDAP DSA's. It's possible to nest some additional checks/searches
  # here for the various types of top level containers (For example to prefer domain 
  # container-style entries to org-style, etc).
If "OpenLDAProotDSE" in rootDSE["objectClass"]
    ldapsearch -LLL -b '' -s base namingContext | head -1

  # Apache DS Tests
  # Same as above, not technically required but it shows how you identify Apache DS
If "Apache Software Foundation" in rootDSE["vendorName"]
    ldapsearch -LLL -b '' -s base namingContext | head -1

  # Default to taking the first namingContext attribute if present but no tests works
If $(ldapsearch -LLL -b '' -s base namingContexts | head -1 | cut -d: -f2 | wc -c ) > 1
   ldapsearch -LLL -b '' -s base namingContext | head -1

  # I'm out of ideas on how to find a base DN so ultimately default to something explicit

return "(null)"

Determinando um bom DN base de um DSA do OpenLDAP :

[root@policyServer ~]# ldapsearch -x -LLL -H ldap://localhost -b '' -s base + | egrep "^namingContexts:" | head -1 | cut -d: -f2
 dc=trunkator,dc=com
[root@policyServer ~]#

Para referência, este é o mesmo DSE raiz do DSA (assegurei que havia vários DIT's listados para uma ilustração completa):

[root@policyServer ~]# ldapsearch -x -LLL -H ldap://localhost -b '' -s base +
dn:
structuralObjectClass: OpenLDAProotDSE
configContext: cn=config
monitorContext: cn=Monitor
namingContexts: dc=trunkator,dc=com
namingContexts: dc=localhost
supportedControl: 2.16.840.1.113730.3.4.18
supportedControl: 2.16.840.1.113730.3.4.2
supportedControl: 1.3.6.1.4.1.4203.1.10.1
supportedControl: 1.2.840.113556.1.4.319
supportedControl: 1.2.826.0.1.3344810.2.3
supportedControl: 1.3.6.1.1.13.2
supportedControl: 1.3.6.1.1.13.1
supportedControl: 1.3.6.1.1.12
supportedExtension: 1.3.6.1.4.1.1466.20037
supportedExtension: 1.3.6.1.4.1.4203.1.11.1
supportedExtension: 1.3.6.1.4.1.4203.1.11.3
supportedExtension: 1.3.6.1.1.8
supportedFeatures: 1.3.6.1.1.14
supportedFeatures: 1.3.6.1.4.1.4203.1.5.1
supportedFeatures: 1.3.6.1.4.1.4203.1.5.2
supportedFeatures: 1.3.6.1.4.1.4203.1.5.3
supportedFeatures: 1.3.6.1.4.1.4203.1.5.4
supportedFeatures: 1.3.6.1.4.1.4203.1.5.5
supportedLDAPVersion: 3
supportedSASLMechanisms: GSSAPI
entryDN:
subschemaSubentry: cn=Subschema
    
por 08.08.2013 / 15:55

Tags