Belajar SELinux - Booleans & Tunables
Episode 6 of 23

Belajar SELinux - Booleans & Tunables

Mengenal boolean dan tunable SELinux sebagai saklar perilaku policy yang bisa diubah tanpa menulis ulang modul: cara membaca status dengan getsebool, mengubah secara sementara dan persisten dengan setsebool -P, boolean umum untuk web, samba, dan FTP, serta cara mengaudit perubahan yang pernah dilakukan.

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

Pendahuluan

Di episode 5, kalian melihat bagaimana policy module mengatur domain: setiap proses memakai domain tertentu, dan aturan allow menentukan apa yang boleh dilakukan domain itu. Ketika muncul denial, naluri pertama adalah membuka policy dan menulis modul baru. Padahal, dalam banyak kasus ada jalan yang jauh lebih cepat dan aman: boolean.

Boolean SELinux adalah saklar perilaku policy yang sudah disiapkan oleh pembuat policy. Kalian tidak perlu menulis satu baris aturan pun — cukup nyalakan saklarnya.

Boolean dan Tunable: Saklar atau Rewiring

Bayangkan policy SELinux seperti instalasi listrik rumah. Boolean adalah saklar lampu: posisinya bisa diubah kapan saja tanpa mematikan sumber listrik rumah. Tunable adalah pekerjaan rewiring di panel listrik: mengubahnya memerlukan pekerjaan menyeluruh karena melibatkan compile ulang policy. Keduanya menghasilkan perilaku yang berbeda — aliran listrik yang berbeda — tetapi biaya dan cara mengubahnya tidak sama.

Di level teknis, boolean hidup dalam blok if di dalam policy:

plaintext
if (httpd_can_network_connect) {
    allow httpd_t http_client_port_t:tcp_socket name_connect;
}

Jika boolean bernilai true, cabang aturan di atas ikut dimuat dan denial hilang. Jika false, aturan itu tidak ada. Nilai inilah yang kalian ubah dengan perintah setsebool, bukan dengan memodifikasi modul.

Tunable dibedakan oleh bendera khusus di dalam policy. Saat policy di-compile, cabang tunable yang mati bahkan dibuang dari policy final — konsekuensinya, mengubah tunable membutuhkan reload policy, tidak semudah membalik saklar. Untuk praktik sehari-hari, anggap saja: boolean bisa diubah kapan saja, tunable hanya diubah saat ada alasan kuat.

Note

Cara cepat membedakannya: semua tunable ikut tampil di getsebool -a, tetapi dalam semanage boolean -l muncul dengan penanda khusus. Fokus utama kalian sebagai administrator adalah boolean biasa — karena itulah alat yang paling sering dipakai menyelesaikan denial produksi tanpa downtime.

Membaca Status Boolean

Sebelum mengubah apa pun, lihat dulu nilai sekarang. Dua perintah yang wajib hafal:

  • getsebool -a untuk daftar semua boolean dan nilai saat ini.
  • semanage boolean -l untuk daftar lengkap beserta deskripsi singkat.
getsebool -a | grep httpd

Output semanage boolean -l kira-kira seperti ini (disederhanakan):

LinuxContoh output semanage boolean -l
httpd_can_network_connect      (on, on)      httpd can make network connections
httpd_can_network_connect_db   (off, off)    httpd can connect to database
httpd_enable_homedirs          (off, off)    support httpd in home dirs

Perhatikan kolom terakhir: deskripsi adalah kalimat singkat dari pembuat policy. Ini bukan hiasan — ia adalah dokumentasi resmi tentang efek boolean itu. Biasakan membaca deskripsi sebelum menyalakan apa pun. Kolom (on, on) menunjukkan nilai saat ini dan nilai default; membandingkan keduanya cepat memberi tahu konfigurasi mana yang menyimpang dari bawaan.

Mengubah Boolean: Sementara vs Persisten

Ada dua cara menyalakan boolean, dan keduanya punya efek yang sangat berbeda:

Sementara dan persisten
sudo setsebool httpd_can_network_connect on
sudo setsebool -P httpd_can_network_connect on

Perintah pertama hanya berlaku hingga sistem reboot — bagus untuk uji coba cepat: kalau ternyata bukan itu penyebabnya, tinggal reboot atau setel kembali ke off. Perintah kedua dengan flag -P (persistent) menulis nilai itu ke policy store sehingga bertahan lintas reboot.

Nilai persisten disimpan sebagai file teks sederhana di dalam policy store, biasanya /var/lib/selinux/targeted/active/booleans.local:

LinuxIsi booleans.local setelah setsebool -P
httpd_can_network_connect=1
samba_enable_home_dirs=1

Karena isinya hanyalah teks, kalian bisa menjadikannya bagian dari konfigurasi versi: gunakan semanage boolean -E untuk mengekspor pengaturan boolean saat ini ke file, dan semanage boolean -F untuk mengimpornya kembali. Inilah dasar dari pendekatan policy-as-code yang akan kita dalami di episode-episode akhir series ini.

Warning

Hati-hati dengan keliru memakai mode. Jika kalian hanya menjalankan setsebool tanpa -P di server produksi lalu lupa, perubahan itu hilang diam-diam saat reboot — dan incident yang semula sudah "diatasi" akan muncul lagi. Kebiasaan yang baik: gunakan -P hanya setelah pengujian selesai, dan catat setiap perubahan di changelog. Untuk banyak host, jangan set manual satu per satu — gunakan Ansible atau tooling config management yang akan kita bahas di episode khusus.

Boolean Umum yang Wajib Dikenali

Beberapa boolean muncul berulang kali di hampir semua job desk sysadmin. Tabel berikut adalah "kamus saku" yang perlu kalian hafal:

BooleanEfekContoh penggunaan
httpd_can_network_connectizinkan httpd membuat koneksi keluarreverse proxy ke aplikasi backend
httpd_can_network_connect_dbizinkan httpd terhubung ke databaseaplikasi web memakai MySQL atau PostgreSQL
httpd_enable_homedirsizinkan httpd membaca direktori homeweb hosting per user
httpd_enable_cgiizinkan eksekusi script CGIaplikasi berbasis CGI
samba_enable_home_dirsizinkan samba membaca direktori homefile server untuk home user
ftpd_anon_writeizinkan penulisan oleh anonymous FTPFTP server untuk upload
container_connect_anyizinkan container menghubungi port mana punworkload container dengan port dinamis

Tip

Pola pemecahan masalah yang benar: denial muncul, lihat deskripsi boolean yang paling cocok dengan gejala, aktifkan hanya boolean itu, lalu verifikasi denial hilang dengan ausearch atau log aplikasi. Jangan pernah "nyalakan semua boolean" untuk menghentikan error — itu sama saja mematikan SELinux sepotong demi sepotong, dan meniadakan proteksi yang sedang kalian bangun.

Mengaudit Perubahan Boolean

Boolean adalah konfigurasi yang mudah dicabut dan dipasang — dan karena itu juga mudah disalahgunakan. Audit log mencatat setiap pemuatan policy baru, termasuk yang dipicu oleh setsebool -P. Periksa riwayatnya dengan:

Melihat riwayat pemuatan policy
ausearch -m MAC_POLICY_LOAD -ts recent

Jadikan ini bagian dari alur investigasi: kapan boolean berubah, apakah perubahan itu berkorelasi dengan mulai munculnya masalah, dan siapa yang melakukannya. Tanpa jejak audit, debugging masalah keamanan yang aneh hanya akan menjadi tebak-tebakan.

Penutup

Pada episode 6 ini kalian sudah memahami bahwa boolean adalah saklar perilaku policy yang tidak memerlukan penulisan ulang modul: cara membacanya dengan getsebool dan semanage boolean -l, cara mengubahnya secara sementara maupun persisten dengan setsebool -P, kamus boolean yang paling sering dipakai, serta cara mengaudit perubahan lewat log.

Kunci yang harus dibawa pulang:

  • Boolean diubah kapan saja, tunable membutuhkan reload policy.
  • Uji dengan setsebool tanpa -P dulu, baru persistenkan setelah terbukti.
  • Jangan menyalakan semua boolean — aktifkan yang paling minimal untuk menyelesaikan denial.

Ada kalanya boolean tidak menyediakan saklar yang kalian butuhkan, dan denial tetap muncul meski semua boolean relevan sudah on. Saat itulah kalian masuk ke dunia pembuatan policy lokal. Di episode 7, kita akan membongkar audit2allow & Local Policy Generation: workflow debug denial yang benar, dari membaca log audit, meminta saran aturan ke audit2allow, hingga membuat dan menginstall modul policy sendiri dengan audit2allow -M dan semodule -i, beserta best practice agar kalian tidak sekadar generate policy secara buta.

Belajar SELinux - Booleans & Tunables | Belajar SELinux