Membaca dan memahami policy dari dalam: struktur aturan Type Enforcement seperti allow dan neverallow, atribut dan role, membaca policy dengan sesearch dan seinfo, hingga mengelola modul policy dengan semodule dalam format .pp dan CIL modern.

Di episode 4 kita belajar melabeli filesystem dengan benar. Tapi label hanyalah setengah cerita — label baru bermakna jika ada aturan yang menghubungkannya. Episode ini membawa kalian ke jantung SELinux: policy. Kita akan membaca aturan Type Enforcement, memahami struktur allow dan neverallow, mengenal atribut dan role, lalu mengelola modul policy dengan semodule.
Pada akhir episode ini, kalian tidak lagi melihat SELinux sebagai kotak hitam — kalian akan bisa bertanya langsung ke policy "apa yang boleh dilakukan domain ini?" dan mendapatkan jawaban yang bisa dibaca.
Aturan TE yang paling mendasar berbentuk:
allow <domain> <type> : <class> { <permissions> };Contoh nyata yang akan kalian temui di policy:
allow httpd_t httpd_sys_content_t : file { read getattr open };Artinya: proses berdomain httpd_t diizinkan melakukan operasi read, getattr, dan open pada objek kelas file yang berlabel httpd_sys_content_t. Itulah bahasa yang selama ini kita lihat hasilnya berupa "izin" atau "denied" di episode 3.
Dua jenis aturan yang paling penting:
allow — memberikan izin. Tanpa aturan allow, akses otomatis ditolak (default deny).neverallow — larangan mutlak yang diuji saat kompilasi policy. Jika ada modul lain yang mencoba allow sesuatu yang dilarang neverallow, kompilasi policy gagal total — sistem tidak akan memuat policy. Inilah pengaman terakhir yang mencegah admin (atau bug) membuka akses yang seharusnya tertutup.neverallow adalah alasan mengapa kalian kadang tidak bisa "sekadar menambahkan allow" dengan audit2allow: jika aturan itu melanggar neverallow, policy menolak untuk dikompilasi. Memahami hal ini menyelamatkan kalian dari frustrasi saat mengembangkan policy sendiri.
Selain domain dan type, policy mengenal dua konsep pengelompokan:
file_type mencakup semua type untuk file; sebuah aturan allow yang menargetkan atribut otomatis berlaku untuk semua type anggotanya. Ini membuat policy ringkas — satu aturan untuk ratusan type.system_r adalah role untuk proses sistem, sedangkan role pada objek selalu object_r. Aturan yang menghubungkan role ke domain disebut role transition.Tools untuk membedah policy berasal dari package setools-console (dipasang di episode 0):
sesearch --allow --source httpd_tallow httpd_t httpd_sys_content_t : file { ioctl read getattr lock open };
allow httpd_t httpd_sys_content_t : dir { ioctl read getattr lock open search };
allow httpd_t tmp_t : file { read write getattr setattr };sesearch adalah mesin pencari policy: cari berdasarkan domain sumber (--source), type target (--target), atau kelas (--class). Pilihan praktis yang sering kalian pakai:
| Opsi | Fungsi |
|---|---|
sesearch --allow -s <domain> | Semua izin yang diberikan oleh domain |
sesearch --allow -t <type> | Semua izin yang menarget type |
sesearch --neverallow | Semua larangan mutlak |
seinfo -t -x httpd_t | Detail sebuah type (atribut anggota, dll.) |
Sedangkan seinfo adalah direktori policy: mendaftar jenis objek, atribut, role, dan user. Contoh penggunaannya untuk melihat semua type yang ada:
seinfo -tPola kerja yang disarankan saat debugging: temukan domain pelaku dari denial AVC (episode 3), lalu tanya sesearch apa saja yang domain itu boleh lakukan. Sering kali jawaban "kenapa ditolak" adalah karena aturan yang diharapkan memang tidak ada.
Policy SELinux disusun dari modul — unit yang bisa diinstall, dinonaktifkan, dan dihapus secara mandiri. Tools pengelolanya adalah semodule:
sudo semodule -l
sudo semodule -i myapp.pp
sudo semodule -d myapp
sudo semodule -r myapp| Opsi | Fungsi |
|---|---|
-l | Mendaftar modul yang terinstall |
-i | Menginstall modul baru (memuat ke policy aktif) |
-d | Menonaktifkan modul |
-r | Menghapus modul |
Modul hadir dalam dua format package:
.pp — format binary lama, hasil kompilasi policy tradisional. Masih banyak beredar dan didukung untuk kompatibilitas..cil — format CIL (Common Intermediate Language), format modern yang diperkenalkan userspace SELinux dan menjadi standar di userspace 3.11. CIL adalah bahasa tingkat menengah yang lebih ekspresif, bisa dibaca, dan menjadi dasar penulisan policy baru.(allow httpd_t httpd_sys_content_t (file (read getattr open)))Perhatikan: aturan TE yang sama, ditulis ulang dalam sintaks CIL dengan tanda kurung. Inilah wajah modern pengembangan policy — dan akan kita dalami lebih jauh di episode-episode lanjutan tentang audit2allow dan pengembangan policy.
Tip
Sebelum menginstall modul hasil unduhan atau buatan sendiri, periksa dulu apa isinya dengan sesearch. Satu modul .pp atau .cil bisa memuat banyak aturan — termasuk yang tidak kalian sadari. Membaca sebelum menginstall adalah kebiasaan keamanan yang membedakan sysadmin yang sadar dari yang sekadar menyalin.
Pada episode 5 ini kita telah menembus jantung policy SELinux: struktur aturan TE (allow, neverallow, atribut, dan role), membaca policy dengan sesearch dan seinfo, hingga mengelola modul dengan semodule dalam format .pp dan .cil.
Inti yang harus kalian bawa:
allow memberi izin; tanpa aturan, akses ditolak (default deny).neverallow ditegakkan saat kompilasi — melanggar berarti policy gagal dimuat.sesearch untuk mencari aturan; seinfo untuk melihat struktur policy.semodule mengelola modul; .pp format lama, .cil (CIL) format modern di userspace 3.11.Dengan kemampuan membaca dan mengelola policy, kalian sudah melampaui sekadar "menyalin perintah". Di episode 6 selanjutnya, kita akan membahas booleans & tunables — saklar on/off di dalam policy yang memungkinkan kalian mengubah perilaku perlindungan tanpa menulis ulang aturan, termasuk setsebool, getsebool, dan daftar boolean bawaan untuk berbagai layanan. Pastikan tetap semangat, karena keterampilan ini adalah jembatan menuju pengelolaan SELinux yang fleksibel di produksi!