我能够使用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 支持两种身份验证方法(simple
和SASL
),而SASL
是 ldap-utils 等的默认方法ldapsearch
。
当您使用 DN 进行身份验证时,您会执行所谓的“简单绑定”。
该simple
方法具有三种操作模式:
例如:
# ldapwhoami -x
anonymous
Run Code Online (Sandbox Code Playgroud)
或者:
# 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
经过身份验证的用户被映射到树中的一个 DN cn=peercred,cn=external,cn=auth
。
该GSSAPI机制通常意味着Kerveros 5.如果你有一个Kerberos 5的基础设施部署,您可以使用Kerberos主体进行身份验证。
首先对 KDC 进行身份验证并获得 TGT:
# kinit rda
Password for rda@PHYS.ETHZ.CH: secret1234
Run Code Online (Sandbox Code Playgroud)
然后您可以使用 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
Run Code Online (Sandbox Code Playgroud)
主体rda@PHYS.ETHZ.CH
映射到树中的 DN cn=gssapi,cn=auth
。
现在,您可以使用具有以下olcAuthzRegexp
配置的正则表达式将该经过身份验证的 DN 映射到数据库中的实际 DN 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
...
Run Code Online (Sandbox Code Playgroud)
此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
...
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用的映射olcAuthzRegexp
必须与 DIT 中的唯一条目匹配。这将由管理员或管理软件来确保。
归档时间: |
|
查看次数: |
813 次 |
最近记录: |