Ruleset Landlock Membatasi Akses Path Berikutnya, Bukan Otoritas File yang Sudah Terbuka

Sebuah proses membuka file konfigurasi dengan akses tulis, memasang ruleset Landlock yang ketat, lalu terus menjalankan kode yang seharusnya hanya dapat mengakses direktori kerja kecil. Kebijakan yang aktif kemudian dapat memblokir upaya baru untuk membuka path konfigurasi itu, tetapi descriptor yang diperoleh sebelum pembatasan tetap dapat digunakan. Cakupan filesystem sudah menyempit, namun otoritas yang sebelumnya terwujud sebagai file terbuka tidak ikut hilang.

Perbedaan tersebut menandai batas penting Landlock. Landlock adalah Linux Security Module yang dapat ditumpuk dan dirancang agar proses, termasuk proses tanpa privilege, dapat menambahkan pembatasan akses bagi dirinya sendiri dan turunannya. Aturannya mengendalikan keputusan akses objek yang didukung. Aturan itu tidak mencabut secara retroaktif setiap kemampuan yang direpresentasikan oleh resource yang diperoleh sebelum proses memasuki domain tersebut.

Ruleset menambah pembatasan tanpa menggantikan kebijakan sistem

Ruleset Landlock mendeklarasikan hak akses yang ditangani ruleset dan mengaitkan aturan dengan objek yang didukung. Untuk kebijakan filesystem, aturan path-beneath dapat memberikan hak tertentu yang ditangani di bawah sebuah direktori. Setelah ruleset diberlakukan, operasi yang ditangani tetapi tidak diberikan oleh aturan yang cocok akan ditolak, sesuai semantik masing-masing hak akses.

Kebijakan ini menambah lapisan di atas kontrol yang sudah ada. Discretionary access control tradisional, Linux Security Module lain, properti mount, dan pemeriksaan khusus objek tetap berlaku. Aturan Landlock tidak dapat mengizinkan operasi yang ditolak oleh kontrol aktif lain. Perannya adalah mengurangi otoritas dari ruang operasi efektif proses, bukan membentuk semesta izin alternatif.

Pembatasan tersebut juga bersifat monoton bagi thread yang sudah dibatasi. Pemberlakuan ruleset lain menambah lapisan Landlock baru; tindakan itu tidak menghapus lapisan yang diwarisi. Proses turunan yang dibuat setelah pemberlakuan akan mewarisi domain hasilnya. Sifat ini memungkinkan aplikasi mengurangi otoritasnya sendiri seiring perubahan fase eksekusi tanpa memerlukan pengelola kebijakan berprivilege untuk mempertahankan pembatasan tersebut.

Untuk proses tanpa privilege, pemberlakuan biasanya memerlukan no_new_privs, yang mencegah transisi execve() berikutnya memperoleh privilege dengan cara yang dapat mengubah kebijakan mandiri menjadi kondisi confused deputy. ABI Landlock terkini juga mendefinisikan flag yang dapat mengaitkan perubahan status ini dengan keberhasilan pemberlakuan ruleset. Aplikasi perlu menegosiasikan ABI Landlock pada kernel yang sedang berjalan, bukan mengasumsikan antarmuka dari ABI lebih baru tersedia di semua sistem.

Hak yang ditangani menentukan permukaan penolakan kebijakan

Landlock tidak menganggap setiap tindakan filesystem yang mungkin terjadi sebagai sesuatu yang otomatis ditolak. Saat ruleset dibuat, proses menentukan hak akses yang didukung dan akan ditangani oleh ruleset. Hak yang ditangani tersebut membentuk kumpulan tindakan yang dapat ditolak secara default oleh lapisan itu di luar aturan yang memberikan izin.

Detail ini penting ketika kernel memiliki versi berbeda. ABI Landlock yang lebih baru menambahkan hak akses dan kemampuan lain. Binary yang dibangun dengan header lebih baru dapat mengenali hak yang tidak didukung kernel lama yang sedang berjalan. Konstruksi kebijakan yang kuat memeriksa ABI Landlock dan membatasi fitur yang diminta sesuai kemampuan kernel. Menghilangkan sebuah hak secara diam-diam dapat membuat operasi berada di luar kendali lapisan tersebut; meminta bit yang tidak didukung tanpa pemeriksaan dapat membuat pembuatan ruleset gagal.

Hak filesystem juga lebih rinci daripada sekadar baca dan tulis. Eksekusi, pembacaan file, pembacaan direktori, penulisan, truncation, penghapusan, pembuatan berbagai jenis objek, dan pemindahan lintas direktori memiliki semantik kebijakan tersendiri. Aplikasi yang memberikan akses tulis tetapi tidak menyertakan operasi terpisah yang dibutuhkan workload dapat gagal secara tidak terduga. Dari sisi pembatasan, implikasinya lebih penting: operasi yang tidak direpresentasikan oleh hak yang ditangani ABI aktif tidak dapat dianggap terblokir hanya karena operasi lain yang berdekatan sudah dibatasi.

Dokumentasi kernel secara eksplisit mencantumkan tindakan filesystem yang saat ini belum dimediasi Landlock. Daftar tersebut berubah seiring evolusi antarmuka, sehingga klaim keamanan deployment harus dikaitkan dengan ABI dan perilaku kernel yang benar-benar digunakan.

Descriptor terbuka melintasi transisi kebijakan path

Pembatasan filesystem sering dinyatakan dalam istilah path karena aturan dikaitkan di bawah objek filesystem. File descriptor yang sudah terbuka memiliki siklus hidup berbeda. Linux menyelesaikan pathname saat operasi seperti open(), menjalankan pemeriksaan akses yang relevan, lalu mengembalikan descriptor yang merujuk pada opened file description. I/O berikutnya dapat berlangsung melalui descriptor tersebut tanpa mengulangi pathname lookup awal.

Landlock mengikuti siklus hidup objek tersebut. File yang dibuka sebelum sandboxing tidak secara retroaktif terkena pembatasan filesystem yang diberlakukan kemudian. Jika proses sengaja atau tidak sengaja mempertahankan descriptor dengan akses tulis ke file di luar domain barunya, operasi biasa yang diizinkan descriptor itu dapat tetap tersedia setelah landlock_restrict_self() berhasil.

Sebagian hak Landlock diperiksa ketika file dibuka dan kemudian terkait dengan tindakan yang dapat dilakukan melalui descriptor. Desain ini menjaga konsistensi urutan operasi yang setara di dalam sebuah domain, tetapi tidak mengubah pembatasan menjadi pencabutan descriptor. Waktu saat resource diperoleh tetap menjadi bagian dari model keamanan.

Pewarisan descriptor memperluas persoalan ini melintasi batas proses. Descriptor tanpa perlindungan close-on-exec dapat bertahan melewati execve(). Launcher yang memasuki domain Landlock sempit lalu mengeksekusi kode dengan tingkat kepercayaan lebih rendah harus memperhitungkan setiap descriptor yang diwariskan, bukan hanya path yang terlihat oleh program tersebut. Landlock dan disiplin pengelolaan descriptor melindungi dimensi berbeda dari grafik otoritas yang sama.

Kebijakan berbasis path menjadi lebih rumit ketika objek filesystem dapat berpindah antar-direktori atau memperoleh nama tambahan. Landlock memodelkan pemindahan lintas direktori melalui LANDLOCK_ACCESS_FS_REFER, sementara hak pembuatan dan penghapusan tetap berlaku pada tujuan dan sumber sesuai konteksnya.

Kernel juga mencegah operasi pemindahan memberikan akses Landlock yang lebih besar kepada objek melalui direktori tujuan dibandingkan akses yang dimilikinya melalui sumber. Batas ini mencegah rename atau link menjadi jalur untuk memperluas otoritas di dalam domain yang dibatasi. Bergantung pada kondisi yang gagal, operasi dapat menghasilkan EACCES atau EXDEV, sehingga penanganan error aplikasi tidak semestinya menganggap semua penolakan kebijakan memiliki satu errno yang seragam.

Semantik tersebut menunjukkan bahwa aturan direktori bukan sekadar prefix pathname berbasis teks. Landlock berpartisipasi dalam pemeriksaan objek dan hierarki kernel. Hard link, topologi mount, perilaku rename, dan siklus hidup descriptor membuat otoritas filesystem jauh lebih kaya daripada pencocokan string.

Landlock dan seccomp membatasi boundary yang berbeda

Seccomp memfilter masuknya system call berdasarkan metadata syscall. Landlock memediasi akses yang didukung ke objek kernel berdasarkan kebijakan access control. Perbedaannya bersifat operasional, bukan kosmetik.

Profil seccomp dapat mengizinkan openat() karena aplikasi perlu membuka file, sementara Landlock mempersempit objek filesystem yang dapat dicapai oleh pemanggilan tersebut. Sebaliknya, domain Landlock dapat membatasi akses file tetapi tetap membiarkan permukaan syscall yang luas. Tidak satu pun dari kedua mekanisme itu menggantikan fungsi yang lain.

Prinsip komposisi yang sama berlaku untuk credentials, namespaces, kebijakan jaringan, dan kontrol LSM lain. Landlock dapat menambah boundary akses objek yang berarti tanpa membuktikan bahwa seluruh proses sudah terisolasi. Perlindungannya terbatas pada kelas objek, hak, scope, dan fitur ABI yang didukung kernel serta benar-benar dikonfigurasi aplikasi.

Pembatasan dimulai sebelum ruleset diberlakukan

Proses yang membatasi dirinya sendiri memiliki fase persiapan ketika proses itu masih memegang otoritas yang dibutuhkan untuk inisialisasi. File yang dibuka, socket yang tersambung, memory mapping yang dibuat, dan descriptor yang diwarisi pada fase tersebut dapat menentukan tindakan yang tetap mungkin dilakukan setelahnya. Pemanggilan landlock_restrict_self() merupakan batas dalam siklus hidup otoritas, bukan mekanisme yang menghapus state terdahulu.

Desain yang dapat dipertanggungjawabkan menginventarisasi resource sebelum transisi itu, menutup descriptor yang tidak seharusnya bertahan, menggunakan semantik close-on-exec saat sesuai, dan memperlakukan keberhasilan pemberlakuan ruleset sebagai kondisi yang harus diperiksa. Desain tersebut juga menetapkan perilaku fallback untuk kernel yang tidak menyediakan ABI atau hak akses Landlock yang dibutuhkan. Melanjutkan eksekusi tanpa pembatasan yang dimaksud dapat diterima demi kompatibilitas pada aplikasi tertentu, tetapi kondisi itu tidak setara dengan pembatasan yang berhasil dan tidak semestinya direpresentasikan demikian.

Nilai Landlock berasal dari sifat yang sempit: aplikasi dapat secara permanen menambahkan pembatasan access control yang didukung ke domain eksekusinya sendiri tanpa menuntut pembatasan itu menggantikan kebijakan sistem yang sudah ada. Boundary tersebut menjadi presisi hanya jika descriptor yang sudah ada, cakupan ABI, operasi yang belum dimediasi, dan otoritas warisan tetap terlihat dalam model keamanan.