Kit Sunde Asked: 2016-05-10 06:58:12 +0800 CST2016-05-10 06:58:12 +0800 CST 2016-05-10 06:58:12 +0800 CST 为什么 user@domain 和 cn=user,dc=domain 不等价? 772 我已经在 AWS 上设置了一个 Simple AD,我最终可以使用 LDAP 对其进行身份验证。我不明白为什么我无法使用dc=到处广泛建议但能够使用@domain的 . ldap_bind($ldapconn, "cn=Administrator,dc=ldap,dc=patontheback,dc=org", "<password>"); ldap_bind($ldapconn, "Administrator@ldap.patontheback.org", "<password>"); 这些不应该是等效的吗?@domain 将始终有效还是特定于 Simple AD? ldap aws-directory-service 3 个回答 Voted Best Answer Zina 2016-05-10T07:28:27+08:002016-05-10T07:28:27+08:00 OP 提供了有关管理员用户位置的附加信息,因此他必须使用cn=Administrator,ou=Users,dc=ldap,dc=pathontheback,dc=org 编辑:打错了,它必须是: cn=Administrator,cn=Users,dc=ldap,dc=pathontheback,dc=org 用户是一个容器,而不是 OU。 Ryan Bolger 2016-05-10T08:38:09+08:002016-05-10T08:38:09+08:00 在这里可能需要阅读一些关于 LDAP 和 DN 的信息。 专有名称(通常简称为 DN)既唯一地标识了一个条目,又描述了它在 DIT 中的位置。DN 很像文件系统上的绝对路径,除了文件系统路径通常从文件系统的根开始并从左到右下降树,LDAP DN 从左到右上升树。 因此,如果您想指定域中管理员帐户的 DN,则需要指定它的完整(和正确)路径。正如您的屏幕截图所示(以及它在 AD 中的标准事实),管理员帐户位于用户容器中。 请注意,我使用了容器这个词而不是 OU。并非 AD 中的每个容器都是 OU,并且实际上存在的大多数默认容器都不是。Users通过比较 图标和 图标,您可以一目了然Domain Controllers。如果这太微妙了,您还可以检查objectClass每个属性的实际属性。OU 将包含organizationalUnit,普通容器将包含container. 在 DN 值中,OU 的 RDN 键为“OU=”,容器的 RDN 键为“CN=”。 在任何情况下,当您每天都在寻找某个东西的 DN 时,您实际上不必手动解决所有这些问题。只需打开(或查询)您要查找的对象的属性并检查distinguishedName属性。这将为您提供完整且正确的路径,而无需尝试自己手动将一堆 RDN 和上下文串在一起。 TL;DR 您的示例域中管理员帐户的 DN 是CN=Administrator,CN=Users,DC=ldap,DC=patontheback,DC=org 也就是说,最好的做法是继续做你正在做的事情并使用 UPN (user@domain.example.com)来针对 AD 绑定帐户,因为它们比 DN 值更改的可能性更小。 nelaaro 2019-02-23T01:00:57+08:002019-02-23T01:00:57+08:00 @Ryan Bolger 的回答有一个很好的解释。我想为那些喜欢了解各种命令会发生什么的人提供一个更完整的示例。 例如,我将以下内容用于 binddndistinguishedName: 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: gitlab@nmm.lan -D 'auser@localdomain.lan' 以下行将在下面产生相同的输出 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 'auser@localdomain.lan' -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: auser@localdomain.lan 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
OP 提供了有关管理员用户位置的附加信息,因此他必须使用
cn=Administrator,ou=Users,dc=ldap,dc=pathontheback,dc=org
编辑:打错了,它必须是:
cn=Administrator,cn=Users,dc=ldap,dc=pathontheback,dc=org
用户是一个容器,而不是 OU。
在这里可能需要阅读一些关于 LDAP 和 DN 的信息。
因此,如果您想指定域中管理员帐户的 DN,则需要指定它的完整(和正确)路径。正如您的屏幕截图所示(以及它在 AD 中的标准事实),管理员帐户位于用户容器中。
请注意,我使用了容器这个词而不是 OU。并非 AD 中的每个容器都是 OU,并且实际上存在的大多数默认容器都不是。
Users
通过比较 图标和 图标,您可以一目了然Domain Controllers
。如果这太微妙了,您还可以检查objectClass
每个属性的实际属性。OU 将包含organizationalUnit
,普通容器将包含container
. 在 DN 值中,OU 的 RDN 键为“OU=”,容器的 RDN 键为“CN=”。在任何情况下,当您每天都在寻找某个东西的 DN 时,您实际上不必手动解决所有这些问题。只需打开(或查询)您要查找的对象的属性并检查
distinguishedName
属性。这将为您提供完整且正确的路径,而无需尝试自己手动将一堆 RDN 和上下文串在一起。TL;DR 您的示例域中管理员帐户的 DN 是
CN=Administrator,CN=Users,DC=ldap,DC=patontheback,DC=org
也就是说,最好的做法是继续做你正在做的事情并使用 UPN (user@domain.example.com)来针对 AD 绑定帐户,因为它们比 DN 值更改的可能性更小。
@Ryan Bolger 的回答有一个很好的解释。我想为那些喜欢了解各种命令会发生什么的人提供一个更完整的示例。
例如,我将以下内容用于 binddn
distinguishedName: CN=auser,OU=IT Dev,OU=localdomain Users,DC=localdomain,DC=lan
或 UPN
userPrincipalName: gitlab@nmm.lan
以下行将在下面产生相同的输出
或者
将生成相同的输出