SELinux

SELinux is a mandatory access control system which enables a more fine-grained mechanism where the security administrator defines what a user can do. Unlike the standard discretionary access control in place for Linux (where the end user can still decide for himself how his resources are accessed by others) a mandatory access control system is fully governed through a security policy. With SELinux, enforcement of the access controls is done by the Linux kernel, governed through a security policy that is loaded at start of the system.

Introduction

Linux has a well-known discretionary access control system, based on the permission mask set on resources and the ownership of the resource versus the run-time privileges of a process. Some additional security features are available as well, such as capabilities and extended ACLs, which allow administrators to fine-tune the secure state of their system. But even all those features still prove to be discretionary in their model.

A discretionary model means that the owner of a resource can still decide how the resource is shared on the system. A directory can be made world-writable by its owner, and from that point onwards all processes on the system can write to the directory. With a mandatory access control system, the access to resources is governed through a mandatory system that cannot be worked around from. With SELinux, this is the SELinux security subsystem running in the Linux kernel.

SELinux resources

A quick introduction to SELinux helps to have a high-level idea behind the SELinux security subsystem. It covers the difference between discretionary and mandatory access control, the labeled approach that SELinux takes and how it is integrated in the Linux operating system.

For more in-depth information, please refer to the following resources.

Learning SELinux

More than a dozen small tutorials that introduce you to SELinux and its Gentoo integration

October 30, 2014: Migrating policy module store

After upgrading to the 2.4 SELinux userspace, you will need to migrate the policy module store as follows:

root #/usr/libexec/selinux/semanage_migrate_store

Without it, updating SELinux configurations through the userspace might give a warning about not having a managed store:

root #setsebool -P allow_ptrace on

Cannot set persistent booleans without managed policy.

However, not migrating the store does not influence the operational working of the system (so if you forget to do it, you will not be locked out).

July 9, 2014: Workaround for segfault

If you get a segmentation fault when setfiles is called by portage, it might be caused by bug #516608. A fix is being implemented but will be too late for most users. A simple workaround is to perform the following: