Форум проекта Pro-LDAP.ru
Администрирование OpenLDAP => Конфигурация через cn=config => Тема начата: Денис от 03 Июль 2023, 11:36:46
-
Всем привет
Попробовал настроить проксирование из LDAP в AD - добавил модуль back_ldap, добавил базу ldap, настроил аутентификацию в AD
но при попытке посмотреть что-нибудь из AD - возникает ошибка
ldapsearch -H ldap://someldap.blahblah.com/ -x -D "cn=openldap,dc=corp,dc=blahblah,dc=com" -W -b "dc=corp,dc=blahblah,dc=com" "(objectClass=*)" -V
# extended LDIF
#
# LDAPv3
# base <dc=corp,dc=blahblah,dc=com> with scope subtree
# filter: (objectClass=*)
# requesting: ALL
#
# search result
search: 2
result: 80 Other (e.g., implementation specific) error
LDIF и логи в прицепе
помогите плиз, я с LDAP только начал разбираться....
-
Здравствуйте! Я не уверен, что AD поодерживает SASL-аутентификцию DIGEST-MD5. SIMPLE-аутентификацию он точно поддерживает, попробуйте изменить olcDbIDAssertBind:
olcDbIDAssertBind: bindmethod="simple" binddn="cn=denis.sutyagin,dc=corp,dc=blahblah,dc=com" mode="none" credentials="somecomplexpassword"
Осторожно: при SIMPLE-аутентификации пароль по сети будет передаваться в открытом виде, возможен его перехват.
AD также поддерживает KERBEROS-аутентификацию, она безопасная. Но у меня под рукой нет AD, чтобы протестировать вариант настройки с принципалом KERBEROS. К тому же самому раньше настраивать KERBEROS-аутентификацию для OpenLDAP не приходилось, готового примера у меня нет.
Егор
-
Спасибо, Егор,
в нашем AD - sasl digest-md5, simple аутентификацией туда не получается попасть
когда делаю ldapsearch -x непосредственно в AD - аутентификация не проходит, а если пишу mech=DIGEST-MD5 - все ок
-
Если так, то, как минимум, в credentials в olcDbIDAssertBind нужно указывать что-то, что ожидает механизм digest-md5. Подозреваю, что это не пароль в открытом виде, скорее всего какой-нибудь хэш.
Покажите полностью строку запроса ldapsearch к AD, которая у Вас успешно выполняется.
Егор
-
я вроде там такое вставил.. или неправильно?
olcDbIDAssertBind: bindmethod="sasl" binddn="cn=denis.sutyagin,dc=corp,dc=blahblah,dc=com" mode="self" saslmech="DIGEST-MD5" credentials="somecomplexpassword"
saslmech=DIGEST-MD5
ааа, хеш! его делать saslpasswd -s ?
-
я вроде там такое вставил.. или неправильно?
olcDbIDAssertBind: bindmethod="sasl" binddn="cn=denis.sutyagin,dc=corp,dc=blahblah,dc=com" mode="self" saslmech="DIGEST-MD5" credentials="somecomplexpassword"
saslmech=DIGEST-MD5
В поле credentials у Вас пароль в открытом виде. Думаю, так его back_ldap в AD и передаёт. Для механизма DIGEST-MD5 нужен, скорее всего, хэш пароля.
Покажите полностью строку запроса ldapsearch к AD, которая у Вас успешно выполняется.
Егор
-
ааа, хеш! его делать saslpasswd -s ?
Вероятно. Что получается на выходе команды?
-
ldappasswd - ему нужен валидный пользователь
собрал хеш по схеме
hash='{MD5}' + base64(md5(username+realm+password))
получилось такое
{MD5}HMqjnyedjgJLkUuv4kq7GQ==
попробовал
ldapmodify -Y EXTERNAL -H ldapi:/// -f ./modify-olcDBIDAssert.ldif -V
dn: olcDatabase={2}ldap,cn=admin,cn=config
changetype: modify
delete: olcDbIDAssertBind
-
add: olcDbIDAssertBind
olcDbIDAssertBind: bindmethod="sasl" binddn="cn=denis.sutyagin,dc=corp,dc=blahblah,dc=com" mode="self" saslmech="DIGEST-MD5" credentials="{MD5}HMqjnyedjgJLkUuv4kq7GQ=="
изменить не получается - говорит
No such object (32)
matched DN: cn=config
возможно тут надо ACL настраивать? я до этого не добрался еще
PS:
с этим все получилось - после того как переинициализировал OpnLDAP
но результат - тот же - не видит AD
-
В поле credentials у Вас пароль в открытом виде. Думаю, так его back_ldap в AD и передаёт. Для механизма DIGEST-MD5 нужен, скорее всего, хэш пароля.
Покажите полностью строку запроса ldapsearch к AD, которая у Вас успешно выполняется.
вот работающий запрос к AD
ldapsearch -H ldap://dc01.corp.blahblah.com/ -Y DIGEST-MD5 -U "denis.sutyagin" -b "dc=corp,dc=blahblah,dc=com" "(objectClass=*)"
вот результат
# extended LDIF
#
# LDAPv3
# base <dc=corp,dc=blahblah,dc=com> with scope subtree
# filter: (objectClass=*)
# requesting: ALL
#
# corp.blahblah.com
dn: DC=corp,DC=blahblah,DC=com
objectClass: top
objectClass: domain
objectClass: domainDNS
distinguishedName: DC=corp,DC=blahblah,DC=com
instanceType: 5
whenCreated: 20151216133710.0Z
whenChanged: 20230514124954.0Z
subRefs: DC=ForestDnsZones,DC=corp,DC=blahblah,DC=com
-
ldapsearch -H ldap://dc01.corp.blahblah.com/ -Y DIGEST-MD5 -U "denis.sutyagin" -b "dc=corp,dc=blahblah,dc=com" "(objectClass=*)"
Вы какие-нибудь аутентификационные данные вводите, или "оно само" откуда-то берёт? Из какой-нибудь базы sasl привязывает идентификатор пользователя с аутентификационными данными? Если да, можно попробовать извлечь хэш из этой базы.
Что касается back_ldap, я бы попробовал так:
olcDbIDAssertBind: bindmethod="sasl" authcId="denis.sutyagin" mode="self" saslmech="DIGEST-MD5" credentials="{MD5}HMqjnyedjgJLkUuv1kqAGQ=="
Но, опять же, построение хэша я не могу прокомментировать, просто не знаю, как его правильно собрать.
Егор
-
Вы какие-нибудь аутентификационные данные вводите, или "оно само" откуда-то берёт? Из какой-нибудь базы sasl привязывает идентификатор пользователя с аутентификационными данными? Если да, можно попробовать извлечь хэш из этой базы.
Ввожу руками пароль, из базы sasl не привязывал
Могу попробовать отловить хеш через tcpdump
-
olcDbIDAssertBind: bindmethod="sasl" authcId="denis.sutyagin" mode="self" saslmech="DIGEST-MD5" credentials="{MD5}HMqjnyedjgJLkUuv4kq7GQ=="
А вот так - заработало - только с паролем в открытом виде
Огромное спасибо, Егор!