OpenLDAP 與 Active Directory 身份驗證機制
我能夠使用objectClass的
userPrincipalName
屬性登錄到 Active Directory;user
(例如foo@mydomain.com
)我還設置了一個
OpenLDAP
伺服器實例,我只能使用它進行身份驗證dn
,例如
"cn=somecn,cn=anothercn,ou=someou,dc=mydomain,dc=com"
如何
OpenLDAP
使用另一個欄位進行身份驗證,例如例如的inetOrgPerson
?更何況,就算有這種可能,又怎麼能保證這個領域的唯一性呢**?**(我假設 AD 在該
userPrincipalName
領域提供的功能)
OpenLDAP 支持兩種身份驗證方法(
simple
和SASL
),同時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 最常見的機制是
EXTERNAL
和GSSAPI
。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
映射到樹中的 DNcn=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 中的唯一條目。這要由管理員或管理軟體來保證。