
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 sAMAccountName
atributo 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