Re: Programmatic domain change to unprivileged role

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

 



Thank you everyone for all the information.  I did manage to get
transitions working successfully (it seems part of the problem was
related to the policy install process I was using).  Most of the
remaining issues I face are related to RPM packaging a module, which I
can check the Fedora list for, if necessary.

Thanks again, for the help with setexeccon vs default transitions.
-Dan


On Wed, Aug 21, 2013 at 10:27:52AM -0400, Stephen Smalley wrote:
> On 08/21/2013 10:22 AM, Stephen Smalley wrote:
> > On 08/20/2013 04:05 PM, Dan Pou wrote:
> >> On Fri, Aug 09, 2013 at 08:51:17AM -0400, Stephen Smalley wrote:
> >>> On 08/08/2013 03:58 PM, Dan Pou wrote:
> >>>> 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.
> >>>
> >>> Could be that security_compute_user() (which writes to
> >>> /sys/fs/selinux/user) is getting an error or no results and thus the
> >>> code is trying to fall back to the failsafe context (as specified in
> >>> /etc/selinux/$SELINUXTYPE/contexts/failsafe_context), which isn't legal
> >>> for user_u.
> >>> The failsafe is to permit root / admin logins under such a situation.
> >>>
> >>> I'd look to see what the result of writing to /sys/fs/selinux/user was
> >>> and what was written to it in the strace output.  You can also directly
> >>> call security_compute_user via the compute_user tool under
> >>> libselinux/utils if you obtain and build the sources yourself.  That
> >>> utility doesn't appear to get included in the libselinux-utils rpm though.
> >>>
> >>>
> >>
> >> I addeded the system_r:my_daemon_t:s0 user_r:user_t:s0 role transition
> >> to /etc/selinux/mls/contexts/default_contexts.
> >> This got me to actually writing user_u:user_r:user_t:s0 for setexeccon,
> >> but I am still failing.  It looks like it is failing in the
> >> selinux_trans_to_raw_context.  I was thinking this was an issue with
> >> declaring the transition.
> >> What steps do I need to setup a role_transition and/or type_transistion?
> >>
> >> I tried adding the following to no avail:
> >> type_transition my_daemon_t non_security_file_type:process user_t;
> >> Do I need more type_transitions, or addition role_transition
> >> declarations (aside from /etc/selinux/mls/contexts/default_context)?
> >>
> >> Other info:
> >> The daemon (without SELinux) just sets the euid/egid to match the user
> >> requesting the job. So I inserted calls to
> >> getseuserbyname
> >> get_default_context_with_rolelevel or get_default_context_with_level
> >> then setexeccon
> >> the returned context before execve'ing.
> > 
> > If you are getting to the point of setexeccon() with the correct
> > security context, then you are past the point of any type transition or
> > role transition rules.  The transition rules are just to define defaults
> > in the absence of an explicit setexeccon(); it is the allow rules that
> > govern what is permitted.  You do need both role allow and TE allow
> > rules in your policy, of course.  Did you add the interface calls that I
> > listed earlier for your daemon domain?  However, lack of permission
> > there should show up as an AVC denial; you might re-test with dontaudit
> > rules stripped to confirm (semodule -DB).
> > 
> > If the error truly lies during the trans_to_raw_context, then maybe you
> > have a problem in your label translation daemon?  Are you running
> > mcstransd or something else?  What happens if you simply stop the label
> > daemon (it isn't required for operation; it just provides translation of
> > MLS labels to and from more human-readable form and deals with complex
> > label encodings ala the old MITRE label encodings format).
> 
> Also, in addition to the interfaces I listed earlier, you likely need
> mls_process_set_level(X_t)
> to permit the daemon to set the current/low level.
> 

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