Mendalami sistem labeling SELinux: membaca konteks file dengan ls -Z dan stat -Z, mengubah label sementara dengan chcon, memetakan label permanen dengan semanage fcontext, memulihkan label default dengan restorecon, hingga relabeling filesystem dengan fixfiles dan setfiles.

Di episode 3 kita belajar membaca denial AVC dan mendiagnosisnya — dan sering kali jawabannya adalah label yang salah. Label adalah bahasa yang dicocokkan oleh policy: file dengan label user_home_t tidak akan dibaca oleh proses httpd_t sesederhana apapun file itu di-chmod. Episode ini akan mengajarkan kalian cara melihat, mengubah, memulihkan, dan merelabeling filesystem — keterampilan yang paling sering menyelamatkan kalian di produksi.
Ini juga episode di mana kalian akan mulai sering menggunakan semanage — tools yang disebut-sebut sejak episode 0. Mari kita bedah satu per satu.
Semua perintah yang biasa kalian pakai punya varian -Z untuk menampilkan security context — coba ls -Z dan stat -Z:
ls -Z /var/www
ls -lZ /etc/nginx/nginx.conf/var/www:
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 htmlKolom ekstra yang muncul adalah security context dalam format user:role:type:sensitivity yang sudah kita bedah di episode 2. Untuk detail yang lebih teliti — termasuk label yang belum dikenali yang ditampilkan sebagai ? — gunakan stat:
stat -Z /etc/nginx/nginx.conf File: /etc/nginx/nginx.conf
Size: 641 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 21347 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0ls -Z untuk melihat banyak file sekaligus, stat -Z untuk mengupas satu file secara mendalam — termasuk memastikan apakah labelnya ? (tidak diketahui), yang sering menjadi petunjuk awal ada yang salah.
Ada dua cara mengubah label, dan perbedaan keduanya adalah sumber kebingungan terbesar di dunia SELinux.
chcon langsung menulis label baru ke objek — seperti chmod untuk context. Perintah ini cepat dan praktis untuk percobaan:
sudo chcon -t httpd_sys_content_t /srv/www/index.htmlMasalahnya, perubahan ini tidak permanen: saat sistem merelabeling filesystem (misalnya lewat fixfiles, atau saat boot dengan flag relabel), label akan kembali ke nilai default policy. Untuk production, ini bukan cara yang benar.
chcon hanya mengubah label; ia tidak mengubah aturan. Aturan hidup di database semanage fcontext, dan di sanalah pemetaan permanen dibuat:
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
sudo restorecon -Rv /srv/wwwBaris pertama menambahkan aturan: semua file di bawah /srv/www (pola regex (/.*)?) harus berlabel httpd_sys_content_t. Baris kedua restorecon menerapkan label tersebut ke objek yang ada sekarang.
Important
Aturan emas labeling: chcon untuk percobaan, semanage fcontext untuk permanen. Kalau kalian hanya memakai chcon di produksi, label akan hilang pada relabel berikutnya dan masalah akan kembali — dan kalian akan kesulitan menjelaskan kenapa. Biasakan selalu menambahkan aturan fcontext untuk perubahan permanen.
restorecon memulihkan label objek sesuai aturan fcontext yang terdaftar. Ini adalah perintah paling sering kalian pakai saat file yang disalin atau dipindahkan membawa label lama:
sudo restorecon -Rv /etc/nginx-R untuk rekursif, -v untuk menampilkan perubahan. Contoh khas: kalian memindahkan file konfigurasi dari /home/user ke /etc — file tersebut masih membawa label user_home_t, padahal lokasinya sekarang di etc_t. Satu restorecon dan labelnya kembali benar.
Kadang seluruh filesystem perlu di-relabel — misalnya saat pindah dari disabled ke enforcing, atau setelah banyak label kacau. Dua tools yang bekerja berpasangan:
fixfiles — tools tingkat tinggi (wrapper) untuk relabeling seluruh filesystem:sudo fixfiles -F onboot
sudo rebootfixfiles -F onboot menandai sistem untuk relabel saat boot berikutnya — cara paling aman karena filesystem belum di-mount read-write saat proses berjalan.
setfiles — tools tingkat rendah yang melakukan relabeling sebenarnya. fixfiles hanyalah pembungkus yang memanggil setfiles dengan argumen yang tepat. Untuk penggunaan manual pada direktori tertentu, berikan file context file dan root path yang dituju:sudo setfiles -v -A /etc/selinux/targeted/contexts/files/file_contexts /srvOpsi -v menampilkan setiap perubahan label, dan -A menonaktifkan pelacakan inode ber-hardlink ganda — hemat memori untuk job relabeling yang besar.
Penting untuk dipahami urutan prioritasnya: restorecon memakai aturan fcontext yang kalian tambahkan lewat semanage; fixfiles dan setfiles memakai file context default yang tersimpan di /etc/selinux/<policy>/contexts/files/file_contexts beserta tambahan fcontext. Itulah mengapa aturan semanage fcontext tetap bertahan meski relabel dilakukan.
Aturan fcontext bisa ditulis sebagai path literal atau pola regex — dan ini membedakan cakupan aturannya:
| Jenis | Contoh | Cakupan |
|---|---|---|
| Literal | /srv/www | Hanya direktori itu persis |
| Regex | /srv/www(/.*)? | Direktori itu dan semua isinya |
Pola /srv/www(/.*)? adalah idiom paling umum — lihat daftar aturan bawaan untuk mempelajari polanya:
sudo semanage fcontext -l | grep -E "^/var/www"/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/www/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0Perhatikan dua hal: kolom tengah (all files) menentukan kelas objek yang terkena aturan, dan pola regex yang sama dipakai berulang. Kebiasaan membaca tabel ini akan membantu kalian menebak label yang benar sebelum menjalankan restorecon.
Tip
Saat ragu label apa yang benar untuk sebuah file, cek contoh dari sistem: cari file sejenis yang sudah benar, misalnya ls -Z /var/www/html, lalu gunakan type dari hasil itu. Kalian juga bisa mencari referensi di semanage fcontext -l. Menebak type tanpa melihat contoh adalah sumber label kacau yang paling umum.
Pada episode 4 ini kita telah menguasai alur labeling lengkap: membaca label dengan ls -Z dan stat -Z, mengubah sementara dengan chcon, memetakan permanen dengan semanage fcontext, memulihkan dengan restorecon, hingga relabeling penuh dengan fixfiles dan setfiles. Kita juga memahami perbedaan pola literal vs regex dalam aturan fcontext.
Inti yang harus kalian bawa:
ls -Z untuk banyak file; stat -Z untuk detail satu file.chcon = sementara, semanage fcontext = permanen — aturan emas labeling.restorecon memulihkan label sesuai aturan fcontext yang terdaftar.fixfiles -F onboot untuk relabel seluruh filesystem saat boot; setfiles sebagai tools tingkat rendahnya.(/.*)? membuat aturan fcontext mencakup seluruh isi direktori.Di episode 5 selanjutnya, kita akan membahas domain, types & policy modules — membaca aturan TE dengan sesearch dan seinfo, memahami struktur aturan allow dan neverallow, hingga mengelola modul policy dengan semodule dalam format .pp dan .cil. Pastikan tetap semangat, karena dari sinilah kalian mulai "membaca" dan "memahami" policy yang selama ini hanya kalian lihat dari luar!