Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754414AbdFWQxw (ORCPT ); Fri, 23 Jun 2017 12:53:52 -0400 Received: from nm2-vm6.bullet.mail.ne1.yahoo.com ([98.138.91.254]:58425 "EHLO nm2-vm6.bullet.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753368AbdFWQxt (ORCPT ); Fri, 23 Jun 2017 12:53:49 -0400 X-Yahoo-Newman-Id: 582269.28206.bm@smtp111.mail.ne1.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: tEdvehkVM1lsNmhCPylQIxOvvdyKZfgQ_u9rCg9t_J4pk0x lqua539R.qbtc0swKfSNULYWKUs.Uyu1OHFgs9b0IL7W9z.zUhBpOl83rQJZ xaO_Zsxlf9CE5wRltVOtwnnonuEQGsV4V3nR_p5JDJiJSDZjLgqeBz4kQcCH gH_dozdhtdisxNI62PTPr1kwevbWC7VWBI.4nailyYHmqFdhm76z9GkAb3zn IKuJzg8E4PTkaPhfM4gWRNol8ConFihHFuSSRFok1xL9TJEmrtGnBAgXkFqX w_LmdnC0JsUdAe471USg4dmiVldf5jWKTnS79512ujQlZ8dZNA3y7qQqDxTt ejsSi4r5Ci1EaypALuB1TlNbpC0MOZjtT6DqLEjL1DcifT_Qr8zJT57E59Cm 8..ImBU3mWsFaBJZ8ib76fOXvhzOjMR2iYA3IGt9vAixZ01YcGMecyevi2XS K8P64Tsgh4M6YWVa85KNBYkDkcPHOR9ROsjoHozQFsBrEyHH.X33L6q8l8xg gu5JWHq0TDSS6TCmTADJslzZNheinQzBuSJ8v6o_7Yksxey_guLJKMizphD6 Gde5QiJyVVolkzm0- X-Yahoo-SMTP: OIJXglSswBDfgLtXluJ6wiAYv6_cnw-- Subject: Re: [PATCH 0/3] Enable namespaced file capabilities To: "Serge E. Hallyn" Cc: Amir Goldstein , Stefan Berger , "Eric W. Biederman" , Linux Containers , lkp@01.org, xiaolong.ye@intel.com, linux-kernel , Mimi Zohar , Tycho Andersen , James Bottomley , christian.brauner@mailbox.org, Vivek Goyal , LSM List References: <1498157989-11814-1-git-send-email-stefanb@linux.vnet.ibm.com> <20170623160026.GA18257@mail.hallyn.com> <20170623163030.GA18820@mail.hallyn.com> From: Casey Schaufler Message-ID: Date: Fri, 23 Jun 2017 09:53:43 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 In-Reply-To: <20170623163030.GA18820@mail.hallyn.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2984 Lines: 59 On 6/23/2017 9:30 AM, Serge E. Hallyn wrote: > Quoting Casey Schaufler (casey@schaufler-ca.com): >> On 6/23/2017 9:00 AM, Serge E. Hallyn wrote: >>> Quoting Amir Goldstein (amir73il@gmail.com): >>>> On Thu, Jun 22, 2017 at 9:59 PM, Stefan Berger >>>> wrote: >>>>> This series of patches primary goal is to enable file capabilities >>>>> in user namespaces without affecting the file capabilities that are >>>>> effective on the host. This is to prevent that any unprivileged user >>>>> on the host maps his own uid to root in a private namespace, writes >>>>> the xattr, and executes the file with privilege on the host. >>>>> >>>>> We achieve this goal by writing extended attributes with a different >>>>> name when a user namespace is used. If for example the root user >>>>> in a user namespace writes the security.capability xattr, the name >>>>> of the xattr that is actually written is encoded as >>>>> security.capability@uid=1000 for root mapped to uid 1000 on the host. >>>>> When listing the xattrs on the host, the existing security.capability >>>>> as well as the security.capability@uid=1000 will be shown. Inside the >>>>> namespace only 'security.capability', with the value of >>>>> security.capability@uid=1000, is visible. >>>>> >>>> Am I the only one who thinks that suffix is perhaps not the best grammar >>>> to use for this namespace? >>> You're the only one to have mentioned it so far. >>> >>>> xattrs are clearly namespaced by prefix, so it seems right to me to keep >>>> it that way - define a new special xattr namespace "ns" and only if that >>>> prefix exists, the @uid suffix will be parsed. >>>> This could be either ns.security.capability@uid=1000 or >>>> ns@uid=1000.security.capability. The latter seems more correct to me, >>>> because then we will be able to namespace any xattr without having to >>>> protect from "unprivileged xattr injection", i.e.: >>>> setfattr -n "user.whatever.foo@uid=0" >>> I like it for simplifying the parser code. One concern I have is that, >>> since ns.* is currently not gated, one could write ns.* on an older >>> kernel and then exploit it on a newer one. >> security.ns.capability@uid=1000, then? > That loses the advantage of simpler parsing though. (Really it's not much > of a simplification anyway.) So I'm not sure what advantage remains. > >> Or maybe just security.ns.capability, taking James' comment into account. > That last one may be suitable as an option, useful for his particular > (somewhat barbaric :) use case, but it's not ok for the general solution. security.ns@uid=100.capability It makes the namespace part explicit and separate from the rest of the attribute name. It also generalizes for other attributes. security.ns@uid=1000@smack=WestOfOne.SMACK64 > If uid 1000 was delegated the subuids 100000-199999, it should be able > to write a file capability for use by his subuids, but that file capability > must not apply to other subuids. > > -serge >