Permissions#
__NOTOC__
Introduction#
This represents a large re-design of the Access Control system.
acis, taskgroups and rolegroups are being replaced by permissions, privileges and roles.
Roughly:
acis and taskgroups are combined into permissions.
rolegroups are renamed to privileges.
a new group type is created, roles. A role may not be nested.
The way we are using 389-ds ACIs is relatively unchanged. We create an ACI that grants permission to a group (in this case a permission). A permission is a member of a privilege and a privilege is a member of a role.
Permissions#
The permissions object is a simple group, no nesting. It is the target of an aci. The permissions plugin will make calls to the existing, internal only aci plugin to create acis targeting a given permission. The linkage between the two is the description of the group and the name of the aci. By implication there is one aci allowed per permission.
A permission is a groupofnames.
Commands:
permission-add
permission-del
permission-find
permission-mod
permission-show
Privileges#
A privilege is a way to logically combine permissions. There are some tasks, such as as adding a user, that require multiple permissions to perform.
A privilege is a nestedgroup (needs memberOf). We don’t provide facilities to make a privilege a member of another privilege.
Commands:
privilege-add
privilege-del
privilege-find
privilege-mod
privilege-show
privilege-add-permission
privilege-remove-permission
Role#
A role is a group of privileges. Users, groups, etc. will be assigned as members of a role and inherit privileges and permissions via memberOf.
A role is a nestedgroup. We don’t provide facilities to make a role a member of another role.
Commands:
role-add
role-del
role-find
role-mod
role-show
role-add-member
role-remove-member
role-add-privilege
role-remove-privilege
Allowed member types are: users, groups, hosts and hostgroups.
Differences to old system#
One of the more obvious differences to the old system is in the user interface. The membership will be made to be more logical, so rather than adding a rolegroup to a taskgroup you add a permission to a privilege and a privilege to a role.
Two additional plugins will be required to provide some other capabilities of the aci plugin:
selfserve will manage self-service plugins for various objects (most likely just users and hosts)
delegation will manage v1-style group to group delegation (group A can write these attributes of the users in group B).
APPENDIX#
Here is a breakdown of what the various objects look like.
permission entry#
A permission entry and an aci pointing at that permission. The
permission links back to the ACI though the permission description. The
ACI is stored in dc=example,dc=com
.
dn: cn=addusers,cn=permissions,cn=accounts,dc=example,dc=com
objectClass: top
objectClass: groupofnames
cn: addusers
description: Add Users
member: cn=useradmin,cn=privileges,cn=accounts,dc=example,dc=com
aci: (target = "ldap:///uid=*,cn=users,cn=accounts,dc=example,dc=com")(version
3.0;acl "Add Users";allow (add) groupdn = "ldap:///cn=addusers,cn=permission
s,cn=accounts,dc=example,dc=com";)
privilege entry#
A privilege entry using the example permission. Note the other permissions that make up this privilege. It is a member of the heldesk role.
dn: cn=useradmin,cn=privileges,cn=accounts,dc=example,dc=com
objectClass: top
objectClass: groupofnames
objectClass: nestedgroup
cn: useradmin
description: User Administrators
memberOf: cn=addusers,cn=permissions,cn=accounts,dc=example,dc=com
memberOf: cn=change_password,cn=permissions,cn=accounts,dc=example,dc=com
memberOf: cn=add_user_to_default_group,cn=permissions,cn=accounts,dc=example,d
c=com
memberOf: cn=removeusers,cn=permissions,cn=accounts,dc=example,dc=com
memberOf: cn=modifyusers,cn=permissions,cn=accounts,dc=example,dc=com
member: cn=helpdesk,cn=roles,cn=accounts,dc=example,dc=com
role entry#
The helpdesk role. Note that the memberOf permissions have carried forward. This role has no current members of its own.
dn: cn=helpdesk,cn=roles,cn=accounts,dc=example,dc=com
objectClass: top
objectClass: groupofnames
objectClass: nestedgroup
cn: helpdesk
description: Helpdesk
memberOf: cn=useradmin,cn=privileges,cn=accounts,dc=example,dc=com
memberOf: cn=addusers,cn=permissions,cn=accounts,dc=example,dc=com
memberOf: cn=change_password,cn=permissions,cn=accounts,dc=example,dc=com
memberOf: cn=add_user_to_default_group,cn=permissions,cn=accounts,dc=example,d
c=com
memberOf: cn=removeusers,cn=permissions,cn=accounts,dc=example,dc=com
memberOf: cn=modifyusers,cn=permissions,cn=accounts,dc=example,dc=com