AppArmor Linux Application Security Profiles Explained
AppArmor (Application Armor) is a Linux Security Module (LSM) that enhances system security by restricting the capabilities of individual programs through granular, path-based access profiles. This article explores how AppArmor operates within the Linux kernel, the architecture of its profile-based enforcement, its operational modes, and how it effectively isolates vulnerable services to prevent system-wide exploitation.
What is AppArmor?
AppArmor implements Mandatory Access Control (MAC) to supplement traditional Discretionary Access Control (DAC), which relies on standard file permissions (user, group, other). While standard Linux permissions allow any process running as a specific user to access everything that user owns, AppArmor confines individual executables to a strictly defined set of resources, regardless of the user running the process.
Path-Based Confinement
Unlike SELinux, which relies on complex inode labeling, AppArmor uses
path-based resolution. This means security rules are directly bound to
the executable's filesystem path (such as /usr/sbin/nginx
or /usr/bin/evince).
When an application attempts an operation—such as opening a file, binding a network socket, or executing a subprocess—the Linux kernel checks the request against the active AppArmor profile mapped to that program's binary path. If the specific action is not explicitly permitted in the profile, the kernel denies it.
Anatomy of an AppArmor Profile
AppArmor profiles are plain-text configuration files stored in
/etc/apparmor.d/. These files dictate exactly what an
application is permitted to do:
- File Access Permissions: Specifies paths an
application can access, along with access modes such as read
(
r), write (w), execute (x), append (a), memory map (m), and lock (k). Wildcards and regular expressions can be used to cover directories. - Network Rules: Dictates whether the application can create raw sockets, bind to TCP/UDP ports, or use specific network protocols.
- Linux Capabilities: Restricts POSIX capabilities,
preventing even root-owned processes from executing sensitive kernel
calls like
CAP_SYS_ADMIN,CAP_NET_ADMIN, orCAP_RAW_IOunless explicitly allowed.
Operational Modes: Enforce and Complain
AppArmor profiles function in one of two distinct modes:
- Enforce Mode: The security policy is strictly
applied. Any action not explicitly declared in the profile is blocked,
and an audit event is logged to the system logger (
auditdorjournald). This is the standard production mode. - Complain Mode: Policies are not strictly applied. Applications can violate the profile rules without being blocked, but every violation generates a security warning in the logs. This mode is used primarily for testing, debugging, and building new profiles without disrupting normal application behavior.
Profile Creation and Maintenance
AppArmor simplifies policy creation through utility tools such as
aa-genprof and aa-logprof.
When generating a profile, the administrator runs the application in complain mode while exercising its normal functions. The utility analyzes the audit logs, detects every resource the program attempts to access, and prompts the administrator to allow, deny, or glob the observed behaviors into a finalized profile.
Mitigation of Zero-Day Vulnerabilities
By confining applications to a principle of least privilege, AppArmor
mitigates the impact of software flaws. If a web server or daemon is
compromised via a remote code execution exploit, the attacker's shell
remains bound to the constraints of the daemon's AppArmor profile. The
attacker cannot read sensitive files like /etc/shadow,
write to arbitrary locations, or spawn unauthorized binaries,
neutralizing the threat before it escalates to full system
compromise.