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

openldap поиск acl

Я пытаюсь написать контроль доступа для OpenLDAP, чтобы позволить пользователю выполнять поиск с определенным базовым DNS, но получать результаты только от определенных sub dn. Я играл с множеством разных правил, но не могу заставить их работать. Я не уверен, что это вообще возможно.

Например:
У меня есть пользователь с дн uid=testuser,ou=people,dc=example,dc=com. Я хочу, чтобы этот пользователь мог выполнять поиск по базе dc=example,dc=com и вернуть записи в ou=people,dc=example,dc=com. Есть много других вспомогательных подразделений под dc=example,dc=com, но только записи в ou=people должны быть возвращены (для бонуса я бы хотел, чтобы также возвращались только определенные атрибуты).

Это можно сделать?

Наконец разобрался в этом. Для этого есть много разных частей.

Сначала 2 правила ACL:

Access to dn.base="dc=example,dc=com" by \
  dn.base="uid=testuser,ou=people,dc=example,dc=com" \
  search

Access to dn.one="ou=people,dc=example,dc=com" \
  attrs=entry,uid,cn,sn,gecos,mail,uidNumber,gidNumber by \
  dn.base="uid=testuser,ou=people,dc=example,dc=com" \
  read
  • Порядок правил не имеет значения, потому что мы используем dn.base о «доступе к» для первого правила. Если бы это были dn.children, порядок имел бы значение.
  • Первое правило дает uid=testuser поиск доступа к dc=example,dc=com, но не более того. Без второго правила все, что вернулось бы, было то, совпало ли поисковое что-либо или нет, а не то, что было найдено.
  • Второе правило дает uid=testuser доступ для чтения к ou=people а дети на один уровень глубже (dn.one). Возможность поиска включена в разрешение на чтение.
  • В entry attr важен для второго правила, поскольку для выполнения поиска требуется доступ к этому атрибуту, чтобы иметь возможность сопоставить запись.
  • Как только запись будет найдена, поиск вернется со всеми другими разрешенными атрибутами.