Skip to main content

SELinux

SELinux is a kernel-level security mechanism in Linux that provides policy-based access control (MAC). SELinux helps restrict processes and users from accessing only allowed resources, thus preventing system abuse even if the service is exposed to exploits.

Check SELinux Status​

Run the following command

sestatus

Here are the output results:

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

Or you can also use the following command which is simpler and immediately displays the status

getenforce

Example:

Enforcing

The following describes the output of SELinux:

  • Enforcing → Enable and block access against policy.

  • Permissive → Log only (not blocking).

  • Disabled → Inactive.

Changing SELinux Mode (Temporarily)​

info

These changes will disappear after a reboot.

Run the following command to change to Permissive mode

setenforce 0

Run the following command to change to Enforcing mode

setenforce 1

Change SELinux Mode (Permanent)​

Edit the following SELinux configuration file:

nano /etc/selinux/config

To disable SELinux please fill in the following parameters or change the existing parameters to:

/etc/selinux/config
SELINUX=disabled 	# Change to permissive or disabled if necessary
SELINUXTYPE=targeted

The value option in SELinux:

  • enforcing

  • permissive

  • disabled

The value option in SELinux:

  • targeted → Default, protects only certain services (Apache, SSH, etc).

  • mls → Multi-Level Security, kompleks, untuk sistem keamanan tinggi (jarang digunakan umum).

After changing SELinux please reboot the server:

reboot -h now

Check Logs on SELinux​

SELinux logs are stored in /var/log/audit.log. Use ausearch or sealert (if installed):

ausearch -m avc -ts recent

Or to analyze:

sealert -a /var/log/audit/audit.log

Can use tail as follows:

tail -f /var/log/audit/audit.log

Managing SELinux Booleans​

There is a case where when SELinux is active and we install Apache/HTTPD the daemon does not access folders outside its default directory. So if you want to allow Apache to access outside folders please run the following command:

chcon -Rt httpd_sys_content_t /var/www/custom-folder
setsebool -P httpd_read_user_content on

See all booleans:

getsebool -a

See specific boolean:

getsebool httpd_can_network_connect

Enable boolean. -P to be permanent after reboot:

setsebool -P httpd_can_network_connect on