У меня есть установка OpenLDAP v2.3 который я использую последние несколько лет. Ниже приведены строки в slapd.conf
для контроля доступа.
access to dn.one="o=abc, c=IN"
by * read
access to dn.base="o=abc, c=IN"
by * none
Когда я использую ldapsearch, используя анонимную привязку, я получаю результат.
Например, следующая команда дает результат.
ldapsearch -x -h localhost -b "o=abc,c=IN"
Теперь я обновил ОС CentOS с 5.5 до 6.3, поэтому версия OpenLDAP OpenLDAP v2.4. Мы не меняли схему.
Но теперь то же самое ldapsearch
дает мне result: 32 No such object
ошибка.
Но это работает, когда я добавил следующую строку в конфигурацию управления доступом.
access to dn.one="o=abc, c=IN"
by * read
access to dn.base="o=abc, c=IN"
by anonymous read
by * none
В чем может быть причина? Есть ли при этом риск для безопасности?
Я разместил вопрос в списке рассылки OpenLDAP и получил ответ. Спасибо Пьеранджело Масарати.
В OpenLDAP v2.4 для операции поиска требуются привилегии «поиска» по псевдоатрибуту «entry» базы поиска, чего не было в v2.3.
man slapd.access (5):
[...]
Операция поиска требует привилегий search (= s) для псевдоатрибута записи searchBase (ПРИМЕЧАНИЕ: это было введено в OpenLDAP 2.4).
[...]
Так что мне не нужно давать анонимному доступ на чтение для базы. Достаточно только привилегии поиска, как указано ниже.
access to dn.base="o=abc, c=IN"
by anonymous search
by * none
Я успешно его протестировал.