SELinux provides a flexible mandatory access
control (MAC) system built into the Linux
kernel. Under standard Linux discretionary access
control (DAC), an application or process
running as a user (UID or SUID) has the user's permissions to objects
such as files, sockets, and other processes. Running an SELinux MAC
kernel protects the system from malicious or flawed applications that
can damage or destroy the system. SELinux defines the access and
transition rights of every user, application, process, and file on the
system. SELinux then governs the interactions of these
subjects and objects
using a security policy that specifies how
strict or lenient a given Red Hat Enterprise Linux installation should be.
For the most part, SELinux is almost completely invisible to system users.
Only system administrators must worry about how strict a policy to
implement for their server environment. The policy can be as strict or
lenient as needed, and is very finely detailed. This detail gives the
SELinux kernel complete, granular control over the entire system.
When a subject such as an application attempts to access an object such
as a file, the policy enforcement server in the kernel checks an
access vector cache (AVC), where
subject and object permissions are cached. If a decision cannot be made
based on data in the AVC, the request continues to the security server,
which looks up the security context of the
application and the file in a matrix. Permission is then granted or
denied, with an avc: denied message
detailed in /var/log/messages. Subjects and
objects gain their security context from installed policy, which also
provides the information to populate the security server's matrix.
In addition to running in an enforcing mode,
SELinux can run in a permissive mode, where the AVC
is checked and denials are logged, but SELinux does not enforce the policy.
For more information about how SELinux works, refer to Section 21.3 Additional Resources.