Belajar SELinux - Domain, Types & Policy Modules
Episode 5 of 23

Belajar SELinux - Domain, Types & Policy Modules

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.

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

Pendahuluan

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.

Struktur Aturan Type Enforcement

Aturan TE yang paling mendasar berbentuk:

Struktur aturan allow
allow <domain> <type> : <class> { <permissions> };

Contoh nyata yang akan kalian temui di policy:

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

allow vs neverallow

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.

Atribut & Role

Selain domain dan type, policy mengenal dua konsep pengelompokan:

  • Atribut (attributes) — label "virtual" yang mengelompokkan banyak type. Misalnya atribut 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.
  • Role — penghubung antara user SELinux dan domain. Role menentukan domain mana yang boleh dijalankan oleh sebuah user. Contohnya, system_r adalah role untuk proses sistem, sedangkan role pada objek selalu object_r. Aturan yang menghubungkan role ke domain disebut role transition.

Membaca Policy: sesearch & seinfo

Tools untuk membedah policy berasal dari package setools-console (dipasang di episode 0):

Cari semua izin domain httpd_t
sesearch --allow --source httpd_t
Cuplikan output
allow 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:

OpsiFungsi
sesearch --allow -s <domain>Semua izin yang diberikan oleh domain
sesearch --allow -t <type>Semua izin yang menarget type
sesearch --neverallowSemua larangan mutlak
seinfo -t -x httpd_tDetail 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:

Lihat seluruh type dan atribut
seinfo -t

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

Mengelola Modul Policy: semodule

Policy SELinux disusun dari modul — unit yang bisa diinstall, dinonaktifkan, dan dihapus secara mandiri. Tools pengelolanya adalah semodule:

Operasi dasar semodule
sudo semodule -l
sudo semodule -i myapp.pp
sudo semodule -d myapp
sudo semodule -r myapp
OpsiFungsi
-lMendaftar modul yang terinstall
-iMenginstall modul baru (memuat ke policy aktif)
-dMenonaktifkan modul
-rMenghapus 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.
Contoh modul CIL
(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.

Penutup

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:

  • Aturan allow memberi izin; tanpa aturan, akses ditolak (default deny).
  • neverallow ditegakkan saat kompilasi — melanggar berarti policy gagal dimuat.
  • Atribut mengelompokkan type; role menghubungkan user ke domain.
  • 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!

Belajar SELinux - Domain, Types & Policy Modules | Belajar SELinux