Apr 5, 2024 7 min read

How to Install SELinux on Debian 12

Install SELinux on Debian 12 with our step-by-step tutorial. SELinux is an advanced security module protecting against unauthorized access.

Install SELinux on Debian 12
Install SELinux on Debian 12
Table of Contents


Before we begin talking about how to install SELinux on Debian 12, let's briefly understand – What is SELinux?

SELinux, or Security-Enhanced Linux, is an advanced security module that protects computer systems against unauthorized access and potential threats. Developed by the National Security Agency (NSA), SELinux implements access control policies, restricting what applications and users can do on a system.

By enforcing mandatory access control, SELinux significantly reduces the risk of system breaches, data leaks, and malicious activities. This powerful security tool is widely used in various Linux distributions to fortify the protection of computer networks and maintain a secure computing environment.

In this tutorial, you will install SELinux on Debian 12. We will also address a few FAQs on how to install SELinux on Debian 12.

Advantages of SELinux

  1. Enhanced Security: SELinux provides strong mandatory access control to safeguard against unauthorized access and potential threats.
  2. Fine-Grained Control: It grants administrators precise control over application behaviors, allowing for detailed security policy implementation.
  3. Reduced Attack Surface: By confining applications to a limited set of resources, SELinux limits the damage that can be caused by a compromised process.
  4. Access Control Policies: SELinux enforces policies that dictate which actions applications and users are allowed to perform on a system.
  5. Compatibility: This security module is widely supported by various Linux distributions and can be seamlessly integrated into existing setups.

Deactivate AppArmor on Debian 12

Make sure that AppArmor, another security module, is not currently running on your Debian system before installing SELinux. Conflicts may arise if both security modules are used simultaneously.

Use the following command to see if AppArmor is installed and operational:

sudo systemctl status apparmor

You have to disable AppArmor if it's running in order to install SELinux. The command to disable AppArmor is as follows:

sudo systemctl disable apparmor --now

Make sure you follow through on this, or you may run into problems when utilizing SELinux.

Install SELinux on Debian 12

The next step entails installing the required SELinux packages and then turning on SELinux on your Debian computer.

Begin by following these steps:

  • Install policycoreutils: The necessary tools for handling SELinux policies are included in this package.
  • Install selinux-utils: This package provides a broader range of SELinux tools.
  • Install selinux-basics: This offers the fundamental SELinux framework.

Use the following command to install the required SELinux packages in order to start the process:

sudo apt install policycoreutils selinux-utils selinux-basics selinux-policy-default

To enable SELinux on your Debian system, run this command to download and install the necessary packages.

The next step is to enable SELinux after the packages have been installed. Use the following command, executed with root permissions, to do this:

sudo selinux-activate

Using SELinux security features is made easier with this command, which sets up your system to load SELinux during the boot process.

After completing these steps, restart your computer to apply the modifications and start SELinux in the preferred mode.

sudo reboot
When the system is rebooting, this could take some time.
Screenshot of Debian Linux rebooting with SELinux default policy relabeling in progress.

Install, activate, and set up SELinux in enforcing mode after the system has rebooted. Next, set up SELinux to suit your requirements.

Understanding the Modes of SELinux on Debian 12

Security-Enhanced Linux, or SELinux, provides a powerful mechanism for controlling access permissions and improving system security. Key to its operation are three different modes:

  • Enforcing Mode: This is how things are configured by default. In this mode, access is refused according to preset rules as SELinux aggressively enforces its security policies.
  • Permissive Mode: This mode does not actually enforce policy; instead, it logs any violations. It helps you test and troubleshoot your policies without interfering with normal operations.
  • Disabled Mode: By turning off SELinux, as the name implies, this mode makes sure that no policies are applied or logs are kept.

Modifying the SELinux Configuration File

The central hub of the SELinux configuration is the /etc/selinux/config file. In a text editor such as nano, the following command is used to open this file:

sudo nano /etc/selinux/config

You will need to modify the SELINUX line in this configuration file to match your preferred mode, such as:

Enforcing mode:


Permissive mode:


Disabled mode:


Applying the Configuration

The SELinux configuration modifications cannot be applied until the system is rebooted:

sudo reboot

Additional SELinux Configuration Options with Debian

SELinux provides a range of configuration options that can be customized to meet your needs. As an illustration:

  • SETLOCALDEFS: How locally defined file contexts are used is specified by this setting. The SELinux policy's default file contexts are what the system is instructed to use when this value is set to 0. Modify the SETLOCALDEFS line in the /etc/selinux/config file to prevent the use of locally defined file contexts.
  • SELINUXTYPE: The kind of policy to be applied is specified by this setting. "Targeted" policies are the most popular kind; they are designed to safeguard particular system services without having an impact on the system as a whole. Modify the SELINUXTYPE line in the /etc/selinux/config file to set the policy type to "targeted":

Configuring SELinux for a Web Server

Assume, for example, that you have a web server running on your Debian system and that you want to set up SELinux to accept both HTTP and HTTPS traffic. To do this, the SELinux policy is updated using the semanage command.

Installing the semanage utility should come first:

sudo apt install policycoreutils-python-utils

After that, execute the following commands to permit traffic over HTTP and HTTPS:

sudo semanage port -a -t http_port_t -p tcp 80
sudo semanage port -a -t http_port_t -p tcp 443

Your web server can now accept incoming connections on ports 80 (HTTP) and 443 (HTTPS) thanks to these commands that update the SELinux policy.
Your web server will be able to accept incoming connections on ports 80 (HTTP) and 443 (HTTPS) thanks to these commands that change the SELinux policy.

Additional security features of your system can be configured with the semanage command. For example, you could use the following command to grant a specific user access to a directory:

sudo semanage fcontext -a -t user_home_t "/home/myuser(/.*)?"

By altering the file context for the "/home/myuser" directory, this command grants access to the directory to "myuser." To learn more about its syntax and usage, please visit the semanage man page.

Finally, you can always use the following command to get the most recent version of your SELinux status:


It should now appear as follows:


SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             default
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

Recall that this is only an example and that your setup will determine how your output turns out.

Addressing Common SELinux Issues with Debian 12

Remember that your setup will determine the final quality of your output; this is just an example.

Restoring Default File Contexts

An error in file contexts is a common SELinux problem. If the file context is incorrect, SELinux will refuse access, which can cause various application problems. Use the restorecon command to return to the default file contexts. For example, to solve problems with the /var/www/html directory, run:

sudo restorecon -Rv /var/www/html

Temporarily Switching to Permissive Mode

You can temporarily test in permissive mode if you're not sure if SELinux is the cause of the problem. In order to enter permissive mode, run:

sudo setenforce 0

Check to see if the issue has been fixed by testing your application. Should it be, then SELinux policies are probably involved. Once testing is finished, don't forget to return to enforcing mode:

sudo setenforce 1

Reviewing SELinux Logs

Examining the SELinux logs is essential to determining the underlying cause of a SELinux problem. The main SELinux log file on Debian is located at /var/log/audit/audit.log. To see the most recent log entries, use the tail command:

sudo tail /var/log/audit/audit.log

Look for log entries that start with "denied" or "AVC" to find possible violations of SELinux policy.

Using Audit2allow to Create Custom Policy Modules

The audit2allow utility can examine the audit logs and produce a custom policy module to fix any problems you may have with SELinux policies. For instance, to develop a unique policy for a particular problem, carry out:

sudo grep 'denied' /var/log/audit/audit.log | audit2allow -M mycustommodule
sudo semodule -i mycustommodule.pp

Troubleshooting SELinux Booleans with Debian 12

You can enable and disable particular functionalities with SELinux Booleans. Use the getsebool -a command to get a list of all available Booleans and their current values if you come across something that might be related to a Boolean:

sudo getsebool -a

The setsebool command can be used to toggle the value of the associated Boolean after it has been identified. For example, run the following code to enable the httpd_can_network_connect Boolean:

sudo setsebool -P httpd_can_network_connect 1

Keep in mind that the change is persistent across reboots thanks to the -P flag.

FAQs to Install SELinux on Debian 12

Are there any prerequisites for installing SELinux on Debian 12? 

It is recommended to have a basic understanding of Linux administration and the Debian operating system before attempting to install SELinux.

What is the default SELinux policy on Debian 12? 

The default policy on Debian 12 is "targeted". This policy provides a granular level of control and is suitable for most systems.

Can I change SELinux policies on Debian 12? 

Yes, you can modify SELinux policies. However, it is recommended to exercise caution, as improper changes may compromise system security.

Can I install SELinux on an existing Debian 12 system?

Yes, you can install SELinux on an existing Debian 12 system. However, it is recommended to back up critical data and perform the installation on a test environment first.

Is it necessary to reboot after installing SELinux? 

Yes, a system reboot is necessary after installing SELinux to enable and fully activate it.

How do I enable SELinux on Debian 12? 

SELinux is enabled by default after installation on Debian 12. Further configuration can be done by editing the SELinux configuration files.

Can I disable SELinux on Debian 12? 

Yes, SELinux can be disabled by modifying the SELinux configuration file and setting the appropriate parameter.


We hope this tutorial helped you understand how to install SELinux on Debian 12.

If you have any queries, please leave a comment below, and we’ll be happy to respond to them for sure.

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to DevOps Blog - VegaStack.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.