OpenLDAP 与 Active Directory 身份验证机制

pka*_*mol 3 ldap openldap

我能够使用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领域提供了一个功能)

rda*_*rda 6

OpenLDAP 支持两种身份验证方法(simpleSASL),而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)

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
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=chuid

例如使用以下 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 中的唯一条目匹配。这将由管理员或管理软件来确保。