Temos um aplicativo que costumava autenticar por meio de nossa instância Atlassian Crowd, mas após uma grande reescrita, essa fonte de autenticação não está mais disponível. Agora preciso de uma solução para autenticar usuários do nosso Active Directory e de um servidor OpenLDAP, que anteriormente era gerenciado pelo Crowd.
A opção mais promissora parece ser o meta backend OpenLDAP, e agora tenho uma configuração onde posso encontrar usuários de ambos os diretórios com ldapsearch
, mas a autenticação só funciona para usuários AD. Encontrei algumas perguntas como esta , que foram muito úteis, mas no final das contas não funcionaram para mim.
Application
│
▼
OpenLDAP (meta)
│ │
│ │
OpenLDAP ◄──┘ └─► Active Directory
Esta é minha configuração atual:
moduleload back_meta.la
moduleload back_ldap.la
moduleload rwm
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/msuser.schema
database meta
suffix "dc=openldap,dc=Example,dc=com"
uri "ldap://openldap.example.com/dc=openldap,dc=Example,dc=com"
map objectclass user inetOrgPerson
map attribute sAMAccountName uid
#map attribute unicodePwd userPassword
map attribute objectGUID entryUUID
map objectclass group groupOfUniqueNames
map attribute member uniqueMember
protocol-version 3
#rebind-as-user yes
idassert-authzFrom "dn.regex:.*"
suffix "DC=ad,DC=Example,DC=com"
uri "ldap://dc01.ad.example.com/DC=ad,DC=Example,DC=com"
rebind-as-user yes
chase-referrals no
readonly yes
protocol-version 3
idassert-bind
bindmethod=simple
binddn="CN=username,OU=Service-Accounts,DC=ad,DC=Example,DC=com"
credentials="PASSWORD"
flags=override
mode=none
norefs yes
sizelimit 999
idassert-authzFrom "dn.regex:.*"
suffix "dc=Example,dc=com"
rootdn "cn=admin,dc=Example,dc=com"
rootpw PASSWORD
Parece que o único problema que resta é o campo de senha. De acordo com a documentação da MS, ambos unicodePwd
existem userPassword
no AD, mas nenhum deles funciona para o servidor OpenLDAP (que usa userPassword
). Não consegui descobrir como as senhas são hash no AD, as contas armazenadas no OpenLDAP são hash com MD5 ou SSHA, dependendo da idade da senha, eu acho.
Tentei rebind-as-user
ligar e desligar o servidor OpenLDAP, tentei vincular com um nome de usuário em vez de anônimo, não tenho mais ideias.
O que está faltando para poder autenticar nos dois diretórios?
Finalmente encontrei uma configuração funcional. Depois de perceber que a única coisa que não funcionava era a autorização, mudei a configuração de um servidor LDAP separado para o servidor LDAP que contém as contas.
Adicionei um meta-banco de dados adicional com um DN acima do banco de dados existente e adicionei o atributo
olcSubordinate: TRUE
ao banco de dados existente.Agora, em
dc=example,dc=com
I Obtenho as UOsad
ehostname
, com o último mantendo as contas locais e o primeiro mostrando as entradas do AD, com os atributos que preciso mapear para seus nomes correspondentes no OpenLDAP.