From: ebiederm@xmission.com (Eric W. Biederman)
To: Casey Schaufler <casey@schaufler-ca.com>
Cc: Vivek Goyal <vgoyal@redhat.com>,
linux-kernel@vger.kernel.org,
linux-security-module@vger.kernel.org, zohar@linux.vnet.ibm.com,
dmitry.kasatkin@intel.com, akpm@linux-foundation.org,
"Serge E. Hallyn" <serge@hallyn.com>
Subject: Re: [PATCH 3/4] capability: Create a new capability CAP_SIGNED
Date: Mon, 18 Mar 2013 15:32:02 -0700 [thread overview]
Message-ID: <8738vs7319.fsf@xmission.com> (raw)
In-Reply-To: <514768AF.4010504@schaufler-ca.com> (Casey Schaufler's message of "Mon, 18 Mar 2013 12:19:11 -0700")
Adding Serge as he is the sometimes capabilities maintainer to this
discussion.
Casey Schaufler <casey@schaufler-ca.com> writes:
> On 3/18/2013 11:30 AM, Vivek Goyal wrote:
>> On Mon, Mar 18, 2013 at 10:50:21AM -0700, Casey Schaufler wrote:
>>> On 3/18/2013 10:05 AM, Vivek Goyal wrote:
>>>> On Fri, Mar 15, 2013 at 02:12:59PM -0700, Casey Schaufler wrote:
>>>>> On 3/15/2013 1:35 PM, Vivek Goyal wrote:
>>>>>> Create a new capability CAP_SIGNED which can be given to signed executables.
>>>>> This would drive anyone who is trying to use
>>>>> capabilities as the privilege mechanism it is
>>>>> intended to be absolutely crazy.
>>>> Will calling it CAP_SIGNED_SERVICES help. I intend to use it as
>>>> capability (and not just as a flag for task attribute).
>>> No, the name is not the issue.
>>>
>>>> I think primary difference here is that this capability is controlled
>>>> by kernel and only validly signed processes get it.
>>> Applications are allowed to manipulate their capability sets
>>> in well defined ways. The behavior of file based capabilities
>>> is also explicitly defined. The behavior you are proposing would
>>> violate both of these mechanisms.
>>>
>>>>> Capabilities aren't just random attribute bits. They
>>>>> indicate that a task has permission to violate a
>>>>> system policy (e.g. change the mode bits of a file
>>>>> the user doesn't own). Think about how this will
>>>>> interact with programs using file based capabilities.
>>>> It is a separate capability. I am not sure why it would
>>>> interfere with other capabilities or functionality out there.
>>> The behavior of capabilities is uniform. You can't have one
>>> capability that behaves differently from the others. If a
>>> file is unsigned but has CAP_SIGNED in the file capability
>>> set what do you expect to happen? Do you want a signed
>>> application to be able to drop and raise the fact that it
>>> is signed?
>> I have already removed this capability from bounding set. Behavior
>> I am looking for is that nobody should be able to set CAP_SIGNED
>> as file capability. I will look into that.
>
> No! You are not listening. All capabilities work the same way.
> If the file capabilities say ALL that means ALL. You do not get
> to put a hole in the middle of the file based capabilities.
>
>
>> I am thinking of this more as kernel managed capability. It is
>> not in bounding set of any process and it can not be set as file
>> capability.
>
> I heard that. No, you don't get to do that. All capabilities
> work the same way. Your attribute does not behave the way
> capabilities do, so you have to implement it some other way.
>
>
>> It is a new capability, so no existing user application should
>> be trying to set it.
>
> There are (and will be) applications that raise and drop all
> capabilities, and that do so for good reasons.
>
>> I think the only surprise would be that they can't drop it. If
>> that's a concern, may be we can allow dropping the capability.
>> But the side affect is that there is no way to gain it back for
>> the life time of process.
>
> Right. And that is a change to the capability mechanism. No, you
> don't get to do that.
>
> You don't want a new capability. You want a new attribute that
> behaves differently than capabilities do. You need to come up
> with a different way to implement your attribute. You do not get
> to change the way capabilities work.
>
>>> I expect that you don't want your attribute that indicates
>>> that the binary was signed to behave the same way that
>>> capabilities do. Like I said, capabilities are not just
>>> attribute bits. You need a different kind of process attribute
>>> to indicate that the binary was signed.
>> I think I need more than process attribute. One of the things
>> I am looking for is that signed processes run locked in memory
>> and nobody (i think no unsigned process) is able to do ptrace() on it.
>> Using the notion of capability might help here.
>
> There are already capabilities associated with ptrace. It would
> be simple to add a check for signatures in cap_ptrace_access_check.
>
>
>>> When (if ever) we have multiple LSM support you might consider
>>> doing this as a small LSM. Until then, you're going to need a
>>> different way to express the signature attribute.
>> I am not sure why you are viewing it as necessarily as attribute only.
>> I am thinking more in terms of that in certain situations, user space
>> processes can't perform certain operations (like kexec) untile and
>> unless process has the capability CAP_SIGNED_SERVICES. And this capability
>> is granted if upon exec() process signature are verified.
>
> Sigh. You need the process attribute to make the checks against. The
> process capability set, uids and groups are all examples of process
> attributes that exist today.
>
>> So yes it is little different from how capabilities are managed
>> currently. But is it very hard to extend the current capability definition
>> and include the fact that kernel can give additional capabilities to
>> processes based on some other factors.
>
> Yes. That is correct. That is why we have the LSM facility. The
> unfortunate fact is that you only get one LSM at a time today. I
> am working on fixing that, but there is still work to be done
> before it will be ready for upstream.
>
> If signed application controls are deemed sufficiently important
> and your implementation sound you should be able to get the signature
> attribute and the checks on that attribute into the base system.
Vivek the desired semantics for today for kexec is that you have an
application that is allowed CAP_SYS_BOOT in it's file capabilities.
In a context where root is not trusted with all capabilities by default
you want one or a couple of capabilities to only be possible when coming
from file capabilities. So that you can say. "I trust you oh great and
blessed executable do what you will."
I don't think those are contentious semantics.
Eric
next prev parent reply other threads:[~2013-03-18 22:32 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-15 20:35 [RFC PATCH 0/4] IMA: Export functions for file integrity verification Vivek Goyal
2013-03-15 20:35 ` [PATCH 1/4] integrity: Identify asymmetric digital signature using new type Vivek Goyal
2013-03-15 20:35 ` [PATCH 2/4] ima: export new IMA functions for signature verification Vivek Goyal
2013-03-15 20:35 ` [PATCH 3/4] capability: Create a new capability CAP_SIGNED Vivek Goyal
2013-03-15 21:12 ` Casey Schaufler
2013-03-18 17:05 ` Vivek Goyal
2013-03-18 17:50 ` Casey Schaufler
2013-03-18 18:30 ` Vivek Goyal
2013-03-18 19:19 ` Casey Schaufler
2013-03-18 22:32 ` Eric W. Biederman [this message]
2013-03-19 21:01 ` Serge E. Hallyn
2013-03-20 5:07 ` James Morris
2013-03-20 14:41 ` Vivek Goyal
2013-03-20 14:50 ` Matthew Garrett
2013-03-15 20:35 ` [PATCH 4/4] binfmt_elf: Elf executable signature verification Vivek Goyal
2013-03-18 20:23 ` Josh Boyer
2013-03-18 20:33 ` Vivek Goyal
2013-03-19 14:39 ` Mimi Zohar
2013-03-20 15:21 ` Vivek Goyal
2013-03-20 17:41 ` Mimi Zohar
2013-03-20 18:39 ` Vivek Goyal
2013-03-20 15:59 ` Vivek Goyal
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=8738vs7319.fsf@xmission.com \
--to=ebiederm@xmission.com \
--cc=akpm@linux-foundation.org \
--cc=casey@schaufler-ca.com \
--cc=dmitry.kasatkin@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=serge@hallyn.com \
--cc=vgoyal@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox