Pentru a securiza operațiile către serverul de LDAP acesta folosește liste de control al accesului (ACL – Access Control Lists). Acestea oferă administratorului posibilitatea de a alege ce operații pot fi realizate de un utilizator.
În cadrul serverului OpenLDAP configurarea ACL-urilor se realizează în cadrul bazei de date olcDatabase={1}hdb,cn=config
. Pentru a observa ACL-urile configurate implicit folosim, pe stația server, comanda
root@ldap-server:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}hdb,cn=config" olcAccess SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={1}hdb,cn=config olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by * none olcAccess: {1}to attrs=loginShell,gecos by dn="cn=admin,dc=example,dc=com" write by self write by * read olcAccess: {2}to dn.base="" by * read olcAccess: {3}to * by self write by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by * read
Fiecare intrare este prefixată de un index care înseamnă ordinea în care sunt prelucrate: {0}
, {1}
, {2}
, {3}
. Cele patru reguli au următorul efect:
userPassword
, respectiv shadowLastChange
pot fiself
)loginShell
poate fi modificat de admin și de deținător și citit de oricine.Dorim să ascundem adresa de e-mail a oricărui utilizator și să facem să fie modificată chiar de acesta. Pentru aceasta va trebui să adăugăm o regulă de forma:
access to mail by self write by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by * none
Pentru aceasta vom crea un fișier LDIF care să conțină informațiile de mai jos:
dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcAccess olcAccess: {1}to attrs=mail by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by self write by * none
Apoi încărcăm fișierul de configurare LDIF în LDAP:
root@ldap-server:~# ldapadd -Y EXTERNAL -H ldapi:/// -f acl-mail-hidden.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={1}hdb,cn=config"
și validăm noua configurație:
root@ldap-server:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}hdb,cn=config" olcAccess SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={1}hdb,cn=config olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou s auth by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by * none olcAccess: {1}to attrs=mail by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by self write by * none olcAccess: {2}to attrs=loginShell,gecos by dn="cn=admin,dc=example,dc=com" wri te by self write by * read olcAccess: {3}to dn.base="" by * read olcAccess: {4}to * by self write by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" w rite by * read
Am inserat astfel o nouă regulă pe poziția {1}
, celelalte reguli deplasându-se o poziție în jos.
De pe stația client validăm regula: interogăm intrarea aferentă uid=zeratul
făcând bind cu uid=raynor
și cu uid=zeratul
.
zeratul
trebuie setata folosind ldappasswd
.
Revedeti Laboratorul 1: http://ocw.cs.pub.ro/courses/saisp/labs/01/contents/06
root@ldap-client:~# ldapsearch -x -LLL -D uid=raynor,ou=Raiders,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro -w student uid=zeratul mail dn: uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro root@ldap-client:~# ldapsearch -x -LLL -D uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro -w student uid=zeratul mail dn: uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro mail: zeratul@void.protoss.mil
Observăm că dacă facem bind cu uid=raynor
nu avem acces la adresa de e-mail a uid=zeratul
, dar avem la bind cu uid=zeratul
; o intrare are acces la propria adresă de e-mail.