[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Finer access control framework over users, domains and operations.



Hi, all

We propose an access control framework which considers users, domains
and operations.

The current implementation exclusively allows root to control guest
domains.
Guest administrators have to switch to root so they can bring their own
guest domains up and down.

To solve this problem, Xen should introduce a framework where the root's
privileges are split into restricted roles.
Every guest administrator controls concerning guest domains with a part
of the least privilege with these roles supplied.

Figure 1 presents an example of the access control.

           +--------+    +--------+        +-------+
           | userA  |    | userB  |        | root  |
           +--+--+--+    +--------+        +---+---+
    operation |  | operation                   | delegate the authority
       to VM1 |  | to VM2                      v to userA
    +---------+--+----------------+    +-------+-------+
    |  Access Control Module      +----+ ACL Policy DB |
    +---------+--+----------------+    +---------------+
              |  |
       +------+  +-----+
       |pass           |fail
       v               v
   +---+---+       +---+---+
   |  VM1  |       |  VM2  |
   +-------+       +-------+

    Figure 1. An example of the access control by a domain administrator

The Access Control Module (ACM) determines if an operation is permitted
based on the Access Control Policy DB.
Concretely, when a user is going to submit a comand to VM, the ACM
checks if the tuple (user, command, VM) is valid with respect to the ACL
Policy DB.
For example, as depicted in figure 1, userA can operate VM1 but cannot
operate VM2 because the ACL Policy DB states so.


Figure 2 shows the control path of Xen and the location of ACM in our
implementation.
Marked as "*" are the developed ACMs for this framework.
They are secured-xm, secured-libvirt and virt-manager.
Secured-xen-API is under development, though.

           [Others]      [console/shell]    [virt-manager*]
           (GUI/CLI)    (CLI)       (CLI)     (GUI)
               v          v           v         v
[Dom0]         |          |           |         |
          (Xen-API)      (xm)      (virsh)  (libvirt-API)
               |          |           |         |
 +-------------+--*+ +----+------*+ +-+---------+----*+
 | secured-xen-API | | secured-xm | | secured-libvirt |
 +=================+ +============+ +=================+
 |     xen-API     | |      xm    | |   libvirt(API)  |
 +-------------+---+ +----+-------+ +-+--+------+-----+
               |          |           |  |      |
               |          |   +-------+  |      |
               |          |   |          |      |
               v          v   v          v      |
             +-+----------+---+-+   +----+----+ |
             |      xend        |<=>|xenstored| |
             +-------+----------+   +---------+ |
                     |                          |
                     v                          |
             +-------+-------+                  |
             |     libxc     |                  |
             +-------+-------+                  |
                     |                          |
                     v                          v
             +-------+--------------------------+-+
             |              ioctl                 |
             +------------------------------------+

    Figure 2. Control path of Xen and Access Control Modules

We internally discussed which component should have ACM feature and
concluded xm/libvirt are the best.
But there was at least one another candidate, which was ioctl.
The brief summary is:

xm/libvirt approach:
* is able to keep implementations simple because a xen operation to be
controlled has one-to-one relation to a xm/libvirt command (pros.).
* requires each individual implementation for xm and libvirt (cons.).

ioctl approach:
* supports both xend and libvirt in a single implementaion (pros.).
* is complecated in terms of implementation because some xen operations
have one-to-many relations to ioctls.  We have to resolve what xen
operation is submitted at the ioctl layer (cons.).

Since we are interested in the framework that realizes access control in
terms of user, operation and domain, xm/libvirt approach handling these
entities in a straightforward way seems promising.


Configuration files define entities and relations based on Role-based
Access Control (RBAC) model[1].
The concrete model employed here is:

  USERS <--(UA)--> ROLES <--(PA)--> PRMS(OBS,OPS)

Term definitions are follows.
  - USERS: a set of users
  - ROLES: a set of roles
  - PRMS(Permissions): the permission to the role
  - OBS(Objects): the objects which applies ACL
  - OPS(Operations): operation to the object
  - UA(User Assignment):  define user role relation
  - PA(Permission Assignment): define role and permission relation

These entities and relations are defined in the separate two files:

  UA file:
    defines the relations between user and role, as well as user names.
  PA file:
    defines the relations between role and permission, as well as
    operations and VM names.
An example is at the end of this document.

Root is responsible for editing UA and PA file to give a user a
permission to control a certain VM.

Here we show the example of UA and PA definition files.

[UA file]
<?xml version="1.0" ?>
<UserConfiguration>
  <User name="hostManager">          <-- User account name
    <UserRole role="HostOSManager"/> <-- Role name
  </User>
  <User name="user-admin">
    <UserRole role="Administrator"/>
    <UserRole role="PolicyManager"/>
  </User>
</UserConfiguration>

[PA file]
<?xml version="1.0" ?>
<RolePolicyDefinition>
  <Role name="HostOSManager">    <-- Role name
    <ManageVM type="individual"> <-- "individual" means for one guest VM
      <VM name="Domain-0"/>      <-- VM name for operating
    </ManageVM>
    <ControlOperation>
      <Accept>
        <operation id="2"/>      <-- Operation ID allowed to execute
        <operation id="3"/>
        <operation id="4"/>
        .................
        <operation id="62"/>
        <operation id="63"/>
      </Accept>
    </ControlOperation>
  </Role>
  <Role name="Administrator">
    <ManageVM type="individual">
      <VM name="Domain-0"/>
    </ManageVM>
    <ControlOperation>
      <Accept>
        <operation id="16"/>
      </Accept>
    </ControlOperation>
  </Role>
  <Role name="PolicyManager">
    <ManageVM type="individual">
      <VM name="Domain-0"/>
    </ManageVM>
    <ControlOperation>
      <Accept>
        <operation id="16"/>
      </Accept>
    </ControlOperation>
  </Role>
</RolePolicyDefinition>


References
==========================
[1] David F.Ferraiolo. et al., “Proposed NIST Standard for Role-Based
Access Control”, ACM Transaction on Institute and System Security,
Vol.4, No.3, August 2001, pp224-274.

Any comments are welcome.
Please let us know if there is a mailing list more appropriate than this
ML.

Best regards,

Syunsuke HAYASHI
Yutaka EZAKI
Masaki KANNO
Atsushi SAKAI


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.