Kombinieren von OpenLDAP und Active Directory über das OpenLDAP-Meta-Backend

Kombinieren von OpenLDAP und Active Directory über das OpenLDAP-Meta-Backend

Wir haben eine Anwendung, die sich früher über unsere Atlassian Crowd-Instanz authentifiziert hat, aber nach einer umfassenden Neuentwicklung ist diese Authentifizierungsquelle nicht mehr verfügbar. Jetzt brauche ich eine Lösung, um Benutzer sowohl von unserem Active Directory als auch von einem OpenLDAP-Server aus zu authentifizieren, was zuvor von Crowd erledigt wurde.

Die vielversprechendste Option scheint das OpenLDAP Meta-Backend zu sein, und ich habe jetzt eine Konfiguration, mit der ich Benutzer aus beiden Verzeichnissen finden kann ldapsearch, die Authentifizierung funktioniert jedoch nur für AD-Benutzer. Ich habe einein paar Fragen wie diese, die sehr hilfreich waren, aber bei mir letztendlich nicht funktioniert haben.

           Application
         OpenLDAP (meta)
             │   │
             │   │
 OpenLDAP ◄──┘   └─►  Active Directory

Dies ist meine aktuelle Konfiguration:

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

Es scheint, dass das einzige verbleibende Problem das Kennwortfeld ist. Laut der MS-Dokumentation sind sowohl als unicodePwdauch userPasswordin AD vorhanden, aber keiner von beiden funktioniert für den OpenLDAP-Server (der verwendet userPassword). Ich konnte nicht herausfinden, wie Kennwörter in AD gehasht werden. Die in OpenLDAP gespeicherten Konten werden mit MD5 oder SSHA gehasht, je nach Alter des Kennworts, schätze ich.

Ich habe es rebind-as-userimmer wieder mit dem OpenLDAP-Server versucht, ich habe die Bindung mit einem Benutzernamen statt mit anonym versucht, mir fallen keine Ideen mehr ein.

Was fehlt, um sich gegenüber beiden Verzeichnissen authentifizieren zu können?

Antwort1

Ich habe endlich eine funktionierende Konfiguration gefunden. Nachdem ich festgestellt hatte, dass nur die Autorisierung nicht funktionierte, habe ich die Konfiguration von einem separaten LDAP-Server auf den LDAP-Server verschoben, auf dem die Konten gespeichert sind.

Ich habe eine zusätzliche Metadatenbank mit einem DN über der bestehenden Datenbank hinzugefügt und das Attribut olcSubordinate: TRUEzur bestehenden Datenbank hinzugefügt.

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb.la
olcModuleLoad: {1}back_meta.la
olcModuleLoad: {2}back_ldap
olcModuleLoad: {3}rwm

dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=hostname,dc=example,dc=com
structuralObjectClass: olcHdbConfig
olcSubordinate: TRUE

dn: olcDatabase={2}meta,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMetaConfig
olcDatabase: {2}meta
olcSuffix: dc=example,dc=com
olcDbOnErr: continue
olcDbCancel: abandon
olcDbTFSupport: no
structuralObjectClass: olcMetaConfig

dn: olcMetaSub={0}ad,olcDatabase={2}meta,cn=config
objectClass: olcMetaTargetConfig
olcMetaSub: {0}ad
olcDbURI: ldaps://dc.example.com/DC=ad,DC=example,DC=
 com
olcDbIDAssertAuthzFrom: {0}dn.regex:.*
olcDbIDAssertBind: bindmethod=simple binddn="CN=user,OU=service user
 s,DC=ad,dc=example,dc=com" credentials="XXXXXXXXXXXXXXXXXXXXXXXX
 XXXXX" flags=override mode=none
olcDbMap: {0}objectclass inetOrgPerson user
olcDbMap: {1}attribute uid sAMAccountName
olcDbMap: {2}attribute entryUUID objectGUID
olcDbMap: {3}objectclass groupOfUniqueNames group
olcDbMap: {4}attribute uniqueMember member
olcDbChaseReferrals: FALSE
olcDbNoRefs: TRUE
olcDbProtocolVersion: 3
olcDbRebindAsUser: TRUE
structuralObjectClass: olcMetaTargetConfig

Jetzt dc=example,dc=comerhalte ich unter die Organisationseinheiten adund hostname, wobei letztere die lokalen Konten enthalten und erstere die Einträge aus AD anzeigt, wobei die Attribute, die ich benötige, den entsprechenden Namen in OpenLDAP zugeordnet sind.

verwandte Informationen