Re: "security_compute_sid: invalid context" error when starting/stopping mysqld daemon

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

 



On Wed, 2009-11-11 at 10:32 +0100, Dominick Grift wrote:
> On Tue, 2009-11-10 at 15:54 -0800, Larry Ross wrote:
> > On Mon, Nov 9, 2009 at 1:27 PM, Dominick Grift <domg472@xxxxxxxxx>
> > wrote:
> >         
> >         On Mon, 2009-11-09 at 12:54 -0800, Larry Ross wrote:
> >         > On Fri, Nov 6, 2009 at 3:23 PM, Eamon Walsh
> >         <ewalsh@xxxxxxxxxxxxx>
> >         > wrote:
> >         >
> >         >         On 11/06/2009 05:11 PM, Dominick Grift wrote:
> >         >         > On Fri, Nov 06, 2009 at 12:39:57PM -0800, Larry
> >         Ross wrote:
> >         >         >
> >         >         >> On Fri, Nov 6, 2009 at 12:10 PM, Eamon Walsh
> >         >         <ewalsh@xxxxxxxxxxxxx> wrote:
> >         >         >>
> >         >         >>
> >         >         >>>  On 11/04/2009 06:57 PM, Larry Ross wrote:
> >         >         >>>
> >         >         >>>> I have two selinux users that need to be able
> >         to stop and
> >         >         start the
> >         >         >>>> mysql daemon, which is started by the
> >         initialization
> >         >         scripts.  When
> >         >         >>>> the daemon is stopped and started by the
> >         secadm_u user,
> >         >         it ends up in
> >         >         >>>> the context secadm_u:secadm_r:mysqld_t.  When
> >         it is
> >         >         stopped and
> >         >         >>>> started by the dbadm_u user, it ends up in the
> >         >         >>>> dbadm_u:dbadm_r:mysqld_t context.  When it is
> >         started by
> >         >         the init
> >         >         >>>> scripts it ends up in the
> >         system_u:system_r:mysqld_t
> >         >         domain.
> >         >         >>>>
> >         >         >>>> I would like it to alway end up in the
> >         system_r:mysqld_t
> >         >         domain, but
> >         >         >>>> can't seem to find any documentation that
> >         describes how
> >         >         to get that to
> >         >         >>>> work.
> >         >         >>>>
> >         >         >>>> If I add a role_transition rule to transition
> >         the role to
> >         >         system_r
> >         >         >>>> when the executable is run:
> >         >         >>>> role_transition sysadm_r mysqld_safe_exec_t
> >         system_r;
> >         >         >>>> role_transition dbadm_r  mysqld_safe_exec_t
> >         system_r;
> >         >         >>>> I end up getting these errors:
> >         >         >>>>
> >         >         >>>> Nov  4 15:41:36 localhost kernel: type=1401
> >         >         audit(1257378096.775:46):
> >         >         >>>> security_compute_sid:  invalid context
> >         >         >>>> dbadm_u:system_r:mysqld_safe_t:s0 for
> >         >         >>>> scontext=dbadm_u:dbadm_r:initrc_t:s0
> >         >         >>>>
> >         tcontext=system_u:object_r:mysqld_safe_exec_t:s0
> >         >         tclass=process
> >         >         >>>>
> >         >         >>>> I believe I have the rules that should allow
> >         this, but
> >         >         obviously I am
> >         >         >>>> missing something.
> >         >         >>>> role dbadm_r types mysqld_safe_t;
> >         >         >>>> role sysadm_r types mysqld_safe_t;
> >         >         >>>> role system_r types mysqld_safe_t;
> >         >         >>>> and this:
> >         >         >>>> allow initrc_t mysqld_safe_t : process
> >         transition ;
> >         >         >>>> which is what the "security_compute_sid"
> >         message looks
> >         >         like it is
> >         >         >>>>
> >         >         >>> missing.
> >         >         >>>
> >         >         >>>> Does anyone know where I can find a good
> >         description of
> >         >         how to get a
> >         >         >>>> service to transistion back into system_r when
> >         started by
> >         >         a user or
> >         >         >>>> have any idea what I am missing?
> >         >         >>>>
> >         >         >>>
> >         >         >>> The run_init program was designed to solve this
> >         problem,
> >         >         take a look at
> >         >         >>> the man page.
> >         >         >>>
> >         >         >>> On Fedora at least, the "service" command calls
> >         run_init
> >         >         internally, so
> >         >         >>> doing "service mysqld start" should in theory
> >         start it up
> >         >         in the
> >         >         >>> system_r role.  If you're just running
> >         "/etc/init.d/mysld
> >         >         start" it
> >         >         >>> won't transition.
> >         >         >>>
> >         >         >>>
> >         >         >> That would be great, but I am trying to use this
> >         as normal
> >         >         users on a system
> >         >         >> to which the root account is locked.  As far as I
> >         know,
> >         >         run_init always asks
> >         >         >> for the root password.  Is there a way to use it
> >         without
> >         >         having access to
> >         >         >> the root password?
> >         >         >>
> >         >         > I think you can use pam_rootok
> >         in /etc/pam.d/run_init. I
> >         >         dont know the details of the top of my head because
> >         i use
> >         >         Fedora and the policy that i posted earlier so that
> >         i
> >         >         automatically transition to initrc_t without
> >         run_init.
> >         >         >
> >         >
> >         >
> >         >
> >         >         Yes, /etc/pam.d/run_init controls the password check
> >         done by
> >         >         run_init.
> >         >         Also, it only asks for the password of whatever user
> >         is
> >         >         running it, not
> >         >         always the root password.  The only reason it asks
> >         for a
> >         >         password is to
> >         >         verify that a human is present.
> >         >
> >         >         "run_init id -Z" from sysadm_r should print out
> >         >         "system_u:system_r:initrc_t".  Other roles might
> >         need the
> >         >         following line
> >         >         of policy to be able to run run_init (using the
> >         example of
> >         >         staff):
> >         >
> >         >         seutil_run_runinit(staff_t, staff_r)
> >         >
> >         >         The policy snippet Dominick posted earlier also
> >         works.
> >         >
> >         > I get a syntax error when I try to use that snippet:
> >         >
> >         > # make -f /usr/share/selinux/devel/Makefile
> >         > Compiling strict appmysql module
> >         > /usr/bin/checkmodule:  loading policy configuration from
> >         > tmp/appmysql.tmp
> >         > appmysql.te:62:ERROR 'syntax error' at token
> >         > 'init_labeled_script_domtrans' on line 92695:
> >         > init_labeled_script_domtrans(mysqld_safe_t,
> >         mysqld_safe_exec_t)
> >         > /usr/bin/checkmodule:  error(s) encountered while parsing
> >         > configuration
> >         > make: *** [tmp/appmysql.mod] Error 1
> >         >
> >         > is init_labeled_script_domtrans defined for RHEL 5.3?  I see
> >         it used
> >         > in the files below:
> >         >
> >         > /usr/src/redhat/BUILD/serefpolicy-2.4.6/policy/modules/services/virt.if:        init_labeled_script_domtrans($1, virtd_initrc_exec_t)
> >         > /usr/src/redhat/BUILD/serefpolicy-2.4.6/policy/modules/services/avahi.if:       init_labeled_script_domtrans($1, avahi_initrc_exec_t)
> >         > /usr/src/redhat/BUILD/serefpolicy-2.4.6/policy/modules/services/spamassassin.if:        init_labeled_script_domtrans($1,spamd_script_exec_t)
> >         >
> >         > but I don't see it defined anywhere.
> >         
> >         
> >         If it is there then it should be defined in init.if.
> >         
> >         You could simply add this to your mysqladm interface file:
> >         
> >         ########################################
> >         ## <summary>
> >         ##      Transition to the init script domain
> >         ##      on a specified labeled init script.
> >         ## </summary>
> >         ## <param name="domain">
> >         ##      <summary>
> >         ##      Domain allowed access.
> >         ##      </summary>
> >         ## </param>
> >         ## <param name="init_script_file">
> >         ##      <summary>
> >         ##      Labeled init script file.
> >         ##      </summary>
> >         ## </param>
> >         #
> >         interface(`init_labeled_script_domtrans',`
> >                gen_require(`
> >                        type initrc_t;
> >                ')
> >         
> >                domtrans_pattern($1, $2, initrc_t)
> >                files_search_etc($1)
> >         ')
> >         
> >         That should atleast make it work for that module. Hopefully
> >         the other
> >         policy in the snippit is supported.
> >  
> > I have seen this before, and I find it confusing, I get denials:
> >  
> > Nov 10 15:03:43 localhost kernel: type=1400 audit(1257894223.988:43):
> > avc:  denied  { transition } for  pid=3799 comm="mysql"
> > path="/usr/bin/mysqld_safe" dev=dm-1 ino=460035
> > scontext=app_dbadm_u:app_dbadm_r:initrc_t:s0
> > tcontext=app_dbadm_u:system_r:mysqld_safe_t:s0 tclass=process
> > 
> > I run that denial through audit2allow and I get this:
> > #============= initrc_t ==============
> > allow initrc_t mysqld_safe_t:process transition;
> > 
> > That rule is already present in the policy:
> > allow initrc_t mysqld_safe_t:process transition;
> > 
> > Can anyone tell me why this happens?  Am I missing something?  Is
> > audit2allow confused?  Is the rule not being honored for some reason?
> 
> Look for a SELINUX_ERR line. Are there any in your audit.log?
> 
> It may (or may not) be because you need might need: allow app_dbadm_r
> system_r;
> 

Also make sure that you map system_r to your selinux user (app_dbadm_u)

example:

semanage user -m -L s0 -r s0 -R "staff_r system_r app_dbadm_r" -P user
app_dbadm_u

> >  
> >   -- Larry
> >  
> >  
> >  
> >         >   -- Larry
> >         >
> >         >
> >         >
> >         >
> >         >         >
> >         >         > BTW, I am using RHEL 5.3, do you know if service
> >         there calls
> >         >         run_init
> >         >         > internally?
> >         >
> >         >
> >         >         I was mistaken about this, as pointed out by Paul,
> >         service
> >         >         doesn't call
> >         >         run_init.
> >         >
> >         >
> >         >
> >         >         --
> >         >
> >         >
> >         >         Eamon Walsh
> >         >         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