This shows you the differences between two versions of the page.
saisp:labs:02:contents:09 [2014/03/01 22:23] razvan.deaconescu created |
saisp:labs:02:contents:09 [2014/03/03 17:02] (current) alexandru.carp |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 09. [BONUS - 10p] Configurare suplimentară de ACL în LDAP ==== | + | ==== 09. [BONUS - 10p] Configurare suplimentară de ACL în serverul de LDAP ==== |
- | TODO | + | Actualizați ACL-urile din serverul de LDAP cu următoarele reguli: |
+ | - Intrarea cu ''uid=zeratul'' să poată vizualiza adresele de mail ale tuturor utilizatorilor, iar intrarea cu ''uid=amengsk'' să le poată și modifica. | ||
+ | - Doar utilizatorii autentificați (bind) să poată vizualiza orice intrare din baza de date LDAP. | ||
+ | |||
+ | <note tip> | ||
+ | Informații complete despre ACL-uri în OpenLDAP găsiți aici: http://www.openldap.org/doc/admin24/access-control.html | ||
+ | </note> | ||
+ | |||
+ | <solution -hidden> | ||
+ | Pentru prima regulă trebuie să schimbăm regula cu indexul ''{1}'' folosind un fișier de forma<file none acl-mail-hidden-update.ldif> | ||
+ | dn: olcDatabase={1}hdb,cn=config | ||
+ | changetype: modify | ||
+ | delete: olcAccess | ||
+ | olcAccess: {1} | ||
+ | - | ||
+ | add: olcAccess | ||
+ | olcAccess: {1}to attrs=mail by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by self write by dn="uid=amengsk,ou=Dominion,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro" write by dn="uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro" read by * none | ||
+ | </file> | ||
+ | |||
+ | Încărcăm fișierul în baza de date și verificăm actualizarea ACL-urilor:<code bash> | ||
+ | root@ldap-server:~# ldapadd -Y EXTERNAL -H ldapi:/// -f acl-mail-hidden-update.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" | ||
+ | |||
+ | 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 dn="uid=amengsk,ou=Dominion,o=Terran,dc=labs,dc=cs,dc=pub,dc | ||
+ | =ro" write by dn="uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | " read 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> | ||
+ | |||
+ | Apoi verificăm de pe stația client vizibilitatea adreselor de e-mail. ''uid=raynor'' va vedea doar adresa proprie:<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=*' mail | ||
+ | dn: uid=artanis,ou=Khalai,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: uid=amengsk,ou=Dominion,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: uid=horner,ou=Raiders,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: uid=raynor,ou=Raiders,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | mail: raynor@hyperion.terran.mil | ||
+ | |||
+ | dn: uid=vmengsk,ou=Dominion,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | </code> pe când ''uid=zeratul'' le va putea vedea pe toate:<code bash> | ||
+ | root@ldap-client:~# ldapsearch -x -LLL -D uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro -w student 'uid=*' mail | ||
+ | dn: uid=artanis,ou=Khalai,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | mail: artanis@khala.protoss.mil | ||
+ | |||
+ | dn: uid=zeratul,ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | mail: zeratul@void.protoss.mil | ||
+ | |||
+ | dn: uid=amengsk,ou=Dominion,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | mail: mengsk@dominion.terran.mil | ||
+ | [...] | ||
+ | </code> în vreme ce ''uid=amgensk'' va putea și modifica adresele de e-mail. | ||
+ | |||
+ | Pentru a permite doar utilizatorilor autentificați acces la informații, va trebui să schimbăm regulile cu indexul ''{3}'' și ''{4}'' astfel:<file none acl-need-bind.ldif> | ||
+ | dn: olcDatabase={1}hdb,cn=config | ||
+ | changetype: modify | ||
+ | delete: olcAccess | ||
+ | olcAccess: {3} | ||
+ | - | ||
+ | add: olcAccess | ||
+ | olcAccess: {3}to dn.base="" by users read by * none | ||
+ | - | ||
+ | delete: olcAccess | ||
+ | olcAccess: {4} | ||
+ | - | ||
+ | add: olcAccess | ||
+ | olcAccess: {4}to * by self write by dn="cn=admin,dc=labs,dc=cs,dc=pub,dc=ro" write by users read by * none | ||
+ | </file> | ||
+ | |||
+ | La fel vom încărca fișierul și vom valida noile ACL-uri. | ||
+ | |||
+ | Pentru verificare folosim o comandă ''ldapsearch'' cu bind anonim și una cu bind ''uid=raynor'':<code bash> | ||
+ | root@ldap-client:~# ldapsearch -x -LLL dn | ||
+ | No such object (32) | ||
+ | |||
+ | root@ldap-client:~# ldapsearch -x -LLL -D uid=raynor,ou=Raiders,o=Terran,dc=labs,dc=cs,dc=pub,dc=ro -w student dn | ||
+ | dn: dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: cn=admin,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: ou=Khalai,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: ou=Nerazim,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | |||
+ | dn: uid=artanis,ou=Khalai,o=Protoss,dc=labs,dc=cs,dc=pub,dc=ro | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | În cazul unui bind anonim nu mai avem acces la informație. Dar avem acces cu orice cont autentificat. | ||
+ | </solution> |