Openldap - o usuário ldap não pode adicionar entrada: Acesso insuficiente (sem acesso de gravação ao pai)

2

Eu gostaria de fazer um livro de endereços no LDAP (para clientes de mailing, no primeiro passo do meu RoundCube). Servidor é Debian 7.9, slapd 2.4.31 (OpenLDAP). Após a instalação bem-sucedida, criei uma subárvore para o catálogo de endereços:

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

e um usuário comum para o RoundCube:

dn: cn=rcuser,ou=rcabook,dc=mydomain,dc=com
cn: rcuser
objectClass: organizationalRole
objectClass: simpleSecurityObject
userPassword:: e1f2g3....x3y2z1

Mas quando quero criar uma nova entrada como rcuser, recebo este erro:

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

A subárvore ou = pública, ou = rcabook tem um acesso especial em 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
...

Quais privilégios eu preciso adicionar, pois todo usuário adicionaria as entradas à subárvore?

Obrigado,

a.

    
por airween 17.10.2015 / 12:07

2 respostas

0

De documentação do OpenLDAP ACL :

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.

Você precisa conceder acesso aos atributos pseudo entry e 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
    
por 29.10.2015 / 12:09
0

Nota: não estou convencido de que ter uma agenda de endereços pública gravável pelo usuário seja uma boa ideia.

olcAccess: {2} e olcAccess: {3} precisam ser reordenados. O to * by * read de olcAccess: {2} corresponde a tudo que ainda não foi correspondido, o que significa que olcAccess: {3} nunca é avaliado.

    
por 08.04.2018 / 18:55