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

Проблема ACL LDAP (slapd) - можно добавлять, но не изменять записи

У меня проблема с конфигурацией ACL сервера LDAP (slapd). Следующая запись ACL является первым применимым правилом:

{0}to dn.subtree="ou=some,ou=where,ou=beneath,dc=the,dc=rain,dc=bow"  attrs=entry,children by users write

Теперь происходит странная вещь: с учетом этого правила я могу добавить запись к соответствующему DN, но если я хочу изменить ее с тем же пользователем, я получаю

0x32 (LDAP_INSUFFICIENT_ACCESS)

Может кто-нибудь подскажет, в чем может быть проблема?

Если вы хотите разрешить изменение всей записи, вам необходимо удалить attrs= вариант полностью.
Я думаю, вы не понимаете, что за attrs=entry делает. Это не позволяет вам изменять всю запись. В entry атрибут предоставляет разрешение только на саму запись (не его атрибуты), что в основном позволяет только удалить его. В children атрибут - это то, что позволяет вам создавать новых дочерних элементов под этой записью. Но как только ребенок будет создан, вы не сможете его изменить, потому что он попадает под dn.subtree match, и ваш ACL запрещает модификацию чего-либо, кроме удаления записи и создания дочерних элементов.

Из http://www.openldap.org/doc/admin24/access-control.html:

Есть два специальных псевдоатрибутов: entry и children. Чтобы прочитать (и, следовательно, вернуть) целевую запись, субъект должен иметь доступ на чтение к атрибуту целевой записи. Для выполнения поиска субъект должен иметь доступ для поиска к атрибуту записи базы поиска. Чтобы добавить или удалить запись, субъект должен иметь доступ на запись к атрибуту записи И должен иметь доступ на запись к родительскому атрибуту записи. Чтобы переименовать запись, субъект должен иметь доступ на запись к атрибуту записи И иметь доступ на запись к дочерним атрибутам старого и нового родителя. Полные примеры в конце этого раздела должны помочь прояснить ситуацию.

Как уже упоминалось, решение состоит в том, чтобы удалить attrs вариант. Это делает ACL по умолчанию для всего, поэтому при указании write, он позволяет писать во все, что есть в этой записи.