Problema ldap acl
Introducció
LDAP té una complexa política de control d'accés al directori. Una ACL té la següent sintaxi:
olcAccess: {n} to <what> by <who> <access> <control>
- {n} és el número d'ordre
- <what> es al què s'accedeix, un dn en concret o *, per exemple
- <who> evidentment és qui hi pot accedir
- <access> és el tipus d'accés read / write, etc
- <control> pot ser stop / continue / break
Hi pot haver varis "by <who> <access>" a la mateixa ACL (vegeu exemples) i per defecte el <control> és stop, vol dir que quan troba una condició de <what> que es satisfà, s'atura i es deixa de recórrer la llista de ACL.
Valors per defecte de les ACL de LDAP
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by self write by dn="cn=admin,dc=example,dc=com" write by * read
Què volem aconseguir?
Que diferents administradors tenguin accés només a cada sub-arbre corresponent, i no donar accés a altres usuaris a les contrasenyes.
Aproximació 1
olcAccess: {0}to dn.subtree="ou=gorgblau,dc=nigul,dc=coop" by self write by dn="cn=gorgblau,dc=nigul,dc=coop" write by * read olcAccess: {1}to dn.subtree="ou=matadejonc,dc=nigul,dc=coop" by self write by dn="cn=matadejonc,dc=nigul,dc=coop" write by * read olcAccess: {2}to dn.subtree="ou=lledoner,dc=nigul,dc=coop" by self write by dn="cn=lledoner,dc=nigul,dc=coop" write by * read olcAccess: {3}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=nigul,dc=coop" write by * none olcAccess: {4}to dn.base="" by * read olcAccess: {5}to * by self write by dn="cn=admin,dc=nigul,dc=coop" write by * read
El problema d'aquesta és que cada condició 0, 1, 2, degut al "by * read" donam accés a les contrasenyes a tothom
Aproximació 2
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=nigul,dc=coop" write by * none olcAccess: {1}to dn.subtree="ou=gorgblau,dc=nigul,dc=coop" by self write by dn="cn=gorgblau,dc=nigul,dc=coop" write by * read olcAccess: {2}to dn.subtree="ou=matadejonc,dc=nigul,dc=coop" by self write by dn="cn=matadejonc,dc=nigul,dc=coop" write by * read olcAccess: {3}to dn.subtree="ou=lledoner,dc=nigul,dc=coop" by self write by dn="cn=lledoner,dc=nigul,dc=coop" write by * read olcAccess: {4}to dn.base="" by * read olcAccess: {5}to * by self write by dn="cn=admin,dc=nigul,dc=coop" write by * read
El problema d'aquesta és que cada administrador del sub-arbre no té accés a les seves contrasenyes