Belajar SELinux - Mode, Status & Troubleshooting Dasar
Episode 3 of 23

Belajar SELinux - Mode, Status & Troubleshooting Dasar

Membedah tiga mode SELinux — enforcing, permissive, dan disabled — beserta cara berpindah antar mode secara aman lewat runtime, parameter kernel, dan konfigurasi /etc/selinux/config. Ditutup dengan praktik membaca log AVC untuk mendiagnosis denial menggunakan ausearch.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 2 kita membangun bahasa dasar SELinux: domain, type, security context, dan arsitektur. Sekarang saatnya mempraktikkannya di terminal. Episode ini akan membahas tiga mode SELinux, bagaimana berpindah antar mode dengan aman dan sadar konsekuensi, serta troubleshooting dasar — membaca dan mendiagnosis denial pertama kalian.

Ini episode yang paling sering menyelamatkan kalian di dunia nyata. Mayoritas pertanyaan "kenapa aplikasi saya tidak bisa baca file?" di server production, jawabannya ada di sini: mode yang salah atau denial yang tidak dibaca.

Tiga Mode SELinux

SELinux memiliki tiga mode yang menentukan bagaimana policy diperlakukan:

ModePerilakuLog AVC
EnforcingPolicy ditegakkan — akses terlarang diblokirDicatat
PermissivePolicy tidak ditegakkan — akses terlarang diizinkanDicatat
DisabledPolicy tidak dimuat — SELinux mati totalTidak dicatat

Cara termudah memahaminya: permissive itu rehearsal tanpa konsekuensi — sistem mencatat apa yang akan diblokir seandainya enforcing, tapi tetap membiarkan semuanya berjalan. Itulah mengapa permissive adalah alat debugging yang sangat berharga: kalian bisa melihat semua denial tanpa memutus akses aplikasi.

Di mode disabled, kernel sama sekali tidak memuat policy — seluruh fitur SELinux nonaktif. Perlu diingat: mode ini bukan "lebih santai daripada permissive", melainkan memutus seluruh perlindungan dan tidak bisa diubah tanpa reboot.

Warning

Jangan pernah menjadikan disabled sebagai solusi rutin. Menonaktifkan SELinux di server production menghapus seluruh lapisan MAC yang sudah kalian pelajari — dan beberapa aplikasi serta skrip kepatuhan justru mendeteksi ini dan menolak berjalan. Biarkan SELinux tetap enforcing; jika ada masalah, gunakan permissive hanya saat debugging.

Cara Berpindah Mode

Ada tiga mekanisme berpindah mode, dan kalian wajib paham perbedaannya — ini sering menjadi titik uji pemahaman.

Runtime: setenforce

setenforce mengubah mode tanpa reboot, tapi hanya berlaku sampai sistem di-restart:

Ubah mode runtime
sudo setenforce 0
sudo setenforce 1

setenforce 0 berpindah ke permissive, setenforce 1 kembali ke enforcing. Perintah ini juga menerima argumen Permissive dan Enforcing. Catatan penting: dari mode disabled, setenforce tidak bisa menyalakan SELinux — policy belum dimuat di kernel.

Parameter Kernel: enforcing=0

Mode bisa ditentukan saat boot lewat parameter kernel enforcing=0 (atau selinux=0 untuk menonaktifkan total). Mekanisme ini berguna untuk sistem yang tidak bisa boot karena policy yang bermasalah, misalnya lewat prompt GRUB. Efeknya bertahan sampai boot berikutnya.

Konfigurasi Permanen: /etc/selinux/config

Untuk mengubah mode secara permanen, edit file /etc/selinux/config:

Linux/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Baris SELINUX= menentukan mode default saat boot. Perhatikan: perubahan ke disabled hanya berlaku setelah reboot — begitu pula dari disabled kembali ke enforcing. Sedangkan perubahan ke atau dari permissive berlaku di runtime juga. Jadi kalau kalian mengubah ke permissive, mode langsung berubah tanpa restart.

Ringkasan cepat perbedaannya:

MekanismeBerlakuButuh RebootContoh
setenforce 0RuntimeTidakDebugging sementara
enforcing=0 (kernel param)BootYa (di boot berikutnya)Sistem tidak bisa boot
SELINUX=disabledPermanenYaMenonaktifkan total

Memeriksa Status: getenforce & sestatus

Dua perintah untuk melihat kondisi sistem saat ini:

Cek mode aktif
getenforce

Output berupa satu kata: Enforcing, Permissive, atau Disabled. Untuk detail lebih lengkap, gunakan sestatus yang sudah kita kenal di episode 0 — ia menampilkan mode saat ini, mode dari file konfigurasi, dan policy yang dimuat. Perbedaan keduanya: getenforce cepat dan singkat untuk scripting, sestatus lengkap untuk diagnosis.

Troubleshooting Dasar: Membaca Log AVC

Denial SELinux dicatat di log audit. Jika service auditd berjalan (kita aktifkan di episode 0), log ada di /var/log/audit/audit.log. Jika tidak, pesan muncul di journald dan bisa dilihat dengan journalctl.

Untuk mencari semua denial AVC, jalankan ausearch -m avc -ts recent:

Cari denial AVC di log audit
sudo ausearch -m avc -ts recent

Outputnya berupa baris AVC seperti yang kita lihat di episode 1. Ini pola membaca yang akan kalian pakai berulang kali:

Contoh denial AVC
type=AVC msg=audit(1754256000.123:456): avc: denied { read } for pid=1234 comm="nginx" name="index.html" dev="sda1" ino=5678 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_t:s0 tclass=file

Baca dari bagian yang paling informatif:

  • avc: denied { read } — operasi apa yang ditolak (dalam hal ini: baca).
  • comm="nginx" — perintah/proses yang mencoba akses.
  • scontext=...httpd_t:s0 — domain (subjek) yang mencoba.
  • tcontext=...user_home_t:s0 — type (objek) yang dituju.
  • tclass=file — kelas objek (file, dir, tcp_socket, dan seterusnya).

Terjemahan bebas baris di atas: "proses nginx dalam domain httpd_t ditolak membaca file berlabel user_home_t". Dari sini diagnosa dimulai: apakah label objeknya salah (perlu restorecon — episode 4), atau apakah memang perlu aturan baru (audit2allow — episode lanjutan).

Tip

Waktu (timestamp) adalah sahabatmu. Saat memecahkan masalah, catat kapan error terjadi, lalu cari denial AVC pada rentang waktu tersebut dengan ausearch -m avc -ts 12:30:00. Jangan membaca seluruh log — saring dulu berdasarkan waktu dan proses (comm) yang bermasalah.

Penutup

Pada episode 3 ini kita telah menguasai tiga mode SELinux — enforcing (ditegakkan), permissive (dicatat tapi dibiarkan), dan disabled (mati total) — beserta tiga mekanisme berpindah mode: setenforce (runtime), parameter kernel enforcing=0, dan /etc/selinux/config (permanen). Kita juga belajar membaca denial pertama dari /var/log/audit/audit.log dengan ausearch.

Inti yang harus kalian bawa:

  • Permissive mencatat apa yang akan diblokir tanpa memblokir — alat debugging terbaik.
  • setenforce 0 berlaku sampai reboot; SELINUX=disabled butuh reboot dan tidak bisa dibalik di runtime.
  • getenforce untuk status singkat; sestatus untuk detail lengkap.
  • Denial AVC adalah sumber kebenaran: baca scontext, tcontext, tclass, dan operasi yang ditolak.
  • Jangan pernah menonaktifkan SELinux sebagai solusi — diagnosa, jangan kabur.

Di episode 4 selanjutnya, kita akan membahas labeling & filesystem context — melihat konteks dengan ls -Z dan stat -Z, mengubahnya sementara dengan chcon, memetakannya secara permanen dengan semanage fcontext, memulihkannya dengan restorecon, hingga relabeling penuh dengan fixfiles. Pastikan tetap semangat, karena keterampilan episode inilah yang paling sering menyelamatkan kalian di produksi!

Belajar SELinux - Mode, Status & Troubleshooting Dasar | Belajar SELinux