All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Serge E. Hallyn" <serge@hallyn.com>
To: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: "Serge E. Hallyn" <serge@hallyn.com>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Masami Ichikawa <masami256@gmail.com>,
	containers@lists.linux-foundation.org, lkp@01.org,
	xiaolong.ye@intel.com, LKML <linux-kernel@vger.kernel.org>,
	Mimi Zohar <zohar@linux.vnet.ibm.com>
Subject: Re: [PATCH v4] Introduce v3 namespaced file capabilities
Date: Tue, 13 Jun 2017 18:55:21 -0500	[thread overview]
Message-ID: <20170613235521.GC15685@mail.hallyn.com> (raw)
In-Reply-To: <74e490f3-3c47-abfa-86ae-0fa0d1ddb43a@linux.vnet.ibm.com>

Quoting Stefan Berger (stefanb@linux.vnet.ibm.com):
> On 06/13/2017 01:18 PM, Serge E. Hallyn wrote:
> >Quoting Stefan Berger (stefanb@linux.vnet.ibm.com):
> >>On 05/08/2017 02:11 PM, Serge E. Hallyn wrote:
> >>>Root in a non-initial user ns cannot be trusted to write a traditional
> >>>security.capability xattr.  If it were allowed to do so, then any
> >>>unprivileged user on the host could map his own uid to root in a private
> >>>namespace, write the xattr, and execute the file with privilege on the
> >>>host.
> >>>
> >>>However supporting file capabilities in a user namespace is very
> >>>desirable.  Not doing so means that any programs designed to run with
> >>>limited privilege must continue to support other methods of gaining and
> >>>dropping privilege.  For instance a program installer must detect
> >>>whether file capabilities can be assigned, and assign them if so but set
> >>>setuid-root otherwise.  The program in turn must know how to drop
> >>>partial capabilities, and do so only if setuid-root.
> >>Hi Serge,
> >>
> >>
> >>   I have been looking at patch below primarily to learn how we could
> >>apply a similar technique to security.ima and security.evm for a
> >>namespaced IMA. From the paragraphs above I thought that you solved
> >>the problem of a shared filesystem where one now can write different
> >>security.capability xattrs by effectively supporting for example
> >>security.capability[uid=1000] and security.capability[uid=2000]
> >>written into the filesystem. Each would then become visible as
> >>security.capability if the userns mapping is set appropriately.
> >>However, this doesn't seem to be how it is implemented. There seems
> >>to be only a single such entry with uid appended to it and, if it
> >>was a shared filesystem, the first one to set this attribute blocks
> >>everyone else from writing the xattr. Is that how it works? Would
> >Yes, that's how this works here.  I'd considered allowing multiple
> >entries, but I didn't feel that was needed for this case.  In a previous
> >implementation (which is probably in the lkml archives somewhere) I
> >supported variable length xattr so that multiple containers could
> >each write a value tagged with their own userns.rootid.  Instead,
> >in the final version, if root in any parent container writes an
> >xattr, it will take effect in child user namespaces.  Which is
> >sensible - the parent presumbly laid out the filesystem to create
> >the child container.
> >
> >>that work differently with an overlay filesystem ? I think a similar
> >Certainly an overlay filesystem should be an easy case as the container
> >can have its own copy of the inode with its own xattr.  Btrfs/zfs
> >would be nicer as the whole file wouldn't need to be copied.
> >
> >>model could also work for IMA, but maybe you have some thoughts. The
> >>only thing I would be concerned about is blocking the parent
> >>container's root user from setting an xattr.
> >So if you have container c1 creating child container c2 on host h1,
> >then if c1 creates an xattr, can c2 not use that?  And if h1 writes it,
> >can c1 and c2 use it?
> 
> In the case of IMA appraisal the extended attribute security.ima
> would be a signature. For c1 and c2 to use that file they would all
> have to have the same key on their (isolated IMA namespace )
> keyring. I think this type of setup could be arranged.

Ok.  If it's too much of a restriction then certainly we can make
it more flexible.  I don't think we want to support too many versions
of magic in this code, so if there's a chance we'll want to make it
more flexible later, then perhaps we should discuss the other options
in more detail now.

> Following your attack description in the introduction I would say
> that we would want to prevent malicious modification of a
> security.ima extended attribute:
> 
> "Root in a non-initial user ns cannot be trusted to write a traditional security.ima xattr. If it were allowed to do so, then any unprivileged user on the host could map his own uid to root in a private namespace, write the signature in the security.ima xattr, and prevent the file from being accessible on the host."

Of course.

The way this is handled with nsfscaps is not by just forbidding the
write, but by only respecting the xattr if the rootid which was
written in the xattr (which is translated and enforced by the kernel
at write time) is root in the caller's user_ns or a parent thereof.

I think that would suffice for ima as well?

> >If they can't, then I guess for IMA multiple xattrs would need to be
> >supported.
> 
> I am not sure about that. I suppose any extended attribute
> modifications would have to be designed for the case where a shared
> filesystem is used that also shares the extended attributes, not
> assuming an overlay filesystem that automatically isolates the
> extend attributes. With the shared filesystem I'd like to prevent
> any type of setting of extended attributes by a child container or
> more generally anyone mounting it as a '2nd consumer', which would
> make it a shared filesystem. Only the process that mounts a
> filesystem as the '1st consumer' would be able to set the extended
> attributes.

Right, again that's currently the case in the nscaps patch.

>  I am assuming that using an overlay fs would always make
> you the '1st consumer' -- I would hope that these conditions could
> be detected. And probably the process should also write along its
> host uid as part of writing out the xattr.

I think that's what the rootid in the nscaps xattr is.

>  If all extended
> attributes were to support this model, maybe the 'uid' could be
> associated with the 'name' of the xattr rather than its 'value' (not
> sure whether that's possible).

Right, I missed that in your original email when I saw it this morning.
It's not what my patch does, but it's an interesting idea.  Do you have
a patch to that effect?  We might even be able to generalize that to
namespace any security.* xattrs.  Wouldn't be automatically enabled
for anything but ima and capabilities, but we could make the infrastructure
generic and re-usable.

  reply	other threads:[~2017-06-13 23:55 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-07  9:21 64fa03de33: BUG:Dentry_still_in_use kernel test robot
2017-05-07  9:21 ` kernel test robot
2017-05-07  9:21 ` kernel test robot
     [not found] ` <20170507092105.GA67584-aQzoWfPLU1itqXYlAKuG4QC/G2K4zDHf@public.gmane.org>
2017-05-08  4:44   ` Serge E. Hallyn
2017-05-08  4:44     ` Serge E. Hallyn
     [not found]     ` <20170508044408.GA11400-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-05-08 11:47       ` Masami Ichikawa
2017-05-08 11:47         ` Masami Ichikawa
2017-05-08 15:49         ` Serge E. Hallyn
     [not found]         ` <CACOXgS9a=avAWZEre1Q1CGjSHeq78Pkq1fYfwPjiyEX-u=B5wQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-08 15:49           ` Serge E. Hallyn
2017-05-08 18:11           ` [PATCH v4] Introduce v3 namespaced file capabilities Serge E. Hallyn
2017-05-08 18:11             ` Serge E. Hallyn
     [not found]             ` <20170508181156.GA23112-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-05-09 16:55               ` Eric W. Biederman
2017-05-09 16:55                 ` Eric W. Biederman
2017-05-09 16:55                 ` Eric W. Biederman
     [not found]                 ` <87a86mvuko.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-05-09 20:37                   ` Serge E. Hallyn
2017-05-09 20:37                     ` Serge E. Hallyn
     [not found]                     ` <20170509203736.GB14900-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-05-09 22:27                       ` Eric W. Biederman
2017-05-09 22:27                         ` Eric W. Biederman
2017-05-09 22:27                         ` Eric W. Biederman
2017-06-13 15:47               ` Stefan Berger
2017-06-13 15:47             ` Stefan Berger
2017-06-13 15:47               ` Stefan Berger
2017-06-13 17:14               ` Tycho Andersen
2017-06-13 17:42                 ` Stefan Berger
2017-06-13 17:42                   ` Stefan Berger
2017-06-13 17:42                   ` Stefan Berger
     [not found]                   ` <f7c51332-e405-f337-3938-ad93bab8f50d-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-13 20:51                     ` Tycho Andersen via Containers
2017-06-13 20:51                   ` Tycho Andersen
2017-06-13 17:45                 ` James Bottomley
2017-06-13 17:45                   ` James Bottomley
2017-06-13 17:45                   ` James Bottomley
2017-06-13 20:46                   ` Tycho Andersen
2017-06-13 20:49                     ` Stefan Berger
2017-06-13 20:49                     ` Stefan Berger
2017-06-13 20:49                       ` Stefan Berger
2017-06-13 20:53                       ` Tycho Andersen
2017-06-13 20:58                         ` Stefan Berger
2017-06-13 20:58                           ` Stefan Berger
2017-06-13 20:58                           ` Stefan Berger
2017-06-13 20:59                         ` Mimi Zohar
2017-06-13 20:59                           ` Mimi Zohar
     [not found]                           ` <1497387570.21594.427.camel-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-13 21:09                             ` Tycho Andersen via Containers
2017-06-13 21:09                               ` Tycho Andersen
2017-06-13 20:59                         ` Mimi Zohar
     [not found]                       ` <8933bf11-7ca2-fa12-8d51-46d94d94a182-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-13 20:53                         ` Tycho Andersen via Containers
     [not found]                   ` <1497375902.7379.25.camel-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk@public.gmane.org>
2017-06-13 20:46                     ` Tycho Andersen via Containers
2017-06-13 17:18               ` Serge E. Hallyn
2017-06-13 18:12                 ` Stefan Berger
2017-06-13 18:12                   ` Stefan Berger
2017-06-13 23:55                   ` Serge E. Hallyn [this message]
     [not found]                     ` <20170613235521.GC15685-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-06-14 12:27                       ` Stefan Berger
2017-06-14 12:27                         ` Stefan Berger
2017-06-14 12:27                         ` Stefan Berger
     [not found]                         ` <ce471b11-e76a-25f3-eae8-eca30e7233af-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-15  3:05                           ` Serge E. Hallyn
2017-06-15  3:05                             ` Serge E. Hallyn
2017-06-16  9:02                             ` Christian Brauner
     [not found]                             ` <20170615030543.GA8979-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-06-16  9:02                               ` Christian Brauner
2017-06-16 22:24                               ` Stefan Berger
2017-06-16 22:24                                 ` Stefan Berger
2017-06-16 22:24                                 ` Stefan Berger
2017-06-17 20:56                               ` Stefan Berger
2017-06-17 20:56                                 ` Stefan Berger
2017-06-17 20:56                                 ` Stefan Berger
     [not found]                                 ` <f0df1914-bca2-31a0-cdba-df30d85d70b3-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-18 22:14                                   ` Serge E. Hallyn
2017-06-18 22:14                                     ` Serge E. Hallyn
     [not found]                                     ` <20170618221418.GA364-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-06-19  1:13                                       ` Stefan Berger
2017-06-19  1:13                                         ` Stefan Berger
2017-06-19  1:13                                         ` Stefan Berger
     [not found]                                         ` <e9720595-2cdc-4dd7-57e7-95b85896d4ac-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-19 13:05                                           ` Stefan Berger
2017-06-19 13:05                                             ` Stefan Berger
2017-06-19 13:05                                             ` Stefan Berger
2017-06-20  6:23                                           ` Serge E. Hallyn
2017-06-20  6:23                                             ` Serge E. Hallyn
2017-06-19 21:34                                       ` Eric W. Biederman
2017-06-19 21:34                                         ` Eric W. Biederman
2017-06-19 21:34                                         ` Eric W. Biederman
2017-06-20  5:42                                         ` Amir Goldstein
     [not found]                                           ` <CAOQ4uxhi5fezF7e9FpS=hHUb1LqzyCNq9BcG14RV_Srj1hS-Vw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-06-20 12:19                                             ` Stefan Berger
2017-06-20 12:19                                               ` Stefan Berger
2017-06-20 12:19                                               ` Stefan Berger
     [not found]                                               ` <645d3a5e-4b76-cc90-50d6-4a7a7c3b678c-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-20 17:33                                                 ` Stefan Berger
2017-06-20 17:33                                                   ` Stefan Berger
2017-06-20 17:33                                                   ` Stefan Berger
     [not found]                                                   ` <87dfaf3b-f466-9831-1c76-32d4cabd8cf6-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-20 19:56                                                     ` Amir Goldstein
2017-06-20 19:56                                                       ` Amir Goldstein
2017-06-20 19:57                                             ` Vivek Goyal
2017-06-20 19:57                                           ` Vivek Goyal
2017-06-20 19:57                                             ` Vivek Goyal
     [not found]                                         ` <87tw3boe5d.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-06-20  5:42                                           ` Amir Goldstein
     [not found]                   ` <74e490f3-3c47-abfa-86ae-0fa0d1ddb43a-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-13 23:55                     ` Serge E. Hallyn
     [not found]                 ` <20170613171818.GA9070-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-06-13 18:12                   ` Stefan Berger
     [not found]               ` <9f80188c-df03-066a-5dac-785cc711d064-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-06-13 17:14                 ` Tycho Andersen via Containers
2017-06-13 17:18                 ` Serge E. Hallyn
2017-06-13 23:42                 ` Serge E. Hallyn
2017-06-13 23:42                   ` Serge E. Hallyn
     [not found]                   ` <20170613234214.GA15685-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2017-06-13 23:50                     ` Serge E. Hallyn
2017-06-13 23:50                       ` Serge E. Hallyn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170613235521.GC15685@mail.hallyn.com \
    --to=serge@hallyn.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@01.org \
    --cc=masami256@gmail.com \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=xiaolong.ye@intel.com \
    --cc=zohar@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.