In this lesson, you will learn how to navigate the complex behavior of systems running both SELinux and AppArmor simultaneously to prevent policy collisions.
Understanding Hybrid MAC Environments
While most Linux distributions favor either SELinux or AppArmor, specialized security environments occasionally require both to be active. Because both systems intercept kernel-level syscalls to enforce Mandatory Access Control (MAC), they act as two distinct "gatekeepers." If you attempt to run a process covered by both, the request must satisfy both security policies; if either denies the action, the kernel blocks it.
The Conflict Mechanism
The primary challenge in a hybrid setup is Policy Redundancy vs. Policy Divergence. For example, if your SELinux policy allows httpd to write to /var/www/html, but your AppArmor profile for the same process restricts access to that directory, the application will fail with a "Permission Denied" error despite the SELinux context appearing correct.
To resolve these conflicts, you must adopt a "Least Common Denominator" approach:
- Identify the Source of Denial: Always check both sets of logs simultaneously. Run
ausearch -m avc -ts recentfor SELinux violations anddmesg | grep apparmorfor AppArmor events. - Define Primary Domains: Assign one system as the "primary" enforcer for a specific process. If a service is strictly confined by an AppArmor profile, consider putting the corresponding SELinux domain into
permissivemode for that specific process to avoid double-logging and unnecessary conflict.
Example: Troubleshooting a Blocked Socket
If a process fails to bind to a port, check for overlapping constraints:
# Check SELinux status for the process
ps -efZ | grep my_service
# Check AppArmor status
cat /sys/kernel/security/apparmor/profiles | grep my_service
If both return results, you have a collision. To debug, move AppArmor to complain mode for that profile using aa-complain /etc/apparmor.d/my_service. If the service starts, the AppArmor profile was the source of the conflict. You must then update the profile to align with the SELinux labeling, or explicitly disable one MAC system for that specific process path to prevent "policy drift" where one system's logic evolves away from the other.
Key Takeaway: In hybrid systems, a process is bound by the strictest intersection of both policies; always audit both log streams when troubleshooting permission denials to ensure synchronization.