У меня проблема с конфигурацией 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
, он позволяет писать во все, что есть в этой записи.