All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eamon Walsh <ewalsh@tycho.nsa.gov>
To: Stephen Smalley <sds@tycho.nsa.gov>
Cc: KaiGai Kohei <kaigai@ak.jp.nec.com>,
	selinux@tycho.nsa.gov, sakaia@jp.fujitsu.com
Subject: Re: README in libselinux
Date: Thu, 30 Oct 2008 14:46:09 -0400	[thread overview]
Message-ID: <490A00F1.9040804@tycho.nsa.gov> (raw)
In-Reply-To: <1225377210.13709.12.camel@moss-spartans.epoch.ncsc.mil>

Stephen Smalley wrote:
> On Thu, 2008-10-30 at 13:16 +0900, KaiGai Kohei wrote:
>   
>> Hi,
>>
>> I got a question on the secure os users mailing-list in Japan.
>> He said that he is interested in sVirt patches but not good at the way
>> to apply the security policy of SELinux on userspace object manager, so
>> it makes him hesitate to comment for the patches.
>>
>> We know great manpages are provided yet, but a structured documentation
>> to implement SELinux aware userspace object managers is not well known.
>> It is not unclear whether it should be included within README, or not.
>>
>> However, an official guidance for developers should be considered.
>>
>> Any comment?
>>     
>
> The intent was that these papers would serve as such a reference,
> although they don't necessarily go into the level of detail an
> implementer might want and the interfaces have of course changed over
> time:
> http://www.nsa.gov/selinux/papers/gconf07-abs.cfm
> http://www.nsa.gov/selinux/papers/xorg07-abs.cfm
> http://www.nsa.gov/selinux/papers/radac07-abs.cfm
>
>   

I started work on such a paper last year but it fell by the wayside. 
Here's a summary of it:

How to Write a Userspace Object Manager

1. Decide what classes and permissions your object manager will be
enforcing control over.  These could already exist in policy, or if your
object manager provides its own service a new set of classes and
permissions will be needed.  This is a difficult step because trade-offs
can be made:  two "different" actions on an object could be represented
by different security classes for the two objects, different permissions
on the same object type, or different types on the same object with the
same permission.  Choose a set of object classses and permissions and be
prepared for changes as you go.

2. Figure out how your objects will be labeled.  Who are the subjects? 
What type transitions will be made to label each object?  Will some
objects be lableled directly (not through a type transition)?  Are some
objects lableled by name?  Will some objects be polyinstantiated?  Each
object needs to be labeled, so there either needs to be space inside the
object to store the label (via some opaque security field or user data
field) or the SELinux code will need to store and manage labels itself.

3. Hook the SELinux code into the object manager so that it will gain
control when:
  a) The program starts up, so the AVC can be initialized.  You'll need
to set selinux callbacks with selinux_set_callback(3), establish a
mapping from names to numbers for your security classes and permissions
with selinux_set_mapping(3), initialize the AVC with avc_open(3) and a
label handle with selabel_open(3) if you're using the file contexts or a
similar string-to-name mapping, look up the "unlabeled" context with
security_get_initial_context(3), and anything else that needs to be done
to get the userspace object manager set up and running.
  b)  Objects are created and destroyed, so the object can be labeled
properly.  There are compute_create() and compute_member() functions
that mirror the kernel interfaces and which work on both SID's --
avc_compute_create(3), avc_compute_member(3)  or security context
strings directly  -- security_compute_create(3),
security_compute_member(3).  A name lookup can be performed with
selabel_lookup(3).  SID's (security_id_t pointers) are reference counted
and need to be managed with sidput() and sidget() to prevent memory leaks.
  c) Security decisions are made, so the policy can be queried. 
avc_compute_create(3) and security_compute_av(3) are the key functions here.

4. Figure out how the SELinux code will be configured.  If you have a
mapping from names to contexts this can be either kept in a
configuration file or a new backend for it could be added to
libselinux.  There are various ancillary options such as permissive
mode, and handle_unknown behavior which can be configured in the
userspace AVC; this could be exposed to the user through conf file
options or command line parameters.



-- 
Eamon Walsh <ewalsh@tycho.nsa.gov>
National Security Agency


--
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:[~2008-10-30 18:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-30  4:16 README in libselinux KaiGai Kohei
2008-10-30 14:33 ` Stephen Smalley
2008-10-30 18:46   ` Eamon Walsh [this message]
2008-10-30 19:04     ` Eamon Walsh
2008-10-31  9:17       ` KaiGai Kohei

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=490A00F1.9040804@tycho.nsa.gov \
    --to=ewalsh@tycho.nsa.gov \
    --cc=kaigai@ak.jp.nec.com \
    --cc=sakaia@jp.fujitsu.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.