From: Dominick Grift <dac.override@gmail.com>
To: selinux@tycho.nsa.gov
Subject: Re: Policy capabilities: when to use and complications with using
Date: Wed, 3 May 2017 18:51:37 +0200 [thread overview]
Message-ID: <20170503165137.GA15940@julius> (raw)
In-Reply-To: <1493828056.15269.9.camel@tycho.nsa.gov>
[-- Attachment #1: Type: text/plain, Size: 6069 bytes --]
On Wed, May 03, 2017 at 12:14:16PM -0400, Stephen Smalley wrote:
> Looking at adding a map permission for mmap [1], and thinking about
> whether it needs to be wrapped by a policy capability. On the one
> hand, we made the open permission depend on a policy capability, but on
> the other hand, we haven't done that for other cases where we simply
> added a check of a new permission (recent examples include prlimit
> checking and module_load). Compatibility for new permission checks is
> generally covered in Linux distributions via handle_unknown=allow, and
> in Android where handle_unknown=deny, the kernel and policy are not
> independently updated so we can keep them properly synchronized without
> needing such compatibility measures.
>
> It seems like we generally reserve the use of policy capabilities for
> when there is a more fundamental change in logic that wouldn't be
> covered by handle_unknown. All of the current policy capabilities
> except for open_perms seem to fit into that category; they change what
> permissions/classes are checked rather than merely adding a new check,
> or they change when checks are applied, or they alter labeling
> behavior. Even if that is our standard, we haven't consistently
> defined new policy capabilities for all such changes, e.g. for
> distinguishing non-init user namespace capability checks (commit
> 8e4ff6f228e4722cac74db716e308d1da33d744f) or for the earlier updating
> of netlink socket classes (commit
> 6c6d2e9bde1c1c87a7ead806f8f5e2181d41a652). Those changes don't break
> existing policies because of handle_unknown=allow, but since they are
> actually changing what is checked and not merely adding new checks,
> they technically ought to have been wrapped (with handle_unknown=allow,
> they could end up allowing what would have been previously denied due
> to changes in the classes).
>
> Part of the reason that we tend to not introduce a new policy
> capability more often is that it is painful to do so currently. We
> have to patch libsepol to recognize the new capability and patch the
> policy to declare it (although for the latter we can now declare them
> via a CIL module without modifying the base policy). And since the
> policy or module won't build without the updated libsepol, we can't
> turn on the capability by default in refpolicy without making it
> dependent on a new libsepol version. That's why extended_socket_class
> isn't yet enabled in refpolicy, for example. That causes enablement
> and adoption to lag behind. It also makes it harder to test the new
> kernel feature in the first place.
I would like to see Fedora package the RC's in Rawhide as well (other distributions could help by packaging the RC's in unstable as well). That would atleast make the RC's a bit more accessible.
In Fedora it is usually not the kernel that is the problem, it is user space that is generally to old. And as you've said policy is no longer a problem with CIL.
>
> We could possibly look into lighter weight support for policy
> capabilities. If the policy compiler toolchain left the capability
> names as strings in the kernel policy (new binary format version), then
> we would no longer need to update libsepol for each new policy
> capability. The kernel would then turn the list into the bitmap
> internally. The downside is that we would lose validation of the
> capability names when policy is built, and it isn't clear how the
> kernel should handle unknown names (presently the kernel will simply
> ignore any unknown capabilities in the bitmap). Failing at policy load
> time would mean we can't enable the capability in policy without making
> it depend on a particular kernel version.
>
> The lack of any direct relationship between policy capabilities and the
> classes/permissions they affect also can be misleading. For example,
> someone booting a recent kernel might see warnings about undefined
> classes introduced by the extended_socket_class feature and add those
> class definitions to their policy, which will silence the kernel
> warning and make them think that they are actually using those classes
> now. But they won't actually get used until they declare the
> capability too in their policy, and the kernel doesn't warn about that
> (nor does it necessarily make sense to do so, since that may be a
> conscious choice by the policy author). The kernel could however log
> each policy capability and its state as part of its normal logging and
> leave it up to the reader to decide whether those values are correct or
> not. We also had talked originally about checkpolicy and friends
> possibly warning on inconsistencies, while leaving it up to the policy
> author.
>
> So:
>
> 1) Should we investigate lighter weight support for policy
> capabilities, and if so, how?
>
> 2) Should the kernel log information about enabled/disabled policy
> capabilities in much the same manner as it does for undefined
> classes/permissions?
>
> 3) Should the policy compiler toolchain warn the user if a policy
> capability is not declared and classes/permissions are used in rules
> that will only be used if that policy capability is declared? And
> similarly if a policy capability is declared but the corresponding
> classes/permissions are not used in any rules?
>
> 4) Do we need/want a policy capability for map permission and other
> cases where we are only adding a new permission check? Or should we
> continue to reserve them for cases not addressed via handle_unknown?
Would the map permission "only add a new permission". The way i see it is that it will actually change the meaning of the "execute" existing permission
As a matter of fact: When we add map then what is execute for?
>
> [1] https://github.com/SELinuxProject/selinux-kernel/issues/13
--
Key fingerprint = 5F4D 3CDB D3F8 3652 FBD8 02D5 3B6C 5F1D 2C7B 6B02
https://sks-keyservers.net/pks/lookup?op=get&search=0x3B6C5F1D2C7B6B02
Dominick Grift
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
next prev parent reply other threads:[~2017-05-03 16:51 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-03 16:14 Policy capabilities: when to use and complications with using Stephen Smalley
2017-05-03 16:51 ` Dominick Grift [this message]
2017-05-03 17:23 ` Stephen Smalley
2017-05-04 15:50 ` Paul Moore
2017-05-04 17:42 ` Dominick Grift
2017-05-04 17:50 ` Dominick Grift
2017-05-04 19:22 ` Petr Lautrbach
2017-05-04 19:44 ` Dominick Grift
2017-05-09 18:03 ` Paul Moore
2017-05-03 19:35 ` James Carter
2017-05-04 12:18 ` Chris PeBenito
2017-05-04 16:07 ` Dominick Grift
2017-05-09 17:49 ` Paul Moore
2017-05-09 20:39 ` Stephen Smalley
2017-05-09 21:44 ` Paul Moore
2017-05-10 12:58 ` Stephen Smalley
2017-05-10 21:21 ` Paul Moore
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=20170503165137.GA15940@julius \
--to=dac.override@gmail.com \
--cc=selinux@tycho.nsa.gov \
/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.