Belajar SELinux - selinuxfs & Runtime Inspection
Episode 16 of 23

Belajar SELinux - selinuxfs & Runtime Inspection

Membedah selinuxfs di /sys/fs/selinux sebagai jembatan userspace-kernel, file enforce dan booleans runtime, verifikasi labeling dengan matchpathcon, serta inspeksi live dengan seinfo, sesearch, dan semanage.

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

Pendahuluan

Di episode 15 kalian membaca denial dari ausearch, mengubah boolean dengan setsebool, dan menjalankan semanage. Semua itu bekerja — tapi pernahkah kalian bertanya di mana sebenarnya titik pertemuan antara userspace dan kernel? Jawabannya adalah selinuxfs: sebuah virtual filesystem yang dibuka kernel khusus untuk SELinux, dan menjadi tempat libselinux, semua tooling, serta kalian sendiri berbicara dengan kernel.

Episode ini membuka kap mesin. Kita bedah isi /sys/fs/selinux, pahami interaksi userspace-kernel (termasuk cache AVC di userspace), lalu lengkapi dengan toolkit inspeksi runtime: matchpathcon untuk verifikasi label, seinfo untuk menjelajah policy, dan semanage untuk melihat konfigurasi yang benar-benar berlaku di mesin live. Di akhir episode, ketika sebuah mesin "aneh", kalian akan tahu persis dari mana mulai menyelidikinya.

Pembahasan Utama

Apa Itu selinuxfs

selinuxfs adalah filesystem virtual (tanpa isi di disk) yang dibuat kernel untuk SELinux, biasanya di-mount di /sys/fs/selinux. Konfirmasi:

Cek mount selinuxfs
mount | grep selinuxfs
Baris mount selinuxfs
selinuxfs on /sys/fs/selinux type selinuxfs (rw,nosuid,nodev,noexec,relatime)

Perhatikan: filesystem ini tidak ada saat SELinux di-set ke disabled — hanya ada saat mode enforcing atau permissive. Ini adalah poin diagnostik yang sangat berguna: jika /sys/fs/selinux tidak ter-mount, SELinux tidak aktif di level kernel, apa pun yang diklaim file konfigurasi.

File Kunci di /sys/fs/selinux

Isi direktori ini adalah gerbang komunikasi dengan kernel. Beberapa file yang paling penting:

Jelajah isi selinuxfs
ls /sys/fs/selinux
cat /sys/fs/selinux/enforce
cat /sys/fs/selinux/policyvers
Contoh output
enforce  avc  booleans  context  create  deny_unknown  policy  policy_capabilities  policyvers  status  validatetrans
1
33

Makna masing-masing:

  • enforce — berisi 1 (enforcing) atau 0 (permissive). Menulis 1 atau 0 ke file ini setara setenforce 1/setenforce 0. Inilah "tombol" level terendah.
  • policyvers — versi maksimum policy binary yang didukung kernel (di sini 33 untuk kernel modern). Versi ini menaik setiap kali kernel menambah fitur policy.
  • policy — image policy binary yang sedang dimuat; tooling menyimpannya ke disk sebagai artefak forensik.
  • booleans/ — satu file per boolean; membacanya menunjukkan nilai boolean aktif saat ini di kernel, terlepas dari apa yang diklaim userspace:
Baca boolean langsung dari kernel
cat /sys/fs/selinux/booleans/httpd_can_network_connect
  • avc/ — statistik cache AVC kernel (hash_stats, cache_stats). Tingginya angka cache lookups yang lolos berarti policy jarang di-query — normal; yang perlu diperhatikan adalah denial yang muncul bersamaan.

Interaksi Userspace-Kernel

Sekarang bagian yang menyatukan semuanya: bagaimana tooling SELinux berbicara dengan kernel? Jawabannya: libselinux — pustaka userspace yang dipakai hampir semua tool — membaca dan menulis file di selinuxfs. Alur untuk satu keputusan akses:

  1. Proses memanggil syscall (misal open()).
  2. Kernel menjalankan hook LSM SELinux, mengecek policy binary.
  3. Keputusan dikirim ke audit (episode 15) dan ke cache AVC kernel.
  4. Userspace juga punya cache AVC sendiri — libselinux menyimpan hasil query agar tidak meng-query kernel setiap kali. Sinkronisasi cache ini dilakukan lewat netlink dan file status yang memberikan notifikasi saat policy atau boolean berubah.

Artinya, ketika kalian menjalankan setsebool -P, yang terjadi adalah: perubahan ditulis ke store policy (/var/lib/selinux/<policy>/), kernel diberi tahu lewat file boolean di selinuxfs, dan userspace yang sedang menunggu mendapat notifikasi untuk menyegarkan cache-nya. Semua lapisan sinkron — dan selinuxfs adalah sumbu sambungannya.

Tip

Jika kalian mengubah boolean lewat semanage boolean atau setsebool lalu melihat perilaku aplikasi tidak berubah, bandingkan nilai di cat /sys/fs/selinux/booleans/<nama> dengan nilai di store. Yang aktif di kernel adalah kebenaran; nilai di file konfigurasi hanyalah keinginan.

Memverifikasi Labeling dengan matchpathcon

Di episode 5 kita memperkenalkan restorecon. Sekarang kita gunakan alat pembandingnya untuk verifikasi tanpa mengubah apa pun: matchpathcon mencocokkan path dengan konteks default yang seharusnya menurut semanage fcontext:

Konfirmasi label file
matchpathcon /var/www/html/index.html
matchpathcon -V /var/www/html
Output matchpathcon -V
/var/www/html/index.html verified.

-V memverifikasi seluruh isi direktori terhadap konteks default — dan hanya melaporkan yang tidak cocok, tanpa mengubah apa pun. Ini adalah alat audit labeling paling aman yang ada: tidak menulis, hanya membandingkan. Bandingkan dengan restorecon -n yang menampilkan apa yang akan diubah tanpa menerapkannya:

Dry-run restorecon
restorecon -n -R -v /var/www/html

Menjelajah Policy dengan seinfo

seinfo (bagian dari setools) membaca policy aktif dan menjawab pertanyaan katalogikal: "berapa banyak tipe? boolean apa saja? atribut apa yang dimiliki tipe ini?" Dua bentuk yang paling berguna:

Katalog tipe dan boolean
seinfo -t
seinfo -b
Cuplikan seinfo -b
Booleans: 294

Dengan bendera -x (expand), seinfo menampilkan detail per tipe — termasuk atribut yang dimilikinya. Ini sangat berguna saat kalian menemukan denial dan ingin tahu "tipe ini bagian dari atribut apa?":

Perluas detail tipe
seinfo -xtype httpd_t

Jika seinfo adalah kamus policy, sesearch adalah penyelidiknya — kita sudah memakainya di episode 13 dan 14 untuk menemukan aturan. Kombinasi keduanya adalah toolkit analisis statis: seinfo untuk struktur, sesearch untuk perilaku.

Inspeksi Live dengan semanage dan setools

Inspeksi runtime tidak lengkap tanpa melihat apa yang berubah dari default. Di sinilah flag -C (custom) pada semanage menjadi emas — ia menampilkan hanya entri yang kalian (atau seseorang) tambahkan ke store, bukan seluruh database:

Perubahan kustom yang aktif
semanage fcontext -l -C
semanage boolean -l -C
semanage port -l -C
semanage permissive -l
semanage login -l
Contoh perubahan lokal yang terdeteksi
semanage fcontext -l -C
/data/vms(/.*)?   all files   system_u:object_r:virt_image_t:s0

Empat perintah tersebut adalah "snapshot kesehatan konfigurasi": file context kustom, boolean yang diubah, port yang dilabel ulang, dan domain permissive. Jika ada sesuatu yang "tidak kalian ingat pernah pasang", ini baris pertama bukti penyelidikan — persis seperti yang kita lakukan di forensik episode 15.

Satu lagi yang sering dilupakan saat inspeksi live: sestatus -v menampilkan konteks dari proses dan file penting (sshd, cron, /etc/shadow) sekaligus memverifikasinya sekaligus. Untuk host yang dikelola banyak orang, menjalankan lima perintah -C di atas setiap kali ada perubahan besar adalah kebiasaan yang murah dan sangat bernilai.

Penutup

Pada episode 16 ini kalian telah membuka kap mesin SELinux: memahami selinuxfs sebagai virtual filesystem jembatan userspace-kernel (dan bukti diagnostik bahwa SELinux aktif), membaca dan menulis file enforce, memeriksa policyvers dan boolean langsung dari kernel, memahami sinkronisasi cache AVC lewat notifikasi netlink, memverifikasi labeling dengan matchpathcon dan restorecon -n, menjelajah katalog policy dengan seinfo -t/seinfo -b/seinfo -xtype, serta melakukan inspeksi live dengan semanage ... -l -C untuk menemukan setiap perubahan kustom.

Inti yang harus kalian bawa:

  • SELinux aktif di kernel ditandai oleh ter-mount-nya /sys/fs/selinux.
  • Nilai di selinuxfs (enforce, booleans) adalah kebenaran runtime; file konfigurasi hanyalah keinginan.
  • matchpathcon -V memverifikasi label tanpa mengubah apa pun — alat audit teraman.
  • seinfo untuk struktur policy, sesearch untuk perilakunya.
  • semanage ... -l -C adalah kamera pengintai untuk setiap perubahan kustom di store.

Sekarang kalian bisa membedah mesin hidup sampai ke jembatan kernel-nya. Tapi semua tooling ini memakai policy yang sudah jadi. Bagaimana jika kalian ingin membangun policy berskala besar dengan kontrol penuh — bukan satu modul kecil seperti episode 12, melainkan arsitektur policy berlapis? Di episode 17 berikutnya kita masuk Advanced Policy Development (CIL & Module Layers): bahasa CIL modern, kompilasi dengan secilc, hierarki policy modular, perbedaan modul .pp dan CIL, pengelolaan dependensi, hingga best practices maintainability untuk policy produksi. Sampai jumpa di episode 17!

Belajar SELinux - selinuxfs & Runtime Inspection | Belajar SELinux