Re: refpolicy roles / RBAC separation RFC

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

 



On Wed, 2008-04-30 at 11:34 -0400, Daniel J Walsh wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Stephen Smalley wrote:
> > On Wed, 2008-04-30 at 08:18 -0400, Daniel J Walsh wrote:
> >> -----BEGIN PGP SIGNED MESSAGE-----
> >> Hash: SHA1
> >>
> >> Stephen Smalley wrote:
> >>> On Tue, 2008-04-29 at 13:29 -0400, Daniel J Walsh wrote:
> >>>> -----BEGIN PGP SIGNED MESSAGE-----
> >>>> Hash: SHA1
> >>>>
> >>>> Christopher J. PeBenito wrote:
> >>>>> For those interested all of the user roles have been separated out into
> >>>>> individual modules in a new roles refpolicy layer, in refpolicy trunk.
> >>>>> This should enable interested users to add and remove roles more easily.
> >>>>> Each of the user roles has a module named after it (e.g., sysadm module
> >>>>> for sysadm_r), except user_r, which has a name unprivuser, since its not
> >>>>> possible to use "user" as a module name since it is a policy keyword.
> >>>>>
> >>>>> Next we will be doing an experiment attempting to use the SELinux RBAC
> >>>>> functionality to separate users instead of SELinux TE.  What this means
> >>>>> is that the role field will start being used more substantially than it
> >>>>> currently is.  In a nutshell, this means that all user objects will have
> >>>>> the user's role rather than object_r.  Then the separate types will be
> >>>>> collapsed into one type where possible.  This will result in per-role
> >>>>> types (e.g., user_mozilla_t, staff_mozilla_t) collapsing too
> >>>>> (mozilla_t).
> >>>>>
> >>>>> So for example, all of the home directory types will be collapsed into
> >>>>> home_t and home_dir_t.  This results in /root having the context
> >>>>> root:sysadm_r:home_dir_t.
> >>>>>
> >>>>> My current idea for RBAC rules is to group object classes in RBAC
> >>>>> constraints similar to the current MLS constraints (e.g. file classes
> >>>>> together, network classes together).  The basic RBAC rule will be:
> >>>>>
> >>>>> constrain { dir file ... } { getattr read write .... }
> >>>>> 	r1 == r2
> >>>>> 	or r1 == system_r
> >>>>> 	or r2 == object_r
> >>>>> 	or r1 == rbac_subj_role_file_exempt
> >>>>> 	or r2 == rbac_obj_role_file_exempt
> >>>>> 	or t1 == rbac_subj_type_file_exempt
> >>>>> 	or t2 == rbac_obj_type_file_exempt;
> >>>>>
> >>>>> Is this too coarse?  Do we want to break it down into read and write
> >>>>> rather than just exempt?
> >>>>>
> >>>>> Unfortunately this necessitates some kernel and userspace changes:
> >>>>>
> >>>>> Roles aren't respected on objects in the kernel.  So if you create a
> >>>>> file in a directory that has the role staff_r, the file will have an
> >>>>> object_r role instead of staff_r.
> >>>>>
> >>>>> Login programs and newrole will have to be changed to set the role on
> >>>>> the terminal.
> >>>>>
> >>>>> The above example rule utilizes a role attribute, which doesn't exist.
> >>>>> In the absence of role attributes, role dominance can be used, but its
> >>>>> unclear if the dominance code works, since no one uses it.
> >>>>>
> >>>>> Genhomedircon may need to be updated.
> >>>>>
> >>>>> Tools such as audit2allow will need more audit2why-like support and
> >>>>> policy info to fix RBAC denials (a general constraints usability issue).
> >>>>>
> >>>>> Comments?
> >>>>>
> >>>> As has been stated before, I am not interested in separation of the
> >>>> homedir based on Role, since this will prevent shared homedirs on
> >>>> machines where the same user has different roles.  Also makes testing of
> >>>> homedir roles difficult since changing a role requires a full relabel of
> >>>> the homedir.  Labeling of the /root directory should be static and not
> >>>> related to user or role, because domains often want read/write access to
> >>>> the root directory and dontauditing this becomes complex if this changes
> >>>> based on semanage rules.
> >>>>
> >>>> service XYZ start in /root will almost always generate a search of the
> >>>> /root directory.
> >>>>
> >>>> Currently Fedora labeling on the homedir is user_home_t or
> >>>> user_mozilla_home_t, Ie everything user_* So switching this to
> >>>> mozilla_home_t or home_t would be fine.
> >>> As before, I don't believe any of this would force anyone to separate
> >>> files based on role; it would be driven by policy configuration and
> >>> using object_r pervasively would continue to work fine.  It would just
> >>> offer the ability to provide such separation based on role if so
> >>> configured, and it would drop the use of derived types to achieve such
> >>> separation.
> >>>
> >>> If you aren't going to separate files based on role though, you may want
> >>> to think about how to protect roles against influence by other roles so
> >>> that e.g. user_r or staff_r cannot inject commands to be run by sysadm_r
> >>> into dotfiles.  DAC will help you with user-based separation (somewhat),
> >>> but there is still the case where you have a user who is authorized for
> >>> staff_r and sysadm_r who logs in initially in staff_r and later switches
> >>> to sysadm_r.  There you have consider the potential of a flawed or
> >>> malicious program run while in staff_r trying to inject commands to be
> >>> run in sysadm_r, all running under the same user identity.
> >>>
> >> I label /root admin_home_t and don't allow any confined role to write to
> >> it.  I have sysadm_r but have written before that I think it is a waste
> >> of time, and prefer to just use unconfined_r.
> >>
> >> My view of the world is that you have a "login" role and you have an
> >> "admin" role.  On my machine this is staff_r and unconfined_r, respectively.
> > 
> > Right, but whether unconfined_r or sysadm_r, the question is how to
> > protect the more-privileged role (unconfined_r in your case) from
> > influence by the less-privileged login role (staff_r) when they both
> > operate under the same DAC uid and thus share the same set of dotfiles.
> > The per-role types or roles on home directory files are one mechanism
> > for achieving that protection.  Another way would be to polyinstantiate
> > the home directories by role.  Another way that relies on DAC-only would
> > be to create a dedicated (pseudo) user account for each role with its
> > own home directory and "safe" set of dotfiles and switch to that account
> > when switching roles.
> > 
> But you are assuming the UID does not change.   Since I look at the
> world as Two Roles,  One Role when I am normal user and another role
> when I am root.   I don't have this problem.  I don't want users using
> newrole,  I want them to use sudo.  So unconfined_t or webadm_t when
> UID==root, staff_t when UID=dwalsh.  newrole is just a complexity that
> most users do not understand.    Since a confined application can not
> read by default the directories of the user, the user will not be able
> to effect the confined domain.

That's essentially the last case (create a dedicated pseudo user account
for each role with its own home directory) simplified to two-roles-only.
But I think you'll eventually find two-roles-only to be too limiting
(and certainly not sufficient for RBAC for organizations).

-- 
Stephen Smalley
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux