Re: README in libselinux

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxx>
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@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux