1

У меня возникают некоторые проблемы с безопасностью OpenLDAP и Spring, когда последний выполняет поиск по всему пути в dn (фильтр) и пустой базе. OpenLDAP не нравится, и запрос не выполняется. Проблема в том, что я не могу контролировать запрос, поэтому мне интересно, можно ли настроить OpenLDAP, чтобы разрешить такие запросы.

Некоторые подробности о том, как это работает:

Spring сначала выполняет поиск пользователя, например:

base:ou=something,ou=something,dc=oh,dc=my,dc=god
filter:cn=someUsername

Затем он возвращает результат, в который помещается весь dn, а base - пустая строка, например:

base:
filter:cn=someUsername,ou=something,ou=something,dc=oh,dc=my,dc=god

Затем он использует этот результат для нового поиска по LDAP, который затем завершается ошибкой.

1 ответ1

1

OpenLDAP должен знать базовый DN, чтобы он мог выбирать, из какой базы данных читать. Я не смог найти поддержки для "глобального" поиска по всем базам данных.

Однако вы можете добавить новую базу данных с пустым базовым DN. С relay он может пересылать все запросы в вашу основную базу данных. Смотрите slapd-relay(5) для более сложных примеров (включая даже переписывание), но общее использование:

database  relay
suffix    ""
relay     "dc=nullroute,dc=eu,dc=org"
dn: olcDatabase=relay,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcSuffix:
olcRelay: dc=nullroute,dc=eu,dc=org

(Кроме того, мне интересно, действительно ли Spring использует пустую базу для всех поисков? Некоторые программы получают Root DSE таким образом (расположенный в базе "", область действия "база"), чтобы автоматически обнаруживать реальные базовые DN и / или возможности сервера.)


После обновления кажется, что настоящая проблема заключается в том, что Spring использует плохой фильтр. Не имеет смысла просто отправлять DN как фильтр, потому что на самом деле вы в конечном итоге будете искать cn который содержит someUsername,ou=something,dc=something .

Вместо этого Spring должен был использовать DN в качестве базы:

base: cn=someUsername,ou=something,ou=something,dc=oh,dc=my,dc=god
scope: base
filter: (objectClass=*)

Если когда-нибудь возникнет необходимость отфильтровать по DN, я думаю, что рабочий способ будет (entryDN=dn) , например (entryDN=cn=foo,ou=bar,ou=baz) , хотя это зависит от сервера (entryDN - OpenLDAP- конкретный, пока AD имеет отличительное имя и т. д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .