Re: is_selinux_enabled() always returns 0 after selinux_set_policy_root()

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

 



On Wed, 2017-04-26 at 17:08 -0400, Colin Walters wrote:
> 
> On Wed, Apr 26, 2017, at 04:43 PM, Colin Walters wrote:
> > On Wed, Apr 26, 2017, at 04:24 PM, Stephen Smalley wrote:
> > > 
> > > Your analysis and proposed fix sound correct to me.  I blame Dan
> > > ;)
> > 
> > Thanks.  I tested the patch and confirmed it fixed ostree as it
> > stands today,
> > but I'm going to change ostree to cache the result of
> > `is_selinux_enabled()`
> > itself to work around this, since for our use cases it should never
> > really
> > change dynamically.
> 
> Although as I was working on the workaround, which I just put up as:
> https://github.com/ostreedev/ostree/pull/815
> 
> I was thinking about this a bit more and I realized (maybe) why
> Dan added that call.  
> 
> Right now (ignoring #ifdef ANDROID):
> int is_selinux_enabled()
> {
> return (selinux_mnt && has_selinux_config);
> }
> 
> And conceptually "has_selinux_config" derives from the policy root.
> But in practice it doesn't today - that variable is also only
> initialized
> in the constructor.   Should it?  I'm not sure.
> 
> The way libostree uses the policy root is basically for the regexp
> labeling
> database.   We're using `is_selinux_enabled()` to determine whether
> or not we should call `setfscreatecon()`. 
> 
> Eh.  My inclination is not think too much more about this.  The patch
> is unlikely to break anything, it does fix a bug, and I'm not aware
> of a
> case where someone would be using e.g. a host system with SELinux
> fully disabled to do anything related to ostree, so we don't
> need to care about trying to disentangle those cases.  Hopefully!

1. The has_selinux_config test was added long after the introduction of
 selinux_set_policy_root(), and only to avoid a regression due to
removal of the test to see if policy is loaded.  See commits
c08c4eacab8d55598b9e5caaef8a871a7a476cab and
685f4aeeadc0b60f3770404d4f149610d656e3c8.

2. The test for has_selinux_config wouldn't actually be affected by
selinux_set_policy_root() even if we were to re-evaluate it. 
selinux_set_policy_root() sets the prefix for the policy files (e.g.
from /etc/selinux/targeted to /etc/selinux/mls), it does not affect the
path for /etc/selinux/config.  We don't presently provide any way to
redirect libselinux to a different config file.

3. Originally, is_selinux_enabled() returned 1 if selinuxfs was
registered (in /proc/filesystems), even if not mounted. This was
dropped by commit e3cab998b48ab293a9962faf9779d70ca339c65d, which
changed the test to only return 1 if selinuxfs was mounted and only if
it is mounted rw, so that a ro mount could be used in mock and other
tools to make SELinux appear disabled.  Recent discussions on the list
(subject: "let's revert e3cab998b48ab293a9962faf9779d70ca339c65d") have
 proposed removing the ro check and only considering it disabled if
selinuxfs is not mounted at all because systemd is remounting
everything under /sys as ro for ProtectKernelTunables=yes and this is
leading services to conclude that SELinux is disabled and then failing
to label files correctly.  However, my impression is that systemd will
alter its behavior and I don't think we can in the near term change
libselinux in this regard as it will break various chroot and container
implementations.





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

  Powered by Linux