From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752578AbdGMQkb (ORCPT ); Thu, 13 Jul 2017 12:40:31 -0400 Received: from imap.thunk.org ([74.207.234.97]:46820 "EHLO imap.thunk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751337AbdGMQk3 (ORCPT ); Thu, 13 Jul 2017 12:40:29 -0400 Date: Thu, 13 Jul 2017 12:40:12 -0400 From: "Theodore Ts'o" To: "Eric W. Biederman" Cc: Stefan Berger , "Serge E. Hallyn" , containers@lists.linux-foundation.org, lkp@01.org, linux-kernel@vger.kernel.org, zohar@linux.vnet.ibm.com, tycho@docker.com, James.Bottomley@HansenPartnership.com, vgoyal@redhat.com, christian.brauner@mailbox.org, amir73il@gmail.com, linux-security-module@vger.kernel.org, casey@schaufler-ca.com Subject: Re: [PATCH v2] xattr: Enable security.capability in user namespaces Message-ID: <20170713164012.brj2flnkaaks2oci@thunk.org> Mail-Followup-To: Theodore Ts'o , "Eric W. Biederman" , Stefan Berger , "Serge E. Hallyn" , containers@lists.linux-foundation.org, lkp@01.org, linux-kernel@vger.kernel.org, zohar@linux.vnet.ibm.com, tycho@docker.com, James.Bottomley@HansenPartnership.com, vgoyal@redhat.com, christian.brauner@mailbox.org, amir73il@gmail.com, linux-security-module@vger.kernel.org, casey@schaufler-ca.com References: <1499785511-17192-1-git-send-email-stefanb@linux.vnet.ibm.com> <1499785511-17192-2-git-send-email-stefanb@linux.vnet.ibm.com> <87mv89iy7q.fsf@xmission.com> <20170712170346.GA17974@mail.hallyn.com> <877ezdgsey.fsf@xmission.com> <74664cc8-bc3e-75d6-5892-f8934404349f@linux.vnet.ibm.com> <20170713011554.xwmrgkzfwnibvgcu@thunk.org> <87y3rscz9j.fsf@xmission.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87y3rscz9j.fsf@xmission.com> User-Agent: NeoMutt/20170306 (1.8.0) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 13, 2017 at 07:11:36AM -0500, Eric W. Biederman wrote: > The concise summary: > > Today we have the xattr security.capable that holds a set of > capabilities that an application gains when executed. AKA setuid root exec > without actually being setuid root. > > User namespaces have the concept of capabilities that are not global but > are limited to their user namespace. We do not currently have > filesystem support for this concept. So correct me if I am wrong; in general, there will only be one variant of the form: security.foo@uid=15000 It's not like there will be: security.foo@uid=1000 security.foo@uid=2000 Except.... if you have an Distribution root directory which is shared by many containers, you would need to put the xattrs in the overlay inodes. Worse, each time you launch a new container, with a new subuid allocation, you will have to iterate over all files with capabilities and do a copy-up operations on the xattrs in overlayfs. So that's actually a bit of a disaster. So for distribution overlays, you will need to do things a different way, which is to map the distro subdirectory so you know that the capability with the global uid 0 should be used for the container "root" uid, right? So this hack of using security.foo@uid=1000 is *only* useful when the subcontainer root wants to create the privileged executable. You still have to do things the other way. So can we make perhaps the assertion that *either*: security.foo exists, *or* security.foo@uid=BAR exists, but never both? And there BAR is exclusive to only one instances? Otherwise, I suspect that the architecture is going to turn around and bite us in the *ss eventually, because someone will want to do something crazy and the solution will not be scalable. -Ted From mboxrd@z Thu Jan 1 00:00:00 1970 From: tytso@mit.edu (Theodore Ts'o) Date: Thu, 13 Jul 2017 12:40:12 -0400 Subject: [PATCH v2] xattr: Enable security.capability in user namespaces In-Reply-To: <87y3rscz9j.fsf@xmission.com> References: <1499785511-17192-1-git-send-email-stefanb@linux.vnet.ibm.com> <1499785511-17192-2-git-send-email-stefanb@linux.vnet.ibm.com> <87mv89iy7q.fsf@xmission.com> <20170712170346.GA17974@mail.hallyn.com> <877ezdgsey.fsf@xmission.com> <74664cc8-bc3e-75d6-5892-f8934404349f@linux.vnet.ibm.com> <20170713011554.xwmrgkzfwnibvgcu@thunk.org> <87y3rscz9j.fsf@xmission.com> Message-ID: <20170713164012.brj2flnkaaks2oci@thunk.org> To: linux-security-module@vger.kernel.org List-Id: linux-security-module.vger.kernel.org On Thu, Jul 13, 2017 at 07:11:36AM -0500, Eric W. Biederman wrote: > The concise summary: > > Today we have the xattr security.capable that holds a set of > capabilities that an application gains when executed. AKA setuid root exec > without actually being setuid root. > > User namespaces have the concept of capabilities that are not global but > are limited to their user namespace. We do not currently have > filesystem support for this concept. So correct me if I am wrong; in general, there will only be one variant of the form: security.foo at uid=15000 It's not like there will be: security.foo at uid=1000 security.foo at uid=2000 Except.... if you have an Distribution root directory which is shared by many containers, you would need to put the xattrs in the overlay inodes. Worse, each time you launch a new container, with a new subuid allocation, you will have to iterate over all files with capabilities and do a copy-up operations on the xattrs in overlayfs. So that's actually a bit of a disaster. So for distribution overlays, you will need to do things a different way, which is to map the distro subdirectory so you know that the capability with the global uid 0 should be used for the container "root" uid, right? So this hack of using security.foo at uid=1000 is *only* useful when the subcontainer root wants to create the privileged executable. You still have to do things the other way. So can we make perhaps the assertion that *either*: security.foo exists, *or* security.foo at uid=BAR exists, but never both? And there BAR is exclusive to only one instances? Otherwise, I suspect that the architecture is going to turn around and bite us in the *ss eventually, because someone will want to do something crazy and the solution will not be scalable. -Ted -- To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============2715026894764694489==" MIME-Version: 1.0 From: Theodore Ts'o To: lkp@lists.01.org Subject: Re: [PATCH v2] xattr: Enable security.capability in user namespaces Date: Thu, 13 Jul 2017 12:40:12 -0400 Message-ID: <20170713164012.brj2flnkaaks2oci@thunk.org> In-Reply-To: <87y3rscz9j.fsf@xmission.com> List-Id: --===============2715026894764694489== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On Thu, Jul 13, 2017 at 07:11:36AM -0500, Eric W. Biederman wrote: > The concise summary: > = > Today we have the xattr security.capable that holds a set of > capabilities that an application gains when executed. AKA setuid root ex= ec > without actually being setuid root. > = > User namespaces have the concept of capabilities that are not global but > are limited to their user namespace. We do not currently have > filesystem support for this concept. So correct me if I am wrong; in general, there will only be one variant of the form: security.foo(a)uid=3D15000 It's not like there will be: security.foo(a)uid=3D1000 security.foo(a)uid=3D2000 Except.... if you have an Distribution root directory which is shared by many containers, you would need to put the xattrs in the overlay inodes. Worse, each time you launch a new container, with a new subuid allocation, you will have to iterate over all files with capabilities and do a copy-up operations on the xattrs in overlayfs. So that's actually a bit of a disaster. So for distribution overlays, you will need to do things a different way, which is to map the distro subdirectory so you know that the capability with the global uid 0 should be used for the container "root" uid, right? So this hack of using security.foo(a)uid=3D1000 is *only* useful when the subcontainer root wants to create the privileged executable. You still have to do things the other way. So can we make perhaps the assertion that *either*: security.foo exists, *or* security.foo(a)uid=3DBAR exists, but never both? And there BAR is exclusive to only one instances? Otherwise, I suspect that the architecture is going to turn around and bite us in the *ss eventually, because someone will want to do something crazy and the solution will not be scalable. -Ted --===============2715026894764694489==--