Я установил Simple AD на AWS, и наконец смог пройти аутентификацию с помощью 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 и DN здесь может быть в порядке.
Отличительное имя (обычно просто сокращенное до DN) как однозначно идентифицирует запись, так и описывает ее позицию в DIT. DN очень похож на абсолютный путь в файловой системе, за исключением того, что пути файловой системы обычно начинаются с корня файловой системы и спускаются по дереву слева направо, а DN LDAP восходят по дереву слева направо.
Поэтому, если вы хотите указать DN учетной записи администратора в своем домене, вам необходимо указать полный (и правильный) путь к нему. Как показывает ваш снимок экрана (и тот факт, что он стандартен в AD), учетная запись администратора находится в контейнере Users.
Обратите внимание, что я использовал слово контейнер а не OU. Не каждый контейнер в AD является OU, а большинство существующих по умолчанию - нет. Вы можете сразу сказать, сравнив значок для Users
со значком для Domain Controllers
. Если это слишком сложно, вы также можете проверить фактическое objectClass
атрибут для каждого. OU будет содержать organizationalUnit
и нормальные контейнеры будут иметь container
. В значении DN OU имеют «OU =» в качестве ключа RDN, а контейнеры имеют «CN =» в качестве ключа RDN.
В любом случае вам действительно не нужно разбираться во всем этом вручную, когда вы ежедневно ищете что-то DN. Просто откройте (или запросите) свойства объекта, который вы ищете, и проверьте distinguishedName
атрибут. Это даст вам полный и правильный путь, не пытаясь вручную связать кучу RDN и контекстов самостоятельно.
TL; DR DN учетной записи администратора в вашем примере домена: CN=Administrator,CN=Users,DC=ldap,DC=patontheback,DC=org
Тем не менее, лучше продолжать делать то, что вы делаете, и использовать UPN. (user@domain.example.com) для привязки учетных записей к AD, потому что они менее вероятно изменятся, чем значение DN.
OP предоставил дополнительную информацию о местонахождении пользователя-администратора, поэтому он должен использовать cn=Administrator,ou=Users,dc=ldap,dc=pathontheback,dc=org
РЕДАКТИРОВАТЬ: Сделана опечатка, это должно быть: cn=Administrator,cn=Users,dc=ldap,dc=pathontheback,dc=org
Пользователи - это контейнер, а не OU.
@ Райан Болджер ответ есть очень хорошее объяснение. Я хотел бы включить более полный пример для тех, кто любит видеть, что происходит с различными командами.
Например, я использую для 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'
или UPN userPrincipalName: 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