08. [10p] Configurare ACL în serverul de LDAP

Pentru a securiza operațiile către serverul de LDAP acesta folosește liste de control al accesului (ACLAccess 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:

  1. Atributele userPassword, respectiv shadowLastChange pot fi
    • scrise de deținător (self)
    • folosite pentru autentificare de anonim
    • scrise de admin
    • fără drepturi pentru ceilați
  2. Atributul loginShell poate fi modificat de admin și de deținător și citit de oricine.
  3. Oricine poate citi intrările din întreaga bază de date LDAP.
  4. Celelalte atribute pot fi modificate de deținător și de admin și pot fi citite 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:

acl-mail-hidden.ldif
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.

Parola utilizatorului 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.

saisp/labs/02/contents/08.txt · Last modified: 2014/03/03 14:06 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0