// -*- mode:doc; -*-
// vim: set syntax=asciidoc:

[[selinux]]
=== Using SELinux in Buildroot

https://selinuxproject.org[SELinux] is a Linux kernel security module
enforcing access control policies. In addition to the traditional file
permissions and access control lists, +SELinux+ allows to write rules
for users or processes to access specific functions of resources
(files, sockets...).

_SELinux_ has three modes of operation:

* _Disabled_: the policy is not applied
* _Permissive_: the policy is applied, and non-authorized actions are
  simply logged. This mode is often used for troubleshooting SELinux
  issues.
* _Enforcing_: the policy is applied, and non-authorized actions are
  denied

In Buildroot the mode of operation is controlled by the
+BR2_PACKAGE_REFPOLICY_POLICY_STATE_*+ configuration options. The
Linux kernel also has various configuration options that affect how
+SELinux+ is enabled (see +security/selinux/Kconfig+ in the Linux
kernel sources).

By default in Buildroot the +SELinux+ policy is provided by the
upstream https://github.com/SELinuxProject/refpolicy[refpolicy]
project, enabled with +BR2_PACKAGE_REFPOLICY+.

[[enabling-selinux]]
==== Enabling SELinux support

To have proper support for +SELinux+ in a Buildroot generated system,
the following configuration options must be enabled:

* +BR2_PACKAGE_LIBSELINUX+
* +BR2_PACKAGE_REFPOLICY+

In addition, your filesystem image format must support extended
attributes.

[[selinux-policy-tweaking]]
==== SELinux policy tweaking

The +SELinux refpolicy+ contains modules that can be enabled or
disabled when being built. Each module provide a number of +SELinux+
rules. In Buildroot the non-base modules are disabled by default and
several ways to enable such modules are provided:

- Packages can enable a list of +SELinux+ modules within the +refpolicy+ using
  the +<packagename>_SELINUX_MODULES+ variable.
- Packages can provide additional +SELinux+ modules by putting them (.fc, .if
  and .te files) in +package/<packagename>/selinux/+.
- Extra +SELinux+ modules can be added in directories pointed by the
  +BR2_REFPOLICY_EXTRA_MODULES_DIRS+ configuration option.
- Additional modules in the +refpolicy+ can be enabled if listed in the
  +BR2_REFPOLICY_EXTRA_MODULES_DEPENDENCIES+ configuration option.

Buildroot also allows to completely override the +refpolicy+. This
allows to provide a full custom policy designed specifically for a
given system. When going this way, all of the above mechanisms are
disabled: no extra +SElinux+ module is added to the policy, and all
the available modules within the custom policy are enabled and built
into the final binary policy. The custom policy must be a fork of the
official https://github.com/SELinuxProject/refpolicy[refpolicy].

In order to fully override the +refpolicy+ the following configuration
variables have to be set:

- +BR2_PACKAGE_REFPOLICY_CUSTOM_GIT+
- +BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL+
- +BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION+
