Mengenal SELinux: Fungsi, Cara Kerja, dan Kenapa Penting untuk Keamanan Server

Apa Itu SELinux?

SELinux (Security-Enhanced Linux) adalah mekanisme keamanan berbasis Mandatory Access Control (MAC) yang berjalan langsung di level kernel Linux.

Berbeda dengan sistem permission biasa seperti chmod, SELinux memberikan lapisan keamanan tambahan yang mengatur siapa boleh mengakses apa, bahkan jika proses tersebut sudah memiliki hak akses sebagai root.

Singkatnya:

SELinux membatasi dampak ketika sistem sudah berhasil diretas.

Kenapa Permission Linux Biasa Tidak Cukup?

Secara default, Linux menggunakan model keamanan bernama DAC (Discretionary Access Control).

Contoh DAC:

chmod 600 file.txt
chown user:group file.txt

Masalahnya:

  • Jika sebuah service diretas, attacker bisa bergerak sesuai permission user tersebut.
  • Root bisa mengakses hampir semua hal.
  • Tidak ada pembatasan granular antar service.

Di sinilah SELinux berperan.

Bagaimana Cara Kerja SELinux?

SELinux bekerja dengan konsep:

  • Subject → Proses (contoh: httpd, nginx, mysql)
  • Object → File, port, socket, device
  • Type → Label keamanan
  • Policy → Aturan siapa boleh akses apa

Setiap file dan proses memiliki security context.

Contoh melihat context:

ls -Z

Format context:

user:role:type:level

Yang paling penting adalah bagian type.

Contoh Type yang Sering Ditemui

Berikut beberapa contoh type yang umum digunakan di server Linux:

  • httpd_t → Domain proses Apache/Web Server
  • httpd_sys_content_t → File yang boleh dibaca web server
  • mysqld_t → Domain proses MySQL/MariaDB
  • var_log_t → File log sistem
  • shadow_t → File sensitif seperti /etc/shadow
  • user_home_t → File di direktori home user

Contoh praktis:

Jika proses httpd_t mencoba membaca file dengan type httpd_sys_content_t, maka diizinkan.

Namun jika httpd_t mencoba membaca file dengan type shadow_t, maka akan ditolak dan muncul log:

avc: denied

Inilah inti dari Type Enforcement — akses ditentukan berdasarkan type, bukan hanya permission file biasa.

Contoh aturan sederhana:

  • httpd_t boleh membaca httpd_sys_content_t
  • httpd_t tidak boleh membaca shadow_t

Jika dilanggar, akan muncul:

avc: denied

Mode SELinux

Ada tiga mode utama:

  1. Enforcing → Aktif dan memblokir akses yang tidak sesuai policy
  2. Permissive → Hanya mencatat log tanpa memblokir
  3. Disabled → SELinux tidak aktif

Cek status:

getenforce

Ubah sementara:

setenforce 0  # permissive
setenforce 1  # enforcing

Fungsi Utama SELinux

Containment (Pembatasan Dampak)

Jika web server terkena exploit, attacker tetap terkunci dalam domain web server tersebut.

Isolasi Antar Service

Service tidak bisa sembarangan membaca file service lain.

Mencegah Privilege Escalation

Walaupun attacker mendapatkan akses tertentu, ia tetap dibatasi oleh policy SELinux.

Keamanan Container

SELinux sangat penting untuk isolasi container agar tidak bisa mengakses host atau container lain.

Digunakan di Android

Android menggunakan SELinux dalam mode enforcing untuk memastikan setiap aplikasi tetap berada dalam sandbox-nya.

Contoh Kasus Nyata

Misalnya Apache diarahkan ke folder baru tanpa context yang benar.

Apache akan gagal membaca file tersebut meskipun permission sudah 777.

Solusi:

restorecon -Rv /var/www/html

Artinya, SELinux lebih kuat daripada permission biasa.

Apakah SELinux Menggantikan Firewall atau Antivirus?

Tidak.

SELinux bukan firewall dan bukan antivirus.

Ia adalah sistem policy enforcement yang berjalan di kernel untuk mengontrol akses antar proses dan resource.

Kesimpulan

SELinux adalah lapisan keamanan tambahan yang sangat penting dalam sistem Linux modern.

Ia tidak mencegah sistem diretas sepenuhnya, tetapi membatasi kerusakan yang dapat terjadi jika sebuah service berhasil dieksploitasi.

Untuk server production, container environment, maupun sistem Android, SELinux menjadi komponen penting dalam strategi keamanan berlapis (defense in depth).