Memahami lapisan identitas di SELinux: perbedaan user Linux dan SELinux user, pemetaan login dengan semanage login, konsep role untuk membatasi transisi domain administrator, serta mekanisme MLS dan MCS untuk klasifikasi data berjenjang dan isolasi antar workload.

Di episode 7, kalian sudah menyelesaikan denial dengan modul policy lokal. Namun ada satu hal yang belum kita sentuh: siapa yang menjalankan proses itu. Selama ini kita bicara soal domain — tapi domain dimasuki oleh manusia melalui sesi login. Episode 8 ini membahas lapisan identitas SELinux: user, role, dan dua mekanisme klasifikasi, MLS dan MCS.
Ini juga episode di mana konsep SELinux mulai terasa "beda" dari Linux biasa. Jika selama ini kalian terbiasa berpikir dalam UID dan group, bersiaplah: SELinux punya daftar user sendiri yang terpisah sama sekali dari akun Linux.
Setiap proses punya dua identitas sekaligus: identitas UNIX (UID, GID) yang mengatur hak tradisional, dan security context SELinux. Lihat sendiri identitas sesi login kalian:
id -ZOutput untuk user biasa di policy targeted biasanya unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023. Bagian pertama, unconfined_u, adalah SELinux user — bukan akun Linux. Seorang user Linux dipetakan ke satu SELinux user, dan pemetaan inilah yang menentukan domain awal semua proses yang dia jalankan.
Note
Analoginya: akun Linux adalah kartu identitas di gerbang gedung, sementara SELinux user adalah badge yang menentukan lantai mana yang boleh dimasuki. Dua kartu identitas berbeda (alice dan bob) bisa memakai badge yang sama — atau badge yang berbeda — tergantung kebijakan administrator.
Daftar SELinux user bawaan terlihat dengan semanage user -l:
| SELinux user | Domain awal | Penggunaan |
|---|---|---|
unconfined_u | unconfined_t | bebas, untuk admin dan development |
staff_u | staff_t | admin yang bisa naik ke sysadm_t via role |
user_u | user_t | user biasa dengan domain terkunci |
guest_u | guest_t | user tamu yang sangat terbatas |
xguest_u | xguest_t | user tamu untuk sesi desktop |
system_u | domain system | untuk daemon dan proses sistem, bukan manusia |
Perhatikan system_u: ia diperuntukkan bagi proses sistem, bukan login manusia. Pemetaan default yang dipakai semua user Linux di policy targeted biasanya __default__ menuju unconfined_u — inilah alasan banyak admin merasa "SELinux tidak membatasi apa pun" sampai mereka mengubah pemetaan ini.
Pemetaan antara user Linux dan SELinux user dikelola dengan semanage login:
semanage login -lOutput contohnya:
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s15:c0.c1023 *
root unconfined_u s0-s15:c0.c1023 *
alice user_u s0 *Untuk memetakan akun Linux ke SELinux user yang lebih terkunci:
sudo semanage login -a -s user_u aliceSetelah ini, semua proses yang dimulai alice berjalan dalam domain user_t — terkunci jauh lebih ketat daripada unconfined_t. Untuk menerapkan ke semua user kecuali yang khusus, ubah __default__:
sudo semanage login -m -S targeted -s user_u __default__Konsekuensinya besar: jika ada aplikasi yang butuh kebebasan penuh, ia harus dipindahkan ke service account tersendiri dengan pemetaan staff_u atau sejenisnya. Inilah trade-off yang selalu mengiringi pengerasan akses pengguna.
Role adalah kumpulan domain yang boleh dimasuki seorang SELinux user. Sesi login user dimulai dari domain sesuai role utamanya, misalnya user_t. Untuk admin, SELinux menyediakan transisi role yang dikontrol: newrole memindahkan sesi ke role yang lebih tinggi dengan autentikasi ulang:
newrole -r sysadm_rPerintah ini memerlukan password lagi dan meletakkan sesi kalian di domain sysadm_t — yang punya hak administratif jauh lebih besar. Role mencegah eskalasi diam-diam: bahkan jika user staff_u ditangkap, penyerang tetap harus melewati newrole (dengan password korban) untuk mendapat hak admin.
Daftar role yang tersedia untuk satu SELinux user diatur dengan semanage user:
sudo semanage user -m -R "staff_r sysadm_r" staff_uAnalogi yang tepat: role adalah lantai gedung, newrole adalah lift yang butuh kartu lagi. Policy SELinux memastikan proses tidak bisa begitu saja "naik lift" tanpa otorisasi.
MLS (Multi-Level Security) mengimplementasikan model Bell-LaPadula: setiap subjek dan objek punya sensitivity level, dari s0 (terendah) hingga s15 (tertinggi). Aturan dasarnya sederhana:
s0 tidak boleh membaca data level s1.s1 tidak boleh menulis ke objek level s0.Lihat rentang level setiap SELinux user pada output semanage user -l sebelumnya: s0-s15:c0.c1023 berarti boleh menggunakan seluruh rentang sensitivity s0 hingga s15. Rentang inilah izin clearance pengguna. Pada policy MLS, user dengan clearance s0 tidak akan pernah membaca dokumen level s1, meski diizinkan oleh aturan tipe sekalipun.
Sistem MLS jarang dipakai di luar lingkungan pemerintah dan militer — di sanalah istilah seperti top secret dan secret menjadi level nyata dalam policy. Untuk sebagian besar perusahaan, mekanisme yang lebih relevan adalah MCS.
MCS (Multi-Category Security) berbagi infrastruktur yang sama dengan MLS, tetapi memakai category sebagai pengganti hierarki. Kategori dinomori c0 sampai c1023, dan level ditulis seperti ini:
s0:c0.c1023 — semua kategori dari c0 hingga c1023.s0:c1,c3 — hanya kategori c1 dan c3.Berbeda dari MLS yang hierarkis, kategori MCS tidak berjenjang: c2 bukan "lebih tinggi" dari c1. Mereka hanyalah label kelompok untuk isolasi lateral — memisahkan satu workload dari workload lain meski keduanya berjalan di host yang sama.
Kategorilah yang membuat container runtime bisa memisahkan proses: setiap container diberi kategori unik, misalnya s0:c123, sehingga proses container A tidak bisa membaca file milik container B hanya karena keduanya bertipe sama. Setel rentang kategori sebuah direktori dengan chcon:
sudo chcon -r s0:c1 /srv/tenant-aTip
Cara mengingat perbedaannya: MLS itu hierarki ketinggian (bisa dibaca ke atas atau ke bawah), MCS itu pemisahan antar kamar (tidak saling terhubung). MLS untuk sistem high-assurance dengan clearance berjenjang, MCS untuk isolasi antar tenant dan workload — pola yang akan kita lihat lagi di episode container.
Pada episode 8 ini kalian sudah memahami bahwa identitas SELinux berlapis tiga: SELinux user menentukan identitas dan rentang level, role membatasi domain apa yang bisa dimasuki, dan level MLS/MCS menentukan data apa yang boleh dibaca. Kalian juga sudah memetakan akun Linux ke SELinux user dengan semanage login dan menaikkan privilege secara terkontrol dengan newrole.
Kunci yang harus dibawa pulang:
semanage login.newrole mencegah eskalasi privilege yang tidak terautentikasi.Sekarang identitas sudah rapi, saatnya memakainya di layanan paling populer di dunia. Di episode 9, kita akan menerapkan semua konsep ini ke Web Server & Application Services: konteks file yang benar untuk Nginx dan Apache, boolean untuk koneksi jaringan dan database, labeling port dengan semanage port, serta pola multi-instance untuk MySQL dan PostgreSQL.