Selinux based Process Classifier Code
Brought to you by:
shindepravin
| File | Date | Author | Commit |
|---|---|---|---|
| configuration | 2007-10-16 | shindepravin | [r10] revision-10 included |
| HACKING | 2007-10-16 | shindepravin | [r10] revision-10 included |
| INSTALL | 2007-10-16 | shindepravin | [r10] revision-10 included |
| Makefile | 2007-10-16 | shindepravin | [r10] revision-10 included |
| README | 2007-10-16 | shindepravin | [r10] revision-10 included |
| classification_enforcer.c | 2007-10-16 | shindepravin | [r10] revision-10 included |
| classifier.c | 2007-10-16 | shindepravin | [r10] revision-10 included |
| container_specifications.c | 2007-10-16 | shindepravin | [r10] revision-10 included |
| userspace_classifier.h | 2007-10-16 | shindepravin | [r10] revision-10 included |
| userspace_listener.c | 2007-10-16 | shindepravin | [r10] revision-10 included |
CPUSET :
CPUSETs are lightweight objects in the linux kernel that enable
users to partition their resources by creating resource groups.
A virtualization layer has been added so it becomes possible to split a
machine in terms of CPUs. The main motivation of this patch is to give
the linux kernel full administration capabilities concerning CPUs. To make
it possible, different CPUSETS are defined with different (or overlapping)
group of resource and each process is classfied to one of these CPUSET.
All processes belonging to one CPUSET class, will share all the resources
available with that CPUSET among each other. This way, we can create
different CPUSET's and classify the processes in them so that critical
processes will easily get needed resources.
=======================================================================
PROBLEM :
In order to classify the processes in these CPUSET's, one need to get
their PID's, and add it to perticular file in the directory indicating
the required CPUSET. Here, classification is not possible until
process is actually created. And if process restarts, then it should
be re-classified, as its PID will change. Simillarly, after every
reboot classification has to be re-done.
So, one need to do lot of, repetative and mannual classification of
processes if one wants to use CPUSET effectively.
======================================================================
SOLUTION :
If we can classify processes without using PID, and if classification
remains same even after process restarts or machine restarts then
we can automate most of the work.
Also classification should be very flexible. So that it can cover
all posibilities and scenarios.
=====================================================================
PCSS : (Process Classifier based on Selinux Security-contex)
PCSS uses SELinux security contexts to classify the processes. Security
contexts remain same even if process restarts or even machine restarts.
In addition, selinux security contexts are quite flexible.
PCSS is a userspace process classifier that groups all processes
based on their SElinux security-context. Whenever a new process
is created, the SElinux security_context will be associated with
it(SElinux module should be enable in your kernel).
Now, we can classify the porcess on the basis securtiy_context to
decide in which CPUSET this process should go. PCSS is entirely
implemented in userspace and requires no modification to kernel code.
That makes PCSS more easy to use.
=====================================================================
DETAILS
We are using Connector (A Linux Kernel feature) which reports process
events to userspace. It uses netlink mechanism and your kernel should
be build with it.
This kernel feature will report process events like fork and exec.
Whenever these events are reported, one userspace program named
"userspace_listener.c" will receive these events.
Now we can find out the security context of the process related
to the event from SELinux kernel module. We are using system call
"getpidcon" to get the security context from kernel.
This security context is then matched with the rules given by users
for the classification. These rules are very simple and are kept
seperately in one text file in following format.
<security_context> <name_of_cpuset_class_it_should_go>
If security context of current process matches to any security context
provided by user rules, then current process can be classified into
that class.
The classification is then enforced by requesting kernel to change
the cpuset of current process to new cpuset. This is done by means
of system calls.
KERNEL SPACE | USER SPACE
|
|
| --------------------- ******************
Process Events 1. NETLINK | Userspace Daemon |---------->* Configuration file *
connector -----------> | jobs manager |<----------* *
| -------------------- ******************
| 2.| ^ 4.|
| | | |
| | | |
********* | | | |
* SELinux * <-------------------- | |
********* | | |
3.| | | |
| | | |
---------------------------------- |
| |
| |
********* | |
* CPUSETfs* <----------------------------------
********* |
5.| |
| |
| |
V |
******************** |
* CPUSETs (Classified)* |
******************** |
|
=====================================================================
PCSS Scope
PCSS can be used in any system that requires Porcess grouping or
classification,like:
- CKRM ( resource management system )
: Integration had been done, but CKRM is outdated now.
- CPUSET ( resource management for multiprocessor system )
: This implementation is integration with CPUSET.
- ELSA ( accounting system )
: A patch has been created for integrated.
( Location : )
- Containers ( future of resource manangement systems )
: Looking forward to make this integration.
========================================================================
Why SELinux ?
We used SElinux security context for classification because :
1. They are persistant (i.e. they will remain same even after reboots)
2. They are flexible
(i.e. Security context will differ depending on who is executing,
which program is being executed, and in what context it has
been executed )
3. They are configurable
(i.e. you can change selinux policies to set selinux
contexts as per your needs. There are many user-friendly
tools which helps in giving security context i.e. "seedit")
4. We provide added flexibility by supporting wild-characters in
security context
=====================================================================
NOTE :
To enable PCSS for CPUSET in your system, you need to have support
for Connecors, SELinux and CPUSET built in your kernel.
By default, every new process gets parent SElinux
security_context and goes in the same CPUSET in which parent process
exist. Which is same is default behaviour of CPUSET.