我在 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