Re: [RFC][PATCH] selinux: Introduce a policy capability and permission for NNP transitions

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

 



On Thu, Jul 13, 2017 at 03:59:29PM -0400, Stephen Smalley wrote:
> On Thu, 2017-07-13 at 21:43 +0200, Dominick Grift wrote:
> > On Thu, Jul 13, 2017 at 09:28:43PM +0200, Dominick Grift wrote:
> > > On Thu, Jul 13, 2017 at 03:29:56PM -0400, Stephen Smalley wrote:
> > > > On Thu, 2017-07-13 at 20:16 +0200, Dominick Grift wrote:
> > > > > On Thu, Jul 13, 2017 at 02:13:40PM -0400, Stephen Smalley
> > > > > wrote:
> > > > > > On Thu, 2017-07-13 at 18:55 +0200, Dominick Grift wrote:
> > > > > > > On Thu, Jul 13, 2017 at 11:59:55AM -0400, Stephen Smalley
> > > > > > > wrote:
> > > > > > > > On Thu, 2017-07-13 at 11:48 -0400, Stephen Smalley wrote:
> > > > > > > > > On Thu, 2017-07-13 at 09:25 -0400, Paul Moore wrote:
> > > > > > > > > > On Thu, Jul 13, 2017 at 8:44 AM, Stephen Smalley <sds
> > > > > > > > > > @tycho
> > > > > > > > > > .nsa
> > > > > > > > > > .gov
> > > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > wrote:
> > > > > > > > > > > On Wed, 2017-07-12 at 20:27 -0400, Chris PeBenito
> > > > > > > > > > > wrote:
> > > > > > > > > > > > On 07/12/2017 05:38 PM, Paul Moore wrote:
> > > > > > > > > > > > > On Wed, Jul 12, 2017 at 9:26 AM, Stephen
> > > > > > > > > > > > > Smalley <sds
> > > > > > > > > > > > > @tyc
> > > > > > > > > > > > > ho.n
> > > > > > > > > > > > > sa
> > > > > > > > > > > > > .gov
> > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > On Tue, 2017-07-11 at 17:00 -0400, Paul Moore
> > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > On Mon, Jul 10, 2017 at 4:25 PM, Stephen
> > > > > > > > > > > > > > > Smalley
> > > > > > > > > > > > > > > <sds
> > > > > > > > > > > > > > > @tyc
> > > > > > > > > > > > > > > ho
> > > > > > > > > > > > > > > .nsa
> > > > > > > > > > > > > > > .gov>
> > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > 
> > > > > > > > > > > > > While I think splitting the NNP/nosuid
> > > > > > > > > > > > > transition
> > > > > > > > > > > > > restrictions
> > > > > > > > > > > > > might
> > > > > > > > > > > > > be a good idea under the new policy capability,
> > > > > > > > > > > > > I'm
> > > > > > > > > > > > > not
> > > > > > > > > > > > > sure
> > > > > > > > > > > > > it
> > > > > > > > > > > > > is
> > > > > > > > > > > > > worth the cost of a "process2" object class.
> > > > > > > > > > > > > 
> > > > > > > > > > > > > With that in mind, let's do two things with
> > > > > > > > > > > > > this
> > > > > > > > > > > > > patch:
> > > > > > > > > > > > > 
> > > > > > > > > > > > > * Mention the nosuid restrictions in the patch
> > > > > > > > > > > > > description.  It
> > > > > > > > > > > > > doesn't need much text, but something would be
> > > > > > > > > > > > > good
> > > > > > > > > > > > > so we
> > > > > > > > > > > > > have
> > > > > > > > > > > > > documentation in the git log.
> > > > > > > > > > > > > 
> > > > > > > > > > > > > * Let's pick a new permission name that is not
> > > > > > > > > > > > > specific
> > > > > > > > > > > > > to
> > > > > > > > > > > > > NNP
> > > > > > > > > > > > > or
> > > > > > > > > > > > > nosuid.  IMHO, nnpnosuid_transition is ... less
> > > > > > > > > > > > > than
> > > > > > > > > > > > > good.
> > > > > > > > > > > > > Unfortunately, I'm not sure I'm much better at
> > > > > > > > > > > > > picking
> > > > > > > > > > > > > names;
> > > > > > > > > > > > > how
> > > > > > > > > > > > > about
> > > > > > > > > > > > > "protected_transition"?  "restricted_transition
> > > > > > > > > > > > > "?
> > > > > > > > > > > > > "enable_transition"?  "override_transition"?
> > > > > > > > > > > > 
> > > > > > > > > > > > I vote for nnp_transition anyway.  "No New
> > > > > > > > > > > > Privileges"
> > > > > > > > > > > > encompasses
> > > > > > > > > > > > nosuid in my mind.  If the two perms had been
> > > > > > > > > > > > separated
> > > > > > > > > > > > I
> > > > > > > > > > > > would
> > > > > > > > > > > > have
> > > > > > > > > > > > been inclined to allow both every time one of
> > > > > > > > > > > > them was
> > > > > > > > > > > > needed,
> > > > > > > > > > > > to
> > > > > > > > > > > > make
> > > > > > > > > > > > sure no one was surprised by the behavior
> > > > > > > > > > > > difference.
> > > > > > > > > > > 
> > > > > > > > > > > I agree; I'll keep it as nnp_transition and just
> > > > > > > > > > > document
> > > > > > > > > > > it
> > > > > > > > > > > in
> > > > > > > > > > > the
> > > > > > > > > > > patch description.
> > > > > > > > > > 
> > > > > > > > > > Sorry to be a stubborn about this, but nnp_transition
> > > > > > > > > > makes
> > > > > > > > > > little
> > > > > > > > > > sense for the nosuid restriction.  Like it or not,
> > > > > > > > > > NNP has
> > > > > > > > > > a
> > > > > > > > > > concrete
> > > > > > > > > > meaning which is distinct from nosuid mounts.  We
> > > > > > > > > > don't
> > > > > > > > > > have to
> > > > > > > > > > pick
> > > > > > > > > > any of the permission names I tossed out, none of
> > > > > > > > > > those
> > > > > > > > > > were
> > > > > > > > > > very
> > > > > > > > > > good, but I would like to see something that takes
> > > > > > > > > > both NNP
> > > > > > > > > > and
> > > > > > > > > > nosuid
> > > > > > > > > > into account, or preferably something that doesn't
> > > > > > > > > > use
> > > > > > > > > > either
> > > > > > > > > > name
> > > > > > > > > > explicitly but still conveys the meaning.
> > > > > > > > > 
> > > > > > > > > NNP is essentially a superset of nosuid; it applies to
> > > > > > > > > all
> > > > > > > > > execve()
> > > > > > > > > calls by the process and its descendants rather than
> > > > > > > > > only to
> > > > > > > > > execve()
> > > > > > > > > calls on specially marked filesystems.  So I viewed it
> > > > > > > > > as the
> > > > > > > > > more
> > > > > > > > > general term.
> > > > > > > > > 
> > > > > > > > > If that's not viable, I can't think of anything clearer
> > > > > > > > > or
> > > > > > > > > better
> > > > > > > > > than
> > > > > > > > > nnp_nosuid_transition.  That clearly links it to what
> > > > > > > > > it
> > > > > > > > > means
> > > > > > > > > (allow
> > > > > > > > > a
> > > > > > > > > SELinux domain transition under NNP or nosuid).  It is
> > > > > > > > > somewhat
> > > > > > > > > ugly
> > > > > > > > > and verbose but it is clear in what it means, which I
> > > > > > > > > think
> > > > > > > > > is
> > > > > > > > > more
> > > > > > > > > important. All of your suggestions IMHO were less clear
> > > > > > > > > since
> > > > > > > > > they
> > > > > > > > > had
> > > > > > > > > no clear linkage to either NNP or nosuid, and I
> > > > > > > > > couldn't tell
> > > > > > > > > from
> > > > > > > > > reading the permission name what it meant.  The SELinux
> > > > > > > > > domain
> > > > > > > > > transition isn't protected, it isn't restricted, it
> > > > > > > > > isn't
> > > > > > > > > clear
> > > > > > > > > what
> > > > > > > > > enable_transition means versus the regular transition
> > > > > > > > > or
> > > > > > > > > dyntransition
> > > > > > > > > permissions, and we aren't overriding a transition but
> > > > > > > > > rather
> > > > > > > > > allowing
> > > > > > > > > one under NNP/nosuid.
> > > > > > > > > 
> > > > > > > > > The only other alternative I see is to introduce a
> > > > > > > > > process2
> > > > > > > > > class
> > > > > > > > > and
> > > > > > > > > use separate nnp_transition and nosuid_transition
> > > > > > > > > permissions
> > > > > > > > > (but in
> > > > > > > > > practice I expect them to be both allowed or denied
> > > > > > > > > together).  Note
> > > > > > > > > that this will require two avtab and AVC entries for
> > > > > > > > > every
> > > > > > > > > domain
> > > > > > > > > pair
> > > > > > > > > (if we allow whichever one ends up going in the
> > > > > > > > > process2
> > > > > > > > > class),
> > > > > > > > > so
> > > > > > > > > that has an impact on policy and AVC size.  Don't
> > > > > > > > > really see
> > > > > > > > > that
> > > > > > > > > as
> > > > > > > > > worthwhile.
> > > > > > > > > 
> > > > > > > > > Other approach would be to make the nosuid transition
> > > > > > > > > checks
> > > > > > > > > file-
> > > > > > > > > based 
> > > > > > > > > instead so that it would go in the file class (while
> > > > > > > > > the nnp
> > > > > > > > > one
> > > > > > > > > would
> > > > > > > > > remain in the process class), but I don't think that's
> > > > > > > > > really
> > > > > > > > > what we
> > > > > > > > > want either.  Difference between "Can domain D1
> > > > > > > > > transition
> > > > > > > > > under
> > > > > > > > > nosuid
> > > > > > > > >  to D2?" and "Can domain D1 transition under nosuid
> > > > > > > > > when
> > > > > > > > > executing
> > > > > > > > > file
> > > > > > > > > with type T1?".
> > > > > > > > 
> > > > > > > > Just to be clear, we would also be separately checking
> > > > > > > > regular
> > > > > > > > transition permission between the old and new contexts on
> > > > > > > > these
> > > > > > > > transitions, so you would need both:
> > > > > > > > allow D1 D2:process transition;
> > > > > > > > allow D1 T1:file nosuid_transition;
> > > > > > > > if we took the latter approach.
> > > > > > > > 
> > > > > > > > So we wouldn't lose entirely on a domain-to-domain check,
> > > > > > > > but
> > > > > > > > it
> > > > > > > > would
> > > > > > > > no longer be domain-to-domain for the nosuid part.
> > > > > > > > 
> > > > > > > > Whereas with original approach, we end up requiring:
> > > > > > > > allow D1 D2:process transition;
> > > > > > > > allow D1 D2:process nnp_nosuid_transition; # or whatever
> > > > > > > > permission
> > > > > > > > name is used
> > > > > > > 
> > > > > > > I don't know if i understand all the ins-and-outs of the
> > > > > > > matter
> > > > > > > but i
> > > > > > > think i do like the idea of differentiating between
> > > > > > > nosuid_transition
> > > > > > > and nnp_transition
> > > > > > > It provides more flexibility because i might not want to
> > > > > > > allow
> > > > > > > one or
> > > > > > > the other automatically.
> > > > > > > 
> > > > > > > I do not think it its a good idea to allow a process to
> > > > > > > transiton
> > > > > > > on
> > > > > > > nosuid mounted filesystems just because i am forced to
> > > > > > > allow it
> > > > > > > nnp.
> > > > > > 
> > > > > > Can you provide a real use case where you would need to
> > > > > > distinguish
> > > > > > them?
> > > > > 
> > > > > Nope I cannot, but its easy to merge the two permissions in
> > > > > policy,
> > > > > and thereby preserving flexibility. It will be hard to deal
> > > > > with a
> > > > > case that might arise that was not foreseen if we cover both
> > > > > scenarios with a single permission.
> > > > > 
> > > > > > 
> > > > > > Currently we handle them the same way (i.e. we don't allow
> > > > > > transitions
> > > > > > unless bounded for both).  The current patch preserves that
> > > > > > consistency, and just provides a way to allow transitions
> > > > > > without
> > > > > > bounds for both.  Of course, you still have to be allowed the
> > > > > > usual
> > > > > > permissions in order to perform the transition at all (Can
> > > > > > the
> > > > > > caller
> > > > > > execute the file? Can the callee be entered (entrypoint) by
> > > > > > the
> > > > > > file?
> > > > > > Can the caller transition to the callee?) in addition to the
> > > > > > new
> > > > > > permission check (Can the caller transition under NNP/nosuid
> > > > > > to the
> > > > > > callee?).
> > > > > > 
> > > > > > We can't distinguish them on a domain-to-domain basis without
> > > > > > introducing a new process2 class, and so far no one has been
> > > > > > excited
> > > > > > about that.
> > > > > 
> > > > > Why is that? Eventually that is going to happen anyway. Besides
> > > > > we
> > > > > also have a capability2 and its not like that's a big deal is
> > > > > it?
> > > > 
> > > > Adding it is fine if we have a genuine need for it, but it
> > > > doesn't come
> > > > for free. It is potentially an extra avtab entry (policy rule)
> > > > for
> > > > every allowed domain transition in the policy.  There are far
> > > > fewer
> > > > capability2 rules in comparison, since those are always domain-
> > > > self and
> > > >  to date the need for those capabilities has also been relatively
> > > > sparse.
> > > 
> > > Okay i rest my case, just making sure that this is thought over
> > > carefully
> > 
> > Aw heck on more argument:
> > 
> > How about adding another policycap for that?
> 
> I doubt we want to require policy writers and analysts to have to check
> a policy capability to determine whether nosuid transitions depend on
> their own unique permission or the one shared with nnp transitions.
> Complexity for no real gain.

Yes well "no real gain" I think basically were just saying: nosuid doesnt apply to selinux anymore

If i have an executable file type for a daemon that uses NNP and two executables one on a nosuid mounted slice and another one on a non-nosuid mounted partition, then basically from an selinux perspective the nosuid is meaningless.

You can argue that one can still use transition rules, but that doesnt fly in this case I think
 
> 
> > Also if were talking about excessive avtab entries. cap(2)?_userns
> > seems pretty excessive to me (you pretty much end duplicating cap and
> > cap2 equivalents for any process that needs to deal with userns)
> 
> They seem to be fairly sparsely used on Fedora so far compared to
> capability/capability2:
> 
> $ sesearch -A -c cap_userns | wc -l
> 102
> $ sesearch -A -c cap2_userns | wc -l
> 2
> $ sesearch -A -c capability | wc -l
> 1156
> $ sesearch -A -c capability2 | wc -l
> 148
> 
> Also, my hope would be that with cap_userns/cap2_userns, they can
> remove a number of capability/capabilty2 rules that should no longer be
> required for domains that only need capabilities within a non-init
> userns.
> 

-- 
Key fingerprint = 5F4D 3CDB D3F8 3652 FBD8  02D5 3B6C 5F1D 2C7B 6B02
https://sks-keyservers.net/pks/lookup?op=get&search=0x3B6C5F1D2C7B6B02
Dominick Grift

Attachment: signature.asc
Description: PGP signature


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

  Powered by Linux