Episode ini membahas SELinux dan Mandatory Access Control di Rocky Linux: perbedaan DAC dan MAC, mode Enforcing, Permissive, dan Disabled, konteks file dan semanage fcontext, booleans, serta troubleshooting dengan ausearch dan sealert.

Di episode 13 sebelumnya kalian sudah membangun tembok pertahanan luar dengan firewall. Tapi ada satu pertanyaan yang belum terjawab: siapa yang melindungi sistem dari dalam — ketika sebuah proses sudah lolos masuk, atau ketika root sendiri membuat kesalahan? Jawabannya adalah SELinux, dan episode ini akan mengubah cara kalian berpikir tentang keamanan Linux.
SELinux sering dianggap momok: banyak tutorial menyarankan setenforce 0 sebagai solusi pertama setiap masalah. Di episode ini kalian akan belajar memanfaatkan SELinux sebagai lapisan keamanan yang justru memberi informasi berharga — dan menyelesaikan masalah dengan bekerja bersama SELinux, bukan melawannya.
Linux tradisional memakai DAC (Discretionary Access Control) — kontrol yang kalian pelajari di episode 6. Pemilik file menentukan siapa yang boleh mengaksesnya, dan root memiliki kekuatan tak terbatas. Masalahnya: jika sebuah proses berhasil dieksploitasi, ia mewarisi semua hak pemiliknya — termasuk hak root.
MAC (Mandatory Access Control) berlapis di atas DAC. SELinux menerapkan kebijakan yang ditetapkan sistem, tanpa peduli keinginan pemilik file atau kekuatan root. Bahkan root dibatasi oleh aturan kebijakan SELinux:
sestatusgetenforcePerbedaan kuncinya: DAC adalah "pemilik boleh mengatur", MAC adalah "kebijakan sistem memaksa semua orang — termasuk root".
| Mode | Perilaku |
|---|---|
Enforcing | Kebijakan diterapkan; pelanggaran diblokir dan dicatat |
Permissive | Pelanggaran hanya dicatat, tidak diblokir |
Disabled | SELinux tidak aktif sama sekali |
getenforcesetenforce 1
setenforce 0setenforce 0 memindahkan ke Permissive — berguna untuk diagnosa, tetapi jangan jadi kebiasaan permanen.
Warning
setenforce 0 hanya berpengaruh saat runtime dan kembali ke konfigurasi di /etc/selinux/config setelah reboot. Mengubah mode default di file itu — dari enforcing menjadi disabled — membutuhkan reboot dan membuka sistem dari lapisan keamanan yang aktif secara default.
Mode default disimpan di /etc/selinux/config:
cat /etc/selinux/configBaris SELINUX=enforcing menentukan mode di setiap boot. Untuk produksi, target yang benar adalah enforcing — bukan disabled.
Setiap file di sistem SELinux memiliki label konteks — informasi tipe yang menentukan bagaimana proses dapat berinteraksi dengannya. Lihat dengan ls -Z:
ls -Z /var/www/html/index.htmlps -efZ | grep httpdKonteks berbentuk seperti system_u:object_r:httpd_sys_content_t:s0 — bagian terakhir (tipe) adalah yang paling sering relevan. Web server membutuhkan tipe httpd_sys_content_t untuk bisa membaca file.
Jika file punya tipe yang salah, SELinux memblokir akses meski permission DAC sudah benar. Perbaiki dengan restorecon:
restorecon -Rv /var/www/htmlchcon -t httpd_sys_content_t /var/www/html/index.htmlrestorecon mengembalikan label sesuai kebijakan default. chcon mengubah secara manual — tetapi perubahan chcon tidak bertahan jika konteks diperbaiki ulang.
Agar perubahan konteks bersifat permanen — terutama untuk direktori non-standar — gunakan semanage:
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"restorecon -Rv /data/websemanage fcontext -l | grep /dataDengan semanage fcontext, aturan tersimpan di kebijakan — restorecon berikutnya akan selalu memakai label yang benar.
Booleans adalah saklar yang mengubah perilaku kebijakan SELinux tanpa menulis aturan baru — jalan pintas resmi untuk mengizinkan akses yang sering dibutuhkan.
getsebool -agetsebool -a | grep httpdContoh nyata: mengizinkan httpd membuat koneksi keluar (pola proxy atau integrasi):
setsebool -P httpd_can_network_connect ongetsebool httpd_can_network_connect-P membuat perubahan permanen (tersimpan di kebijakan). Tanpa -P, perubahan hanya berlaku runtime dan hilang saat reboot.
Saat SELinux memblokir sesuatu, ia mencatatnya di log audit. Dua alat membantu membacanya:
ausearch -m avc -ts recentausearch -m avc --start todayausearch -m avc menampilkan event AVC (Access Vector Cache) — penolakan akses SELinux. Outputnya mencakup proses, tipe sumber dan target, serta alasan penolakan.
Untuk rekomendasi perbaikan, sealert menerjemahkan pesan teknis menjadi saran:
sealert -a /var/log/audit/audit.logSaat sebuah layanan gagal membaca file:
ausearch -m avc -ts recent untuk konfirmasi penolakan SELinux.semanage fcontext + restorecon.setsebool -P.setenforce 0; gunakan Permissive hanya sementara untuk mengonfirmasi penyebab.setenforce 0
# coba ulang operasi yang gagal, lalu kembali
setenforce 1Di episode 14 ini kalian sudah memahami SELinux di Rocky Linux: perbedaan DAC dan MAC, tiga mode Enforcing, Permissive, dan Disabled, label konteks dengan ls -Z dan perbaikannya via chcon, restorecon, dan semanage fcontext, booleans dengan getsebool dan setsebool -P, serta troubleshooting dengan ausearch dan sealert.
Inti yang harus dibawa pulang:
enforcing; setenforce 0 hanya untuk diagnosa sesaat.semanage fcontext untuk label permanen di direktori non-standar.ausearch -m avc dan sealert adalah sumber pertama saat menyelidiki penolakan SELinux.Di episode 15 selanjutnya kita akan membahas SSH hardening dan remote access — konfigurasi sshd modern, otentikasi berbasis kunci ed25519, tunneling dengan -L, -R, dan -J, serta hardening seperti fail2ban dan pembatasan user. Keamanan dari dalam sudah kuat; sekarang giliran mengamankan pintu masuknya!