Configurando o OpenLDAP como um proxy do Active Directory

Configurando o OpenLDAP como um proxy do Active Directory

Tentamos configurar um servidor Active Directory para autenticação em toda a empresa.

Alguns dos servidores que devem autenticar no AD são colocados em uma DMZ, então pensamos em usar um servidor LDAP como proxy, para que apenas 1 servidor na DMZ tenha que se conectar à LAN onde o servidor AD está colocado ).

Com algumas pesquisas no Google, não houve problema em configurar o slapd (veja slapd.conf abaixo) e parecia funcionar ao usar a ferramenta ldapsearch, então tentamos usá-lo no apache2 htaccess para autenticar o usuário através do proxy LDAP.

E aí vem o problema: Descobrimos que o nome de usuário no AD está armazenado no atributo 'sAMAccountName' então configuramos em .htaccess (veja abaixo) mas o login não funcionou.

No syslog descobrimos que o filtro para o ldapsearch não era (como deveria ser) '(&(objectClass=*)(sAMAccountName=authtest01))' mas '(&(objectClass=*)(?=indefinido))'que descobrimos ser a maneira do slapd mostrar que o atributo não existe ou que o valor está sintaticamente errado para este atributo.

Pensamos em um esquema ausente e encontramos oesquema.microsoft(e os .std / .ext) e tentei incluí-los no slapd.conf. O que não funciona. Não encontramos nenhum esquema funcional, então apenas escolhemos a parte sobre sAMAccountName e construímos um microsoft.minimal.schema (veja abaixo) que incluímos. Agora obtemos o log mais preciso no syslog:

Jun 16 13:32:04 breauthsrv01 slapd[21229]: get_ava: illegal value for attributeType sAMAccountName
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH base="ou=xxx,dc=int,dc=xxx,dc=de" scope=2 deref=3 filter="(&(objectClass=\*)(?sAMAccountName=authtest01))"
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH attr=sAMAccountName
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=

Usar nosso Apache htaccess diretamente com o AD via LDAP funciona. Alguém tem uma configuração funcional? Agradeço por qualquer ajuda desde já:

tapa.conf:

allow bind_v2
include         /etc/ldap/schema/core.schema
...
include         /etc/ldap/schema/microsoft.minimal.schema
...
backend         ldap
database        ldap

suffix "ou=xxx,dc=int,dc=xxx,dc=de"
uri "ldap://80.156.177.161:389"
acl-bind bindmethod=simple binddn="CN=authtest01,ou=GPO-Test,ou=xxx,dc=int,dc=xxx,dc=de" credentials=xxxxx

.htaccess:

AuthBasicProvider ldap
AuthType basic
AuthName "AuthTest"
AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?sAMAccountName?sub"
AuthzLDAPAuthoritative On
AuthLDAPGroupAttribute member
AuthLDAPBindDN  CN=authtest02,OU=GPO-Test,OU=xxx,DC=int,DC=xxx,DC=de
AuthLDAPBindPassword test123
Require valid-user

microsoft.minimal.schema:

attributetype ( 1.2.840.113556.1.4.221
      NAME 'sAMAccountName'
      SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
      SINGLE-VALUE )

Responder1

Você precisa adicionar mapeamentos ao seu arquivo slapd.conf:

moduleload rwm
...
overlay rwm
rwm-map attribute uid sAMAccountName
rwm-map objectClass posixGroup group 
rwm-map objectClass posixAccount person
rwm-map objectClass memberUid member

Então você pode procurar oUIDatributo em vez donome da conta sAMAatributo em seu arquivo .htaccess:

AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?uid?sub"

Responder2

Você está vendo esta mensagem de erro:

get_ava: valor ilegal para attributeType sAMAccountName

O que é causado pela falta de uma regra de correspondência na sua definição do sAMAccountNameatributo microsoft.minimal.schema. Simplificando, as definições de esquema do OpenLDAP permitem que você diga que tipo de pesquisas são permitidas (presença, correspondência exata, correspondência de substring, etc.), e esta definição não possui nenhuma.

Experimente isto:

 attributetype ( 1.2.840.113556.1.4.221
   NAME 'sAMAccountName'
   EQUALITY caseIgnoreMatch
   SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
   SINGLE-VALUE )

Responder3

A resposta de Jonathan me apontou na direção certa, me ajudando a superar:

additional info: sAMAccountName: attribute type undefined

problema. Mas percebi que você precisa definir esse atributo como um valor legal para a entrada de uma pessoa e fornecer a cada pessoa a objectClass que pode ter esse atributo. Assim como todos os atributos que você pode atribuir a um inetOrgPerson.

Meu arquivo microsoft.minimal.schema agora é:

attributetype ( 1.2.840.113556.1.4.221
          NAME 'sAMAccountName'
          SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
          SINGLE-VALUE )

attributetype ( 1.2.840.113556.1.4.146
          NAME 'objectSid'
          SYNTAX '1.3.6.1.4.1.1466.115.121.1.40'
          SINGLE-VALUE )

objectclass ( 1.2.840.113556.1.5.6
        NAME 'securityPrincipal'
        SUP top
        AUXILIARY
        MUST (objectSid $ sAMAccountName )
        MAY () )

 #            MAY (nTSecurityDescriptor $ securityIdentifier $ supplementalCredentials $
 #                rid $ sAMAccountType $ sIDHistory $ altSecurityIdentities $ tokenGroups $
 #                    tokenGroupsNoGCAcceptable $ accountNameHistory  $
 #                                              tokenGroupsGlobalAndUniversal))

Estou substituindo os atributos opcionais do MS por nada, então não preciso defini-los.

Um exemplo de entrada de usuário é como:

dn: uid=user2,ou=example,dc=aa,dc=ad,dc=example,dc=gov                                                                          
uid: user2                                                                                                              
sAMAccountName: user2                                                                                                   
objectSid: user2                                                                                                        
cn: User Two                                                                                                            
displayName: User Two                                                                                                   
givenName: User2                                                                                                        
sn: One                                                                                                                 
objectClass: inetOrgPerson                                                                                              
objectClass: securityPrincipal                                                                                          
mail: [email protected]                                                                                                 
 # password from slappasswd is 'user2'                                                                                   
userPassword: {SSHA}sjB5fmIIPTrUUammtmonP+6DdC93+P4L    

informação relacionada