Lucas Yamanishi wrote:
On 05/17/2012 09:34 AM, Rob Crittenden wrote:
...

The ACIs need a little bit of work. The name of the aci needs to
match the name of the ACI that permission is being granted to, with a
prefix of permission:. So it should look more like:

aci: (targetattr =  "attribute1 ||  attribute2 ||  attribute3")
(version 3.0; acl "permission:Read custom attributes"; deny (all)
(userdn = "ldap:///anyone"; and userdn != "ldap:///self"; and groupdn
!= "ldap:///cn=Read custom
attributes,cn=permissions,cn=pbac,dc=sesda2,dc=com");)

For the second ACI you don't need add and delete, those are
entry-level permissions. You might want to add compare though.

We also tend to separate things you can do to your own entry from
things you can do to others. So we would break this out into some
selfservice ACIs and permission ACIs. Not saying what you're doing
won't work.

rob

BTW, what's the origin of the naming restrictions?  Is it an IPA thing?

Yes, we are trying to hide the complexity of ACIs behind the permission concept. We take advantage of nested group membership and use that to delegate access. We create an ACI that grants permission to do something to a group (in this case a permission). This permission is then a member of a privilege which is a member of a role which itself has users, groups, etc as members. So being a member of a role grants access to all permissions associated with it.

An ACI is just a string of text so we need some mechanism to link an ACI with a permission object so we use this comment/name section. We added a prefix to distinguish between selfservice permissions and normal permissions (and perhaps future prefixes as well).


Here are my updated ACIs:

<pre>

dn: dc=sesda2,dc=com
changetype: modify
add: aci
aci: (targetattr =
   "privateAttribute1 ||
   privateAttribute2 ||
   privateAttribute3 ||
   privateAttribute4")
  (version 3.0; acl "permission:Read custom attributes"; deny (all)
   (userdn = "ldap:///anyone"; and
   groupdn != "ldap:///cn=Read custom
attributes,cn=permissions,cn=pbac,dc=sesda2,dc=com");)

dn: dc=sesda2,dc=com
changetype: modify
add: aci
aci: (targetattr =
   "privateAttribute1 ||
   privateAttribute2")
  (version 3.0; acl "permission:Does this need a special name?"; allow
(read, search, compare)
   userdn = "ldap:///self";;)

Use the prefix selfservice and name it something like: selfservice: Users can read their own private attributes

dn: dc=sesda2,dc=com
changetype: modify
add: aci
aci: (targetattr =
   "privateAttribute1 ||
   privateAttribute2 ||
   privateAttribute3 ||
   privateAttribute4")
  (version 3.0; acl "permission:Manage custom attributes"; allow
(read, write, search, compare)
   groupdn = "ldap:///cn=Manage custom
attributes,cn=permissions,cn=pbac,dc=sesda2,dc=com";)

Otherwise looks ok. ACIs often have subtle problems so I'd test casefully. Assuming these work ok you might try enhancing them to limit their scope to just users by adding (target = "ldap:///uid=*,cn=users,cn=accounts,dc=sesda2,dc=com";). This might speed up ACI processing ever so slightly, and ever ms counts.

rob

_______________________________________________
Freeipa-users mailing list
Freeipa-users@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-users

Reply via email to