On Fri, 2008-05-02 at 13:20 -0400, Stephen Smalley wrote:
> On Tue, 2008-04-22 at 12:38 -0400, Stephen Smalley wrote:
> > On Tue, 2008-04-22 at 11:55 -0400, Stephen Smalley wrote:
> > > On Thu, 2008-04-17 at 09:12 -0400, Stephen Smalley wrote:
> > > > On Wed, 2008-04-16 at 23:23 -0400, Bill Nottingham wrote:
> > > > > James Morris (jmorris(a)namei.org) said:
> > > > > > > You cannot create files in a chroot of a context not
known by the
> > > > > > > host policy. This means that if your host is running
RHEL 5, you are
> > > > > > > unable to compose any trees/images/livecds with
SELinux enabled for
> > > > > > > later releases.
> > > > > >
> > > > > > Ok, that's what I suspected.
> > > > > >
> > > > > > One of the possible plans for this is to allow a process to
run in a
> > > > > > separate policy namespace, and probably also utilize
namespace support in
> > > > > > general.
> > > > > >
> > > > > > This is non-trivial and needs more analysis.
> > > > >
> > > > > Incidentally, this is also one of the blockers for
policy-in-packages,
> > > > > rather than a monolithic one.
> > > >
> > > > I assume you mean setting down unknown file labels rather than
> > > > per-namespace or per-chroot policy support. I think they are
related
> > > > but different. The former is required if you always plan to install
the
> > > > files _before_ loading the policy. The latter is required primarily
for
> > > > getting any scriptlets to run in the right security contexts so that
any
> > > > files they create are labeled appropriately within the chroot.
> > >
> > > BTW, for reference, a patch to support setting down unknown file labels
> > > was posted here a couple of years ago:
> > >
http://marc.info/?l=selinux&m=114771094617968&w=2
> >
> > And the last version of that patch was:
> >
http://marc.info/?l=selinux&m=114840466518263&w=2
> > Not that it applies cleanly anymore, of course.
>
> An updated patch and discussion has started over on selinux list, see:
>
http://marc.info/?t=120958955400002&r=1&w=2
>
> One question that has come up is whether the patch to support setting
> unknown file labels is sufficient to support the buildsys needs, or
> whether something more is required. My impression is that all we truly
> need is:
> 1) support for setting unknown file labels for use by rpm, and
> 2) bind mount /dev/null over selinux/load within the chroot so that
> policy loads within the chroot do nothing rather than changing the build
> host's policy, and
> 3) bind mount a regular empty file over selinux/context within the
> chroot so that attempts to validate/canonicalize contexts by rpm will
> always return the original value w/o trying to validate against the
> build host's policy.
We need to better understand the sequence of actions performed by rpm,
both from outside the chroot and from within the chroot, to know
precisely what is needed here.
It would be cleaner if we could just disable policy reload altogether.
libsemanage will skip policy reload if:
1) the caller asked to skip reload (e.g. semodule with the -n option) or
2) the caller asked to operate on a policy store other than the active
policy store (e.g. semodule with the -s option), or
3) SELinux appears to be disabled.
We can fake the last one, but I think that will confuse rpm with respect
to other actions we still want it to take, like labeling the files,
transitioning to a scriptlet domain, etc.
In this case is scriptlet transition really important? What is to be
gained? Its not like we are getting file transitions...
On the context validation/canonicalization, it would be cleaner if we
could have rpm validate and canonicalize against the target image's
policy rather than the build host's policy. This is likely doable, as
setfiles has to do something like this for its -c option when validating
a file contexts configuration against a policy at policy build time.
Requires calling a libselinux interface to register an alternative
validate callback.
This sounds like a great idea, but is clearly going to take work from
the RPM people....