From: Krzysztof Adamski <k@japko.eu>
To: "Michael Kerrisk (man-pages)"
<mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] execve.2: EPERM from filesystem capabilities.
Date: Thu, 10 Mar 2016 16:06:33 +0100 [thread overview]
Message-ID: <20160310150633.GG25658@box2.japko.eu> (raw)
In-Reply-To: <56E0C0C3.6040808-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
On Thu, Mar 10, 2016 at 01:33:07AM +0100, Michael Kerrisk (man-pages) wrote:
>Hello Krzysztof
>
>On 03/09/2016 09:15 PM, Krzysztof Adamski wrote:
>> On Wed, Mar 09, 2016 at 01:49:41AM +0100, Michael Kerrisk (man-pages) wrote:
>>> Hello Krzysztof
>>>
>>> Sorry for the delayed follow up.
>>>
>>> On 10/12/2015 09:45 PM, Krzysztof Adamski wrote:
>>>> An EPERM error can be returned when using filesystem capabilities and
>>>> capabilities to be added are not in permitted set.
>>>>
>>>> This error return values was introduced by this patch:
>>>> 5459c16 security: protect legacy applications from executing with
>>>> insufficient privilege
>>>
>>> Can you explain in more detail the scenario where EPERM can be produced.
>>> I can't see/produce it. Also, the code in the commit that you mention,
>>> which was part of Linux 2.6.27, was thoroughly changed in Linux 2.6.29.
>>
>> Hi Michael,
>> If you're interested in details, I explained it quite extensively here:
>> http://k.japko.eu/systemd-nspawn-ping-debug.html
>>
>> The summary is that I used nspawn from systemd which drops some
>> capabilites (CAP_NET_ADMIN is amoung them) when spawning a container.
>> Now, since I used Fedora in container, my ping binary had filesystem
>> capabilites set:
>>
>> # getcap /bin/ping
>> /bin/ping = cap_net_admin,cap_net_raw+ep
>>
>> So when executing this application, kernel tried to give me
>> CAP_NET_ADMIN capabilities but they where not on permitted set so I've
>> got EPERM.
>>
>> It was found in kernel 4.1 back then and I just retested this on kernel
>> 4.3. Unfortunately I don't have time now to verify this for the latest
>> kernel but I would be surprised if this feature was removed.
>>
>> Would you like me to extend/change the description in the patch somehow?
>
>Okay -- I got it at last. I think the explanation requires quite
>some detail. I added this to execve(2):
>
> EPERM A "capability-dumb" applications would not obtain the
> full set of permitted capabilities granted by the exe‐
> cutable file. See capabilities(7).
>
>And this to capabilities(7):
>
> Safety checking for capability-dumb binaries
> A capability-dumb binary is a legacy application that has been
> marked to have file capabilities, but has not been converted to
> use the libcap(3) API to manipulate its capabilities. (In
> other words, this is a traditional set-user-ID-root program
> that has been switched to use file capabilities, but whose code
> has not been modified to understand capabilities.) For such
> applications, the effective capability bit is set on the file,
> so that the file permitted capabilities are automatically
> enabled in the process effective set when executing the file.
> The kernel recognizes a file which has the effective capability
> bit set as capability-dumb for the purpose of the check
> described here.
>
> When executing a capability-dumb binary, the kernel checks if
> the process obtained all permitted capabilities that were spec‐
> ified in the file permitted set, after the capability transfor‐
> mations described above have been performed. (The typical rea‐
> son why this might not occur is that the capability bounding
> set masked out some of the capabilities in the file permitted
> set.) If the process did not obtain the full set of file per‐
> mitted capabilities, then execve(2) fails with the error EPERM.
> This prevents possible security risks that could arise when a
> capability-dumb application is executed with less privilege
> that it needs. Note that, by definition, the application could
> not itself recognize this problem, since it does not employ the
> libcap(3) API.
>
>Let me know if you see anything amiss.
This looks good to me. It is however a little confusing (in Linux) to
say that this is legacy mode since you could use libcap API long before
filesystem capabilities were actually implemented in the kernel :)
Best regards,
Krzysztof Adamski
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-03-10 15:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-12 19:45 [PATCH] execve.2: EPERM from filesystem capabilities Krzysztof Adamski
[not found] ` <20151012194506.GA6346-xLeyfSbClftGit24Ens98Q@public.gmane.org>
2016-03-09 0:49 ` Michael Kerrisk (man-pages)
[not found] ` <56DF7325.9030702-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-09 20:15 ` Krzysztof Adamski
[not found] ` <20160309201501.GE25658-xLeyfSbClftGit24Ens98Q@public.gmane.org>
2016-03-10 0:33 ` Michael Kerrisk (man-pages)
[not found] ` <56E0C0C3.6040808-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-10 15:06 ` Krzysztof Adamski [this message]
[not found] ` <20160310150633.GG25658-xLeyfSbClftGit24Ens98Q@public.gmane.org>
2016-03-10 17:07 ` Michael Kerrisk (man-pages)
2016-04-05 3:25 ` Mike Frysinger
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=20160310150633.GG25658@box2.japko.eu \
--to=k@japko.eu \
--cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/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;
as well as URLs for NNTP newsgroup(s).