Ldap

OpenLDAP 與 Active Directory 身份驗證機制

  • June 18, 2018

我能夠使用objectClass的userPrincipalName屬性登錄到 Active Directory;user(例如foo@mydomain.com

我還設置了一個OpenLDAP伺服器實例,我只能使用它進行身份驗證dn,例如

"cn=somecn,cn=anothercn,ou=someou,dc=mydomain,dc=com"

如何OpenLDAP使用另一個欄位進行身份驗證,例如例如的mail屬性inetOrgPerson

更何況,就算有這種可能,又怎麼能保證這個領域的唯一性呢**?**(我假設 AD 在該userPrincipalName領域提供的功能)

OpenLDAP 支持兩種身份驗證方法(simpleSASL),同時SASL是 ldap-utils 之類的預設方法ldapsearch

當您使用 DN 進行身份驗證時,您會執行所謂的“簡單綁定”。

簡單綁定

simple方法具有三種操作模式:

  • 匿名的
  • 未經身份驗證
  • 使用者/密碼認證

例如:

# ldapwhoami -x
anonymous

或者:

# ldapwhoami -x -D uid=rda,ou=people,dc=phys,dc=ethz,dc=ch -w secret1234
dn:uid=rda,ou=people,dc=phys,dc=ethz,dc=ch

SASL

OpenLDAP 客戶端和伺服器能夠通過簡單身份驗證和安全層 (SASL) 框架進行身份驗證,詳細資訊請參見RFC4422。SASL 支持多種身份驗證機制。OpenLDAP 最常見的機制是EXTERNALGSSAPI

EXTERNAL機制使用由較低級別協議執行的身份驗證:通常是 TLS 或 Unix IPC 。例如使用 Unix IPC 作為 root 使用者:

# ldapwhoami -Y EXTERNAL -H ldapi://
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

經過身份驗證的使用者被映射到樹中的一個 DN cn=peercred,cn=external,cn=auth

GSSAPI機制通常意味著 Kerveros 5。如果您部署了 Kerberos 5 基礎架構,則可以使用 Kerberos Principals 進行身份驗證。

首先針對 KDC 進行身份驗證並獲取 TGT:

# kinit rda
Password for rda@PHYS.ETHZ.CH: secret1234

然後您可以使用 GSSAPI 對 OpenLDAP 進行身份驗證:

# ldapwhoami
SASL/GSSAPI authentication started
SASL username: rda@PHYS.ETHZ.CH
SASL SSF: 56
SASL data security layer installed.
dn:uid=rda,cn=gssapi,cn=auth

主體rda@PHYS.ETHZ.CH映射到樹中的 DN cn=gssapi,cn=auth

現在,您可以使用正則表達式將經過身份驗證的 DN 映射到數據庫中的實際 DN,olcAuthzRegexp配置cn=config如下:

dn: cn=config
objectClass: olcGlobal
cn: config
olcAuthzRegexp: {0}uid=([^,/]*),cn=phys.ethz.ch,cn=gssapi,cn=auth uid=$1,ou=people,dc=phys,dc=ethz,dc=ch
...

olcAuthzRegexp行將領域中的任何使用者主體映射PHYS.ETHZ.CH到相應的posixAccount條目,該條目下的屬性ou=people,dc=phys,dc=ethz,dc=ch中具有相同的使用者名。uid

例如,使用以下 posix 條目

# ldapsearch uid=rda
dn: uid=rda,ou=people,dc=phys,dc=ethz,dc=ch
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: krbPrincipalAux
objectClass: krbTicketPolicyAux
uid: rda
krbPrincipalName: rda@PHYS.ETHZ.CH
...

ldapwhoami將會呈現:

# ldapwhoami
SASL/GSSAPI authentication started
SASL username: rda@PHYS.ETHZ.CH
SASL SSF: 56
SASL data security layer installed.
dn:uid=rda,ou=people,dc=phys,dc=ethz,dc=ch

使用的映射olcAuthzRegexp必須匹配 DIT 中的唯一條目。這要由管理員或管理軟體來保證。

引用自:https://unix.stackexchange.com/questions/450447