A ordem das linhas ACL é importante.
olcaccess: {0}to dn.subtree="ou=subtree,dc=domain,dc=tld"
by self write
by dn="cn=subadmin,dc=domain,dc=tld" write
by users read
by anonymous none
olcaccess: {1}to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=mpbteam,dc=de" write
by * none
olcaccess: {2}to dn.base=""
by * read
olcaccess: {3}to *
by self write
by dn="cn=admin,dc=domain,dc=tld" write
by * read
Você pode se livrar de {2} porque ele é coberto por {3} e você deve trocar {1} e {0}. Isso ocorre porque os atributos fazem parte da subárvore e você informou ao LDAP que a subárvore só pode ser lida pelos usuários. Experimente:
olcaccess: {0}to attrs=userPassword,shadowLastChange
by self write
by users write
by anonymous auth
by dn="cn=admin,dc=mpbteam,dc=de" write
olcaccess: {1}to dn.subtree="ou=subtree,dc=domain,dc=tld"
by self write
by dn="cn=subadmin,dc=domain,dc=tld" write
by users read
by anonymous none
olcaccess: {2}to *
by self write
by dn="cn=admin,dc=domain,dc=tld" write
by * read
Você também não precisa do by * none, é implícito.
Claro, eu não tentei isso, já que estou com problemas para editar minha configuração no momento ... você pode dar uma olhada:
LDAP script de construção falhando em openLDAP-2.4.31 (ldapmodify -Y EXTERNAL -H ldapi: ///)
para mim?