Сейчас настраиваю сервер openldap. Для определения прав пользователей я использую файл ldif. Чтобы проверить разрешения и убедиться, что все работает должным образом, я использую Apache Directory Studio.
Одно из требований к разрешениям пользователя заключается в том, что пользователь может читать свою собственную запись, локальный администратор может читать все записи пользователей в своей ветке, а «глобальный» администратор может читать все записи пользователей. Пока все хорошо, все работает.
Дополнительно мне нужно знать, к каким группам принадлежит пользователь. Для этого я хотел использовать операционный атрибут memberOf
который поддерживается openldap. К сожалению, только «глобальный» администратор может видеть рабочие атрибуты. Если я попытаюсь получить операционные атрибуты в Apache Directory Studio с помощью локального администратора или простого пользователя, рабочий атрибут не будет отображаться / извлекаться.
Я попытался предоставить этим пользователям разрешение на чтение для всех атрибутов-членов, в которые вводится их dn, с помощью следующего правила:
olcAccess: to attrs=member,entry
by dnattr=member selfwrite
by * break
Это правило похоже на правило в конце Документация openldap, глава 8.3.5. Кажется, это вообще не работает, поэтому я попытался добавить общее правило для доступа к записям ролей:
olcAccess: to dn.regex="ou=Roles,dc=([^,]+),dc=customers,dc=domain,dc=de$" attrs=entry,@groupOfNames,children
by group.expand="cn=Administrators,ou=Roles,dc=$1,dc=customers,dc=domain,dc=de" write
by group.expand="cn=ProductionUser,ou=Roles,dc=$1,dc=customers,dc=domain,dc=de" read
by group.expand="cn=TestUser,ou=Roles,dc=$1,dc=customers,dc=domain,dc=de" read
by * break
С помощью этого правила любой пользователь может читать все записи ролей для своей ветви. Операционные атрибуты или, по крайней мере, memberOf
по-прежнему не будет виден пользователям.
Итак, какие разрешения мне нужно предоставить, чтобы каждый пользователь мог читать хотя бы memberOf
-атрибут для собственной записи?
Похоже, моя попытка была сложной. С общим правилом доступа ко всему для self
вроде все работает как хотелось:
olcAccess: to *
by self read
С помощью этого правила каждый пользователь может читать все, что относится к собственной записи (а не только к самой собственной записи), включая операционные атрибуты.