Belajar Rocky Linux - SELinux & Mandatory Access Control
Episode 14 of 23

Belajar Rocky Linux - SELinux & Mandatory Access Control

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.

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

Pendahuluan

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.

DAC vs MAC

Model Access Control

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:

Melihat status SELinux
sestatus
Mode saat ini
getenforce

Perbedaan kuncinya: DAC adalah "pemilik boleh mengatur", MAC adalah "kebijakan sistem memaksa semua orang — termasuk root".

Mode SELinux

Tiga Mode

ModePerilaku
EnforcingKebijakan diterapkan; pelanggaran diblokir dan dicatat
PermissivePelanggaran hanya dicatat, tidak diblokir
DisabledSELinux tidak aktif sama sekali
Melihat mode saat ini
getenforce
Berpindah mode runtime
setenforce 1
setenforce 0

setenforce 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.

Konfigurasi Boot

Mode default disimpan di /etc/selinux/config:

Melihat konfigurasi SELinux
cat /etc/selinux/config

Baris SELINUX=enforcing menentukan mode di setiap boot. Untuk produksi, target yang benar adalah enforcing — bukan disabled.

Konteks File dan Kebijakan

Label Konteks

Setiap file di sistem SELinux memiliki label konteks — informasi tipe yang menentukan bagaimana proses dapat berinteraksi dengannya. Lihat dengan ls -Z:

Melihat konteks file
ls -Z /var/www/html/index.html
Melihat konteks proses
ps -efZ | grep httpd

Konteks 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.

Memperbaiki Konteks

Jika file punya tipe yang salah, SELinux memblokir akses meski permission DAC sudah benar. Perbaiki dengan restorecon:

Memperbaiki konteks
restorecon -Rv /var/www/html
Mengubah konteks manual
chcon -t httpd_sys_content_t /var/www/html/index.html

restorecon mengembalikan label sesuai kebijakan default. chcon mengubah secara manual — tetapi perubahan chcon tidak bertahan jika konteks diperbaiki ulang.

Persistensi dengan semanage fcontext

Agar perubahan konteks bersifat permanen — terutama untuk direktori non-standar — gunakan semanage:

Menetapkan aturan konteks permanen
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
Terapkan dengan restorecon
restorecon -Rv /data/web
Melihat aturan yang ada
semanage fcontext -l | grep /data

Dengan semanage fcontext, aturan tersimpan di kebijakan — restorecon berikutnya akan selalu memakai label yang benar.

Booleans

Mengatur Perilaku Kebijakan

Booleans adalah saklar yang mengubah perilaku kebijakan SELinux tanpa menulis aturan baru — jalan pintas resmi untuk mengizinkan akses yang sering dibutuhkan.

Melihat semua booleans
getsebool -a
Melihat booleans httpd
getsebool -a | grep httpd

Contoh nyata: mengizinkan httpd membuat koneksi keluar (pola proxy atau integrasi):

Mengaktifkan boolean permanen
setsebool -P httpd_can_network_connect on
Memeriksa hasil
getsebool httpd_can_network_connect

-P membuat perubahan permanen (tersimpan di kebijakan). Tanpa -P, perubahan hanya berlaku runtime dan hilang saat reboot.

Troubleshooting SELinux

Ausearch dan Sealert

Saat SELinux memblokir sesuatu, ia mencatatnya di log audit. Dua alat membantu membacanya:

Melihat penolakan SELinux
ausearch -m avc -ts recent
Menemukan semua penolakan baru
ausearch -m avc --start today

ausearch -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:

Mendapatkan saran perbaikan
sealert -a /var/log/audit/audit.log

Alur Diagnosa yang Benar

Saat sebuah layanan gagal membaca file:

  1. Cek ausearch -m avc -ts recent untuk konfirmasi penolakan SELinux.
  2. Identifikasi tipe sumber dan target pada output.
  3. Jika masalahnya konteks file, gunakan semanage fcontext + restorecon.
  4. Jika masalahnya perilaku, cari boolean yang relevan dan aktifkan dengan setsebool -P.
  5. Hindari jalan pintas setenforce 0; gunakan Permissive hanya sementara untuk mengonfirmasi penyebab.
Mengonfirmasi penyebab di Permissive
setenforce 0
# coba ulang operasi yang gagal, lalu kembali
setenforce 1

Penutup

Di 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:

  • SELinux adalah MAC yang membatasi bahkan root — lapisan pengaman di atas DAC.
  • Target produksi adalah enforcing; setenforce 0 hanya untuk diagnosa sesaat.
  • Konteks file yang salah adalah penyebab kegagalan paling umum; perbaiki dengan restorecon.
  • Gunakan semanage fcontext untuk label permanen di direktori non-standar.
  • Booleans mengubah perilaku kebijakan tanpa menulis aturan baru.
  • 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!

Belajar Rocky Linux - SELinux & Mandatory Access Control | Belajar Rocky Linux