SELinux and AppArmor: An Introductory Comparison


Dec 9, 2013 (3 years and 6 months ago)


SELinux and AppArmor: An Introductory Comparison

In another article, “Hardening Linux Systems in the Application Layer: Why It's Important”, I
explained the importance of hardening our Linux systems by reinforcing the security policy in the
application l
ayer too. As I said, SELinux is not the only available tool for this purpose. AppArmor is
another well known one, while FreeBSD users have TrustedBSD.

A Linux administrator, or even (why not?) a Linux home user, could ask which one is better. As always
n one asks a question like this, the answer is that it depends... Anyway, some clear guidelines are
given if you read the rest of this article.

First of all, a very short history and introduction. Regarding the version I refer to, I tried:


10.2 w
ith its default AppArmor




4, Fedora


6, Fedora

7, Fedora

8, CentOS

5.0 with their default SELinux


AppArmor was born as a commercial product. Developed by Immunix, only recently (January 2006) it
was made an ope
n source product by Novell. With AppArmor you can “immunize” applications (as the
name “Immunix” suggests), protecting them from vulnerabilities. Given any program (executable,
commands script, daemon...), one can decide to protect it with AppArmor, then
she/he creates a

associated to such application, where all that the application can do will be explicitly listed (and what is
not in the list cannot be done).

AppArmor is shipped by default with Suse Linux (OpenSUSE, Enterprise...) and is comfortab
supported by Yast, the GUI system configuration tool, but you can use it with other distributions too.

Suppose you want to reinforce your security policy immunizing a program X. What you usually will do


Look inside the directory
, where you could find a profile already
written for your specific program X (a number of profiles are given by default for common


If there is a profile for X, copy it in the folder


If there is not such a ready profile
, begin creating one, even an empty one, as you can iteratively
try it and add privileges any time you need them. At the end of the “learning procedure” the
profile will allow all operations users need to do (eventually, if you missed some, you can add
er privileges after the users' complaints), and no more: principle of the least privilege!

Very easy in principle and user friendly, even if some technical complications can take place, of course,
above all if the applications to be protected are complex.

The security policy is reinforced immunizing
applications one by one.

In figure

1 you see the AppArmor main configuration window in Yast.

Figure 1

r with


SELinux has older origins, starting from operati
ng systems security research in the 1980s, mainly by
the National Security Agency (NSA), even if the first SELinux release was in December 2000. The
leading company in integrating SELinux in its Linux distribution is Red Hat.

If you have SELinux enabled in

your system, many objects have supplementary labels meant for
SELinux access control. The access control is based on the
security context
, associated to an object,
which is made of three basic elements (

) plus other attributes (levels,
Just try some commands on the shell, such as

Z, ps

Z and id

, and see the corresponding

pages. Even man pages for common Unix commands are integrated with SELinux related options.
SELinux has completely permeated your system becau
se it is meant to include the whole system, not to
be partial, limited as AppArmor.

The process of creating a specific policy retailed for a user's program is vaguely similar to that of
AppArmor, but it can soon become complicated, at least if what you wan
t to do is out of the limited
standard options; if you want to to something personalized, retailed for your specific needs, there are
some tools to do it but more than one more article is needed to explain how (and only for relatively
simple cases).

For th
e most common cases, you simply set some options, such those you can see in figure


Figure 2

Some options in SELinux Administration (Fedora


What they have in common

These two software products, very helpful in allowing the administrator to reinf
orce the security policy,
have lot of features in common, that is, mainly:

They are both focused on access control, reinforcing the standard Linux access control policy.

They both produce logs and give instruments for audit activity.

They work inside the
application layer.

Technically, they use LSM (“Linux Security Module”) to interact with the Linux Kernel.

They allow the administrator to work with GUI and not GUI tools.

They allow the administrator to try policies without really blocking accesses (just a
lerting about the
policy violations), in order to apply the security reinforcing policy only after a satisfactory number
of tests.

A comparison

Now a short list of differences and a comparison. The first consideration is:

If you use a Red

like distri
bution (Red

Hat, Fedora, CentOS, etc.), the most natural thing is to
use SELinux, available by default.

If you use a Suse
like distribution, the most natural choice is to use AppArmor, available by default.

If you use another distribution (Ubuntu for insta
nce), you can generally install both SELinux and
AppArmor, just you are a bit less comfortable.

“The most natural thing” means that you have the application and at least some related tools available
by default, without the problems of searching through th
e online packages, of versions compatibility, of
availability or not of certain related tools, etc. You immediately have GUI and non
GUI tools that make
your job easy (or at least represent an “effort” to make it easy).

The second aspect to be considered
is the completeness and the level of security offered by this two
open source products. Here there is no doubt: SELinux is surely a more complete and ambitious
security tool than AppArmor. SELinux is a wide universe, it permeates everything, it potentially

every object in the system and conceptually elevates the system to a more sophisticated security
infrastructure, it allows you to implement all main security paradigms in access control theory; even
military and government organizations can use it
for their strict security needs.

With SELinux it is possible to implement MAC (“Mandatory Access Control”), MLS (“Multi
Security”, with Bell

Padula and Biba models), MCS (“Multi
Category Security”), RBAC (“Role
Based Access Control”), TE (“Type En
forcement”). Besides, SELinux is based on the default deny
principle. AppArmor, on the other hand, simply lets you define what a single application can and
cannot do, according to the principle of least privilege but without the implementation of complete
security paradigms like those mentioned. AppArmor has a default deny approach to the single
immunized application but a default permit approach to the rest of the system, that is: once you decide
an application is protected by AppArmor, the default deny pr
inciple applies to it, while anything that is
not immunized is simply not considered by AppArmor, following the default permit approach.

It can be that you're not inside a military organization, or simply that you're not interested in high level
security b
ut have low or medium level needs: in this case AppArmor can be enough.

The third aspect is the user friendliness and consequently the time required to master the tools (the so
called learning curve). Here AppArmor wins by large: you can become productive

using AppArmor
already in the first days you try to use it, there is nothing particularly complicated to be understood, no
particular theory to be studied except the technical guide to use the tools. The tools you can use to
administer AppArmor are all fr
om Suse/Novell, are well integrated, coherent, without the need of
installing various software from different sources and without version compatibility problems. Among
other things, Yast give you the possibility of easily configuring automatic incident re
ports which are
sent by email.

SELinux, on the contrary, is “famous” for not being easy to use. Being more complex, you have much
more to study just to understand what you are doing, what SELinux is. If you're not careful, you can
find yourself no more abl
e to login into the computer, just because you have unintentionally activated a
default deny policy that blocks a lot of things by default, or, less dramatically, you can discover that the
reason because you can't make you printer work is that SELinux prev
ented it from printing (acting on
the CUPS service)... If you plan to use SELinux, do exercise far from the production environment for a
learning period, even if the
Permissive Mode

is given with the purpose of letting you try policies before
actually appl
ying them. I found some difficulties in using some tools, the coherence of the versions of
the various components cannot be taken always for granted. SELinux developers are conscious of the
user friendliness problem and are making significant efforts to im
prove this aspect, so if you use a
recent version of you Linux distribution (for example Fedora 7 or 8, compared to previous
distributions) you immediately see enhancements of GUI tools in the security
related tasks and
particularly concerning SELinux. I t
ried CentOS 5.0 too and the GUI configurability (with the default
tools) of SELinux is inferior to that of Fedora, but the SELinux Troubleshooting tool works well and is
very useful.

Using GUI tools is useful at least during an initial learning period, the
n the administrator can work at
command line with production servers.

As the fourth aspect to be considered, let's talk about performance, that is the computational overhead,
the price you have to pay to have such an additional tool in order to reinforce
the security policy. Both
AppArmor and SELinux add control operations to the traditional Linux system, they add conditions to
those of the traditional system (like in a logical “AND”) and this is done by means of the LSM. I
personally didn't make specific
performance tests, but let's see what is declared about this aspect. In the
Novell AppArmor Administration Guide

it is said that AppArmor overhead is between 0% and 2%
while that of SELinux is be
tween 6% and 15%. So you deduce AppArmor has better performances, but
take this with caution, first of all because it is declared by Novell itself and not a third
organization, second because SELinux can take more time because it does more, it is a
more complete
instrument that does more things. Fedora Core 5 declares an overhead of about 7%
), again bigger than AppAr
mor's. In any case,
I have no reports of complaints about performance from system administrators keeping SELinux active.

Finally, fifth and last aspect for comparison I consider in this article is the availability of
documentation. SELinux available docum
entation is much more that that of AppArmor, even if not
particularly rich in absolute terms. First of all you have to consider that SELinux is more complex, so
there is more to write about it. With AppArmor you find, essentially, only Novell official
mentation, while SELinux appears as a more open and varied environment, with third party
articles and books, both from academic and business world.