This shows you the differences between two versions of the page.
saisp:labs:02:contents:08 [2014/03/01 22:23] razvan.deaconescu [Configurare ACL în LDAP] |
saisp:labs:02:contents:08 [2014/03/03 14:06] (current) alexandru.carp |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 08. Configurare ACL în LDAP ==== | + | ==== 08. [10p] Configurare ACL în serverul de LDAP ==== |
- | TODO | + | 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<code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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: | ||
+ | - 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 | ||
+ | - Atributul ''loginShell'' poate fi modificat de admin și de deținător și citit de oricine. | ||
+ | - Oricine poate citi intrările din întreaga bază de date LDAP. | ||
+ | - 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:<code> | ||
+ | access to mail | ||
+ | by self write | ||
+ | by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write | ||
+ | by * none | ||
+ | </code> | ||
+ | |||
+ | Pentru aceasta vom crea un fișier LDIF care să conțină informațiile de mai jos:<file none 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 | ||
+ | </file> | ||
+ | |||
+ | Apoi încărcăm fișierul de configurare LDIF în LDAP:<code bash> | ||
+ | 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" | ||
+ | </code> și validăm noua configurație:<code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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''. | ||
+ | |||
+ | <note important> | ||
+ | Parola utilizatorului ''zeratul'' trebuie setata folosind ''ldappasswd''. | ||
+ | |||
+ | Revedeti Laboratorul 1: http://ocw.cs.pub.ro/courses/saisp/labs/01/contents/06 | ||
+ | </note> | ||
+ | |||
+ | <code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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. |