Я хотел бы сделать адресную книгу в LDAP (для почтовых клиентов, на первом этапе для моего RoundCube). Сервер - Debian 7.9, slapd 2.4.31 (OpenLDAP). После успешной установки я создал поддерево для адресной книги:
dn: ou=rcabook,dc=mydomain,dc=com
ou: rcabook
objectClass: top
objectClass: organizationalUnit
dn: ou=public,ou=rcabook,dc=mydomain,dc=com
ou: public
objectClass: top
objectClass: organizationalUnit
dn: ou=private,ou=rcabook,dc=mydomain,dc=com
ou: private
objectClass: top
objectClass: organizationalUnit
и обычный пользователь RoundCube:
dn: cn=rcuser,ou=rcabook,dc=mydomain,dc=com
cn: rcuser
objectClass: organizationalRole
objectClass: simpleSecurityObject
userPassword:: e1f2g3....x3y2z1
Но когда я хочу сделать новую запись как rcuser, у меня возникает такая ошибка:
ldapadd -f entry.ldif -D cn=rcuser,ou=rcabook,dc=mydomain,dc=com -W
Enter LDAP Password:
adding new entry "cn=DOMAIN IT,ou=public,ou=rcabook,dc=mydomain,dc=com"
ldap_add: Insufficient access (50)
additional info: no write access to parent
Поддерево ou = public, ou = rcabook имеет специальный доступ в config:
# slapcat -n0
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=mydomain,dc=com
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
s auth by dn="cn=admin,dc=mydomain,dc=com" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=mydomain,dc=com" write by * read
olcAccess: {3}to dn.subtree="ou=public,ou=rcabook,dc=mydomain,dc=com" by users writ
e
olcLastMod: TRUE
...
Какие привилегии мне нужно добавить, чтобы все пользователи добавляли записи в поддерево?
Спасибо,
а.
Примечание: я не уверен, что иметь общедоступную адресную книгу с возможностью записи пользователем - хорошая идея.
olcAccess: {2}
и olcAccess: {3}
нужно переупорядочить. В to * by * read
из olcAccess: {2}
соответствует всему, что еще не сопоставлено, что означает olcAccess: {3}
никогда не оценивается.
To add or delete an entry, the subject must have write access to
the entry's entry attribute AND must have write access to the
entry's parent's children attribute.
Итак, вам нужно предоставить доступ к entry
и children
псевдоатрибуты:
olcAccess: {3}to dn.entry="ou=public,ou=rcabook,dc=mydomain,dc=com" by users write
olcAccess: {4}to dn.children="ou=public,ou=rcabook,dc=mydomain,dc=com" by users write