Configure SELinux on Linux to implement strict access control policies and enhance system security. SELinux enforces mandatory access control (MAC), limiting what processes and users can access, making it a powerful tool for hardening your Linux environment. Configuring SELinux on Linux can significantly improve the security of your system by ensuring that applications and users can only access the resources they’re permitted to access, preventing potential security breaches.

This guide will walk you through configuring SELinux, managing its policies, and troubleshooting common issues.
Prerequisites
Before configuring SELinux, ensure the following:
- Linux Distribution: SELinux is available on most major Linux distributions, such as CentOS, RHEL (Red Hat Enterprise Linux), Fedora, and some other derivatives. Ubuntu, by default, does not enable SELinux.
- Root Access: You will need root or sudo access to configure SELinux settings.
- Basic Knowledge of Linux: Familiarity with basic Linux commands and the terminal will be useful for managing SELinux configurations.
Once these prerequisites are in place, you’re ready to configure SELinux on your system.
Configure SELinux on Linux
Configure SELinux on Linux to enforce mandatory access control and strengthen system security. SELinux restricts unauthorized access by tightly controlling how processes interact with files, users, and other resources, helping protect your server from potential threats and vulnerabilities.
Step 1: Check SELinux Status
SELinux can be in one of three modes:
- Enforcing: SELinux policy is enforced. All access that is not explicitly allowed by the policy is denied.
- Permissive: SELinux policy is not enforced. Violations are only logged, but not denied.
- Disabled: SELinux is completely turned off.
- Check SELinux Status
To check the current status of SELinux on your system, run the following command:
sestatus
This will display information about SELinux’s current mode, the policy being used, and more. For example:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 31
Policy from config file: targeted
- View SELinux Mode
Alternatively, you can use this command to see the current mode:
getenforce
This will return one of the following:
Enforcing
Permissive
Disabled
Step 2: Change SELinux Mode
You may need to change SELinux’s mode depending on your server’s requirements.
- Set SELinux to Enforcing Mode
To set SELinux to enforcing mode (where it actively enforces access control policies), run:
sudo setenforce 1
- Set SELinux to Permissive Mode
To set SELinux to permissive mode (where it logs policy violations but does not block them), run:
sudo setenforce 0
- Make SELinux Mode Persistent
To ensure SELinux runs in a specific mode after a reboot, you need to edit the SELinux configuration file:
sudo nano /etc/selinux/config
Change the SELINUX
variable to one of the following:
- SELINUX=enforcing
- SELINUX=permissive
- SELINUX=disabled
Save and exit (CTRL + O
and CTRL + X
in nano
). Then, reboot your system for the changes to take effect:
sudo reboot
Step 3: Configure SELinux Policies
SELinux uses policies to define what is allowed and what is denied. You can manage and configure policies using SELinux modules and file contexts.
- Manage SELinux Modules
SELinux policies can be extended or modified by using SELinux modules. To list all currently loaded modules, run:
semodule -l
To add a new SELinux module (e.g., a custom policy for an application), you can use semodule
:
sudo semodule -i custom_module.pp
- Set SELinux Context for Files and Directories
SELinux uses contexts to define the permissions on files, directories, and processes. You can set the SELinux context on files and directories using the chcon
command:
sudo chcon -t httpd_sys_content_t /var/www/html
This sets the context for a directory to allow web server access.
- Restore Default SELinux Contexts
If you need to restore the default SELinux contexts for files, use the restorecon
command:
sudo restorecon -Rv /var/www/html
This will recursively restore the default SELinux contexts on the specified directory.
Step 4: Troubleshoot SELinux Issues
Sometimes, SELinux can cause applications or services to malfunction by blocking access that should be allowed. Here are a few methods to troubleshoot SELinux-related issues.
- View SELinux Audit Logs
SELinux logs violations to the audit log, which is usually located at /var/log/audit/audit.log
. To check for SELinux-related denials, use the ausearch
command:
sudo ausearch -m avc -ts recent
This will display the most recent SELinux-related audit logs.
- Check the
audit2allow
Tool
The audit2allow
tool can be used to generate custom SELinux policies to allow denied actions. After identifying an SELinux denial in the audit log, you can generate a custom policy to allow the action:
sudo ausearch -m avc -ts recent | audit2allow -M custom_policy
sudo semodule -i custom_policy.pp
This will create a new SELinux module to allow the action and apply it.
- Use SELinux Troubleshooter
If you’re using a system with a GUI, you can install and use SELinux Troubleshooter to diagnose and resolve SELinux-related issues.
To install it on Fedora or RHEL-based systems:
sudo yum install setroubleshoot
On Ubuntu/Debian:
sudo apt install setroubleshoot
Step 5: SELinux Tools and Commands
Here are some useful SELinux tools and commands to help you configure and manage SELinux:
- Check SELinux Status
To check if SELinux is enabled and running:
sestatus
- Set a Specific File Context
To set a custom file context:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"
- Check the SELinux Context of a File
To view the SELinux context of a file:
ls -Z /path/to/file
- Label a File with a Specific SELinux Context
To relabel a file or directory with the correct SELinux context:
sudo restorecon -v /path/to/file
Conclusion
In this guide, we’ve covered how to configure SELinux on Linux, from checking its status to setting the mode and configuring policies. SELinux is an essential tool for securing Linux systems by enforcing access control policies and preventing unauthorized access. By configuring SELinux correctly, you can greatly enhance the security of your system and ensure that applications and services are protected from malicious activity.
Remember, while SELinux can be complex to configure, it’s a powerful tool for system administrators to ensure robust security. If you encounter issues, use the troubleshooting techniques outlined in this guide to diagnose and fix problems.