Назад | Перейти на главную страницу

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

У нас есть сервер OpenLDAP (2.4.45), который содержит всех наших пользователей, группы, правила sudo и т. Д.

Мне нужно подключить новое приложение к этому серверу, однако это приложение требует, чтобы анонимный пользователь мог читать атрибуты (он будет знать точное DN, для которого ему нужно читать атрибуты).

Теперь предполагая структуру как:

o=Example(dc=example,dc=com)
  ou=People
    uid=user1
    uid=user2
  ou=Groups
    cn=group1
    cn=group2

Мне нужно ограничить то, что анонимные пользователи могут получить все атрибуты пользователя, если они знают точный dn (например, dn = "uid = user1, ou = People, dc = example, dc = com") и полностью не могут обнаружить другие записи ( если они не знают точный dn).

Читая документацию OpenLDAP, я предположил, что следующий ACL должен работать:

olcAccess: {0}to dn.children="ou=Groups,dc=example,dc=com"
  by * read break
olcAccess: {1}to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by anonymous none stop
  by * read

Однако кажется break и stop не дают ожидаемых результатов, поскольку запросы напрямую к "cn = test, ou = Groups, dc = example, dc = com" приводят к No such object (32)

Как правильно достичь вышеуказанного?

На самом деле ответ был довольно простым (указал на это в IRC):

ACL должен быть таким:

olcAccess: {0}to dn.children="ou=Groups,dc=example,dc=com"
  by anonymous stop
  by * read break
olcAccess: {1}to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by anonymous none stop
  by * read

Обратите внимание stop строка в {0}, в исходном ACL сначала предоставляется доступ для чтения, но затем удаляется из-за breakв новой версии анонимный пользователь явно предоставил доступ для чтения, а затем OpenLDAP приказал прекратить обработку ACL для этого запроса.