All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joshua Brindle <method@manicmethod.com>
To: SE Linux <selinux@tycho.nsa.gov>
Cc: Stephen Smalley <sds@tycho.nsa.gov>,
	Karl MacMillan <kmacmillan@tresys.com>
Subject: Policy Access Control
Date: Wed, 21 Jan 2009 15:05:15 -0500	[thread overview]
Message-ID: <49777FFB.1030504@manicmethod.com> (raw)

We've released policy access control prototypes in the past but for 
several reasons they weren't suitable for upstream. This includes the 
invasiveness of the patches, performance issues and so on. So we've 
attempted to implement access control in a less invasive and better 
performing way.

This patch basically does policy access control syntactically. For 
example, rather than controlling what access vectors expand to, we 
control them syntactically, using attribute labeling for rules, and 
add_to_attrib and add_type to add a type to an attribute.

This version also uses KaiGai's bounded types to implement the type 
hierarchy, rather than the name based hierarchy from before.

This is an early patch release for comments and review. It doesn't apply 
to trunk yet because of the added module interfaces, it applies to 
commit ff08b104a9f4ece55831265db0e94edd16781f22. Please pardon the huge 
patch, we'll split it out when we submit this for merging. Rather than 
attaching it to this email I put it on oss at:
http://oss.tresys.com/files/policy-server/pac.diff

This should also not be considered for use in production as it lacks 
some vital object classes, such as file contexts. File context support 
can be implemented later when an fcglob implementation is available.

Currently the checking is disabled by default, you must add 
metapolicy-check = {permissive, enforcing, system} in 
/etc/selinux/semanage.conf to enable it.

This also doesn't use an external server as in past releases, rather it 
implements the access control directly in libsepol.

Below are descriptions of all metapolicy permissions. A policy consists 
of six policy components: permission classes, users, roles, types, 
attributes, and booleans. In terms of metapolicy enforcement attributes 
are distinct from types. These six components are labeled by the policy 
management server. Their representative types are then checked using 
normal allow rules. The permission for the check is based upon how the 
component is being utilized.

common policy
All policy components inherit from the policy permission class.

•	add - An add permission is checked for every policy component 
definition. A definition is any location where a component may be 
created. Statements within a module's require and optional blocks are 
considered declarations, not definitions, as they simply advertise the 
existence of a component but do not actually allocate entries within the 
policy's symbol tables.

•	remove - The remove permission is checked for all components that 
cease or potentially cease to exist in the final policy. These are 
invoked when a policy module removal is requested.

class policy.class inherits policy
As the policy server currently relies on the kernel for access 
decisions, policies may neither add nor remove classes, nor may they add 
permissions to existing classes.

•	add_rule - The add_rule permission is checked against the class 
specified in type  and AV rules.

•	remove_rule - remove an AV or type rule with the object class


class policy.user inherits policy
The class policy.user governs permissions associated with adding and 
removing users from a policy. Since users may be authorized for multiple 
roles there is no atomic "modify" permission. To effect a modify, the 
new role should be added and the old one removed. Be aware that granting 
add but not add_role permission effectively creates a user with no login 
permission.

•	add_role - The add_role permission is checked each time a role is 
added to a user's authorized list.

•	add_seuser - The add_seuser permission is checked each time an seuser 
is added that maps to the specified SELinux user. (Not currently 
implemented)

•	remove_role - invoked when a role is removed from the user's 
authorized list.

•	remove_seuser - invoked when an seuser is removed that previously 
mapped to the user. (Not currently implemented)


class policy.role inherits policy

•	add_rule - add_rule is checked against the source or target role in 
role allow statements and the destination role in role_transition 
statements.

•	remove_rule - remove a role allow or role_transition rule with the role

•	add_type - The add_type permission is checked whenever a new type is 
added to a role.

•	remove_type - invoked when a type is removed from the roles authorized 
list

•	add_to_user - invoked when this role is added to a user's role set

•	remove_from_user - invoked when this role is removed from a user's 
role set


class policy.type inherits policy
The class policy.type governs both the addition and removal of types but 
also their use within type and AV rules.

•	add_rule - permission to add an AV or type rule with this type in it 
(as the source, target or default)

•	remove_rule - permission to remove an AV or type rule with this type 
in it (as the source, target or default)

•	add_to_role - add this type to the set of types a role is authorized 
to use

•	remove_from_role - remove this type from the set of authorized types 
for a role

•	add_to_attrib - add this type to an attribute

•	remove_from_attrib - remove this type from an attribute


class policy.attribute inherits policy
The metapolicy treats attributes differently from types even though they 
share the same namespace. Attributes have their own add and remove 
permissions which govern their creation and removal. Although they are 
just a grouping mechanism, it was deemed imperative that policies be 
able to limit the addition of attributes. For example, a malicious 
module might attempt to elevate its privileges by adding itself to 
privuser. Therefore there is a permission that controls how one may add 
types to existing attributes.

•	add_rule - add a type or AV rule with this attribute

•	remove_rule - remove an AV rule or type rule with this attribute in it

•	add_type - The add_type permission is checked whenever a type is being 
added to an attribute, either by declaring a new type and its attributes 
or appending to an existing attribute by way of typeattribute statements.

•	remove_type - The remove_type permission is checked whenever a type is 
removed from an attribute, when a module is removed.


class policy.bool inherits policy
Like users and roles, booleans are created and set using the same 
declaration. Booleans may not be further modified; thus they have no 
class-specific permissions.


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

             reply	other threads:[~2009-01-21 20:05 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-21 20:05 Joshua Brindle [this message]
     [not found] ` <20090318143856.3abf45ef@sparta.com>
2009-03-18 18:59   ` Policy Access Control Joshua Brindle

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=49777FFB.1030504@manicmethod.com \
    --to=method@manicmethod.com \
    --cc=kmacmillan@tresys.com \
    --cc=sds@tycho.nsa.gov \
    --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.