Re: Programmatic domain change to unprivileged role

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

 



Thanks for the suggestion about strace, that is pointing to the problem.
I need to check the policy rules I have been adding to see how I got
here:

write(3, "user_u:sysadm_r:sysadm_t:s0\0", 28) = -1 EINVAL (Invalid
argument)

This is the second write.  When I test the same code with sshd_t to
<username> transition, I get one write, with a successful return of
default_context_with_level.

Thanks, this gives me something to go off of.
-Dan


On Wed, Aug 07, 2013 at 08:41:21AM -0400, Stephen Smalley wrote:
> On 08/07/2013 08:28 AM, Stephen Smalley wrote:
> > On 08/06/2013 04:37 PM, Dan Pou wrote:
> >> On Tue, Aug 06, 2013 at 04:15:12PM -0400, Stephen Smalley wrote:
> >>> On 08/05/2013 03:07 PM, Dan Pou wrote:
> >>>> I have an existing daemon that I am working to enable in an MLS setting,
> >>>> but I am running into difficulties with calls to get a context of an
> >>>> unprivileged user from the daemon context
> >>>> (system_u:system_r:<name-of-service>_t:s0-s15:c0.c1023).
> >>>> The deamon will run an executable with ID of an authenticated user, so I
> >>>> looked at trying to replicate the method used by sshd.
> >>>> When sshd calls get_default_context, there is a transition defined to go
> >>>> to the user_u:user_r:user_t domain, but there is not one available from
> >>>> the daemon context I have developed.
> >>>> Is there a simpler example than ssh that I could look at to understand
> >>>> how to specify transitions?
> >>>> The daemon uses the fork+execve method, so I don't think that I need the
> >>>> dyntransition method, but it is not clear to me how to specify all the
> >>>> required transitions for executing any file available to an unprivileged
> >>>> user.
> >>>
> >>> Are you looking for how to write the code to perform the context change,
> >>> or how to write the policy to permit it to happen?  Or both?
> >>
> >> I am looking at both.
> >>
> >>>
> >>> If your question has to do with policy, then the refpolicy list or
> >>> fedora selinux list may be better resources, as it will depend on the
> >>> specific policy interfaces provided by refpolicy and/or your distribution.
> >> I will give those a try as well.
> >>
> >>>
> >>> The result of get_default_context() is of course driven by the policy,
> >>> so your ability to use it effectively depends on having the right policy
> >>> in place first.  Your daemon's domain will presumably need several of
> >>> the interfaces defined in system/userdomain.if to permit the domain
> >>> transition, along with interfaces from kernel/domain.if to permit
> >>> switching user and role.  Possibly something like:
> >>> userdom_spec_domtrans_unpriv_users(X_t)
> >>> userdom_bin_spec_domtrans_unpriv_users(X_t)
> >>> userdom_entry_spec_domtrans_unpriv_users(X_t)
> >>> domain_subj_id_change_exemption(X_t)
> >>> domain_role_change_exemption(X_t)
> >>
> >> I tried a number of these, but without success.  I always get invalid
> >> context when I use the get_default_context_with_level() or
> >> get_ordered_context_list_with_level() functions with the fromcon set to
> >> my daemon context.
> >> Should these macros add the transitions? If it were a matter of denials
> >> I would be OK, but my confusion arises from how to add all the necessary
> >> transitions.
> >> I assume I am missing something else that prevents my domain from being
> >> a valid "from" context.  The service successfully runs from run_init
> >> (through the _exec_ transition).
> > 
> > Invalid context means that the user-role, role-type, or user-level
> > combination are invalid according to policy.  Maybe you are passing in a
> > level that is not authorized for the user?
> > 
> > libselinux has some utilities (under libselinux/utils) that can be used
> > to exercise the get_default_context or get_ordered_context_list
> > interfaces from the command-line.  In the source, these are getconlist
> > and getdefaultcon; they appear to be packaged by Fedora in
> > libselinux-utils as selinuxconlist and selinuxdefcon.
> 
> Note that you can either run them under gdb to find out exactly where
> the error is occurring (and on what context string) or you can run them
> under strace and look for the call that is yielding EINVAL, likely when
> the context gets written to /sys/fs/selinux/context to check its validity.

--
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