Я пытаюсь написать контроль доступа для 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 важен для второго правила, поскольку для выполнения поиска требуется доступ к этому атрибуту, чтобы иметь возможность сопоставить запись.