Belajar AlmaLinux - SELinux & Mandatory Access Control
Episode 13 of 23

Belajar AlmaLinux - SELinux & Mandatory Access Control

Menguasai lapisan keamanan terkuat AlmaLinux: memahami perbedaan MAC dan DAC, mengelola mode enforcing, permissive, dan disabled, membaca dan memperbaiki security context, mengatur boolean, serta troubleshooting service yang diblokir lewat ausearch dan sealert.

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

Pendahuluan

Di episode 12 sebelumnya kita merapikan logging, time sync, dan automation. Sekarang kita masuk ke lapisan yang membedakan AlmaLinux dari distro mainstream: SELinux. Ini adalah Mandatory Access Control (MAC) yang aktif secara default di AlmaLinux dalam mode enforcing — dan salah satu alasan utama mengapa ekosistem RHEL dikenal aman.

Episode ini membedah perbedaan MAC dan DAC, tiga mode SELinux, struktur security context, boolean, dan — yang paling penting — pola troubleshooting ketika SELinux memblokir service kalian.

MAC vs DAC

Kalian sudah akrab dengan DAC (Discretionary Access Control) sejak episode 6: permission rwx yang dikendalikan pemilik file. Nama "discretionary" merujuk pada kenyataan bahwa pemilik objek bebas menentukan akses.

MAC (Mandatory Access Control) bekerja di atas DAC. Akses ditentukan oleh kebijakan terpusat berdasarkan label konteks — bukan oleh kehendak pemilik file. Dua perbedaan krusial:

  • Root pun dibatasi. Di dunia MAC, proses root tetap harus memenuhi aturan policy.
  • Keputusan berbasis label. Yang diperiksa bukan "user siapa", melainkan "label proses vs label objek".

Analoginya: DAC adalah kunci rumah yang bisa disalin pemiliknya; MAC adalah satpam gedung yang punya daftar resmi siapa boleh masuk ruangan mana — daftar yang tidak bisa diubah pemilik ruangan.

AspekDACMAC (SELinux)
Penentu aksesPemilik objekKebijakan terpusat
Basis keputusanUser dan groupLabel konteks
RootTidak dibatasiDibatasi
Prinsip defaultTerbuka kecuali dikunciTertutup kecuali diizinkan

Mode SELinux

SELinux punya tiga mode yang bisa kalian temui:

ModePerilaku
EnforcingPolicy ditegakkan; akses terlarang diblokir dan dicatat
PermissivePelanggaran dicatat tapi tidak diblokir
DisabledSELinux mati total
Cek mode berjalan dan mode konfigurasi
getenforce
sestatus

getenforce menampilkan mode berjalan; sestatus menampilkan status lengkap termasuk policy yang dimuat. Untuk berpindah mode tanpa reboot:

Ubah mode sementara
sudo setenforce 0
sudo setenforce 1

setenforce 0 memakai mode permissive, setenforce 1 kembali enforcing. Ini mengubah mode berjalan saja — mode permanen dikendalikan di /etc/selinux/config.

Danger

Jangan pernah menonaktifkan SELinux di /etc/selinux/config dengan SELINUX=disabled sebagai solusi masalah. Denial SELinux adalah informasi — bukan musuh. Ikuti pola troubleshooting di bawah, bukan jalan pintas yang membuka lubang keamanan.

Security Context

Setiap proses dan objek di SELinux punya security context — label yang menjadi dasar keputusan akses. Formatnya:

Format security context
user:role:type:sensitivity
system_u:object_r:httpd_sys_content_t:s0

Empat field: user, role, type, dan sensitivity. Yang paling sering kalian urus adalah type — untuk proses disebut domain. Lihat context dengan flag -Z:

Lihat context file dan proses
ls -Z /var/www/html
ps -eZ | grep httpd

Memperbaiki Context yang Salah

Masalah SELinux paling umum: file disalin atau dipindahkan membawa label lama. Perbaiki dengan restorecon:

Restore context ke aturan default
sudo restorecon -Rv /var/www/html

-R rekursif, -v verbose. restorecon mengembalikan label sesuai aturan fcontext yang terdaftar.

Aturan fcontext Kustom

Untuk direktori di luar lokasi standar, daftarkan aturan fcontext dengan semanage:

Daftarkan direktori kustom
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
sudo restorecon -Rv /srv/www

semanage fcontext -a menambahkan aturan label, lalu restorecon menerapkannya. Ini pola wajib saat menaruh konten web di lokasi non-standar.

Boolean: Mengubah Perilaku Tanpa Edit Policy

Boolean adalah saklar on/off yang mengubah bagian dari policy tanpa menulis aturan baru — misalnya mengizinkan httpd mengakses jaringan:

Lihat dan ubah boolean
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on

Flag -P membuat perubahan persisten (bertahan reboot). Tanpa -P, perubahan hanya berlaku sampai reboot — sering menjadi sumber kebingungan saat konfigurasi "tidak nyantol".

Troubleshooting Service yang Diblokir

Ketika service tiba-tiba gagal — biasanya di log muncul permission denied misterius — langkah pertama: cek apakah SELinux yang memblokir.

Cari denial AVC di audit log
sudo ausearch -m avc -ts recent
Buat SELinux di permissive untuk diagnosis
sudo setenforce 0
systemctl restart myapp

Pola diagnosis yang benar:

  1. Baca denial dengan ausearch -m avc -ts recent.
  2. Izinkan sementara dengan memakai mode permissive, bukan menonaktifkan SELinux.
  3. Verifikasi service berjalan di mode permissive — jika ya, SELinux yang memblokir.
  4. Perbaiki dengan benar — label yang salah di-restorecon, boolean di-setsebool, atau buat module policy.
  5. Kembali ke enforcing dan pastikan service tetap jalan.

Membaca Denial dengan sealert

Untuk interpretasi ramah-manusia, pasang setroubleshoot yang menyediakan sealert:

Install dan jalankan sealert
sudo dnf5 install -y setroubleshoot-server
sudo sealert -a /var/log/audit/audit.log

sealert -a menganalisis seluruh log audit dan memberikan rekomendasi langkah demi langkah — termasuk perintah restorecon atau setsebool yang tepat untuk memperbaiki masalah.

Cek potongan denial terakhir
sudo aureport -a --summary

aureport -a --summary merangkum semua peristiwa audit — cara cepat melihat pola denial yang berulang.

Kesalahan Umum (Common Pitfalls)

  1. Menonaktifkan SELinux karena denial. Kesalahan terbesar. Denial adalah data untuk didiagnosis, bukan alasan menyerah.
  2. Mengandalkan setenforce 0 sebagai solusi permanen. Itu hanya sementara dan hilang saat reboot — perbaiki akar masalahnya.
  3. Melupakan -P di setsebool. Tanpa -P, perubahan boolean hilang saat reboot.
  4. Menyalin file antar direktori tanpa restorecon. Label ikut terbawa — selalu restore label di lokasi baru.
  5. Mengabaikan ausearch. Setiap denial terekam; polanya adalah petunjuk diagnosis terbaik.

Penutup

Pada episode 13 ini kalian telah menguasai SELinux dan MAC: perbedaan mendasar MAC vs DAC, tiga mode enforcing, permissive, dan disabled, struktur security context, perbaikan label dengan restorecon dan semanage fcontext, pengaturan boolean, serta pola troubleshooting denial dengan ausearch dan sealert.

Inti yang harus dibawa pulang:

  • MAC membatasi bahkan root; keputusan berbasis label, bukan user.
  • Mode: Enforcing (default), Permissive (log saja), Disabled (jangan).
  • Format context: user:role:type:sensitivity — urus type-nya.
  • restorecon memperbaiki label; semanage fcontext untuk lokasi kustom.
  • Boolean mengubah perilaku policy tanpa edit aturan — ingat -P untuk persisten.
  • Troubleshooting: baca denial → permissive sementara → perbaiki → kembali enforcing.

Dengan SELinux terkendali, kalian siap mengamankan akses jarak jauh. Di episode 14 selanjutnya, kita akan membahas SSH Hardening & Remote Access — konfigurasi sshd modern dengan kunci ed25519, menonaktifkan password dan root, Match untuk aturan kondisional, tunneling, serta hardening dengan Fail2ban dan AllowUsers. Sampai jumpa!