为什么user@domain和cn=user,dc=domain不等价?

为什么user@domain和cn=user,dc=domain不等价?

我在 AWS 上设置了一个简单的 AD,最终可以使用 LDAP 进行身份验证。我不明白为什么我无法使用dc=到处都广泛推荐的,但我可以使用@domain

ldap_bind($ldapconn, "cn=Administrator,dc=ldap,dc=patontheback,dc=org", "<password>");
ldap_bind($ldapconn, "[email protected]", "<password>");

这些难道不应该是等价的吗?@domain 是否始终有效,还是特定于 Simple AD?

在此处输入图片描述

答案1

OP 提供了管理员用户位置的附加信息,因此他必须使用cn=Administrator,ou=Users,dc=ldap,dc=pathontheback,dc=org

编辑:打错了,应该是: cn=Administrator,cn=Users,dc=ldap,dc=pathontheback,dc=org

用户是一个容器,而不是OU。

答案2

A阅读一点这里可能需要对 LDAP 和 DN 进行排序。

专有名称(通常简称为 DN)既可以唯一地标识条目,又可以描述其在 DIT 中的位置。DN 非常类似于文件系统上的绝对路径,只不过文件系统路径通常从文件系统的根开始,然后从左到右沿树下降,而 LDAP DN 则从左到右沿树上升。

因此,如果您想指定域中管理员帐户的 DN,则需要指定其完整(且正确)路径。如您的屏幕截图所示(以及它在 AD 中的标准事实),管理员帐户位于用户容器中。

请注意,我用的是容器而不是 OU。AD 中的容器并非都是 OU,而且大多数默认容器实际上都不是 OU。您可以通过将 图标Users与 图标进行比较来一目了然Domain Controllers。如果这太微妙,您还可以检查objectClass每个容器的实际属性。OU 将包含organizationalUnit,而普通容器将具有container。在 DN 值中,OU 以“OU=”作为其 RDN 键,而容器以“CN=”作为其 RDN 键。

无论如何,当您每天寻找某个 DN 时,您实际上不必手动弄清楚这一切。只需打开(或查询)您要查找的对象的属性并检查属性即可distinguishedName。这将为您提供完整且正确的路径,而无需自己尝试手动将一堆 RDN 和上下文串在一起。

总结 示例域中管理员帐户的 DN 是CN=Administrator,CN=Users,DC=ldap,DC=patontheback,DC=org

话虽如此,更好的做法是继续做你正在做的事情并使用 UPN[电子邮件保护]用于将账户绑定到 AD,因为它们比 DN 值改变的可能性更小。

答案3

@Ryan Bolger 回答有很好的解释。我想为那些想看看各种命令会发生什么的人提供一个更完整的示例。

例如,我对 binddn 使用以下内容distinguishedName: CN=auser,OU=IT Dev,OU=localdomain Users,DC=localdomain,DC=lan

-D 'CN=auser,OU=IT Dev,OU=localdomain Users,DC=localdomain,DC=lan'

或 UPNuserPrincipalName: [email protected]

-D '[email protected]'

以下几行将产生相同的输出

ldapsearch -x -h '192.168.0.10' -D 'CN=Auser,OU=IT Dev,OU=localdomain Users,DC=localdomain,DC=lan' -w password -b"cn=auser,OU=IT Dev,OU=localdomain Users,dc=localdomain,dc=lan" -s sub "objectclass=*"   

或者

ldapsearch -x -h '192.168.0.10' -D '[email protected]' -w password -b"cn=auser,OU=IT Dev,OU=localdomain Users,dc=localdomain,dc=lan" -s sub "objectclass=*"

将产生相同的输出

# extended LDIF
#
# LDAPv3
# base <cn=auser,OU=IT Dev,OU=localdomain Users,dc=localdomain,dc=lan> with scope subtree
# filter: objectclass=*
# requesting: ALL
#

# auser, IT Dev, localdomain Users, localdomain.lan
dn: CN=GitLab,OU=IT Dev,OU=localdomain Users,DC=localdomain,DC=lan
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: auser
givenName: auser
distinguishedName: CN=auser,OU=IT Dev,OU=localdomain Users,DC=localdomain,DC=lan
instanceType: 4
whenCreated: 20190221073536.0Z
whenChanged: 20190221080923.0Z
displayName: auser
uSNCreated: 108114404
memberOf: CN=groupofusers,OU=localdomain Groups,DC=localdomain,DC=lan
uSNChanged: 108116177
name: auser
userAccountControl: 66048
codePage: 0
countryCode: 0
primaryGroupID: 513
accountExpires: 9223372036854775807
sAMAccountName: auser
sAMAccountType: 805306368
userPrincipalName: [email protected]
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=localdomain,DC=lan
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 131952101637691018

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

相关内容