Sebuah layanan dimulai dengan akses filesystem biasa yang berasal dari kredensialnya, memuat konfigurasi, membuka sejumlah resource, lalu mulai memproses data yang mungkin tidak tepercaya. Mengganti UID atau masuk ke container dapat mengubah model otoritas di sekeliling proses, tetapi kedua tindakan itu sendiri tidak menyatakan aturan sempit seperti “mulai titik ini, pembacaan baru hanya boleh menuju hierarki ini dan penulisan hanya boleh menuju direktori tersebut.”

Landlock di Linux menyediakan lapisan pembatasan yang dikendalikan proses untuk batas tersebut. Proses membuat ruleset, menambahkan aturan objek, lalu memberlakukan ruleset pada dirinya. Domain Landlock yang terbentuk ditumpuk bersama discretionary access control dan keputusan Linux Security Module lain. Landlock dapat menghapus akses yang diizinkan mekanisme tersebut; Landlock tidak memberikan akses yang ditolak mekanisme lain.

Handled rights menentukan permukaan penolakan

Ruleset filesystem dimulai dengan landlock_create_ruleset(). Mask handled_access_fs menyatakan aksi filesystem yang hendak dikendalikan lapisan ini. Untuk sebagian besar aksi yang ditangani, akses yang tidak diberikan oleh aturan yang cocok akan ditolak setelah ruleset diberlakukan.

Detail ini menjadikan mask bagian dari batas keamanan, bukan deklarasi dokumentasi semata. Jika program tidak memasukkan sebuah right yang didukung ke handled_access_fs, ruleset tersebut pada umumnya tidak membatasi aksi itu. LANDLOCK_ACCESS_FS_REFER memiliki semantik historis khusus: pemindahan objek lintas direktori ditolak oleh ruleset walaupun bit itu tidak dinyatakan sebagai handled, sedangkan pemberian aksesnya tetap memerlukan penanganan eksplisit dan aturan yang cocok.

Landlock berkembang melalui versi ABI. Program dapat menanyakan kernel aktif dengan LANDLOCK_CREATE_RULESET_VERSION, lalu mengiriskan kebijakannya dengan right yang didukung ABI tersebut. Kode kompatibilitas harus mempertahankan batas keamanan yang dimaksud: membuang sebuah right secara diam-diam dapat membuat kernel aktif menerapkan kebijakan yang lebih sempit daripada asumsi aplikasi.

Aturan path-beneath mengikat akses pada objek hierarki

Allowance filesystem lazim ditambahkan dengan LANDLOCK_RULE_PATH_BENEATH. Aturan merujuk direktori atau file melalui descriptor dan memasok mask allowed_access yang harus merupakan subset dari handled rights milik ruleset.

Aturan ini berorientasi objek, bukan perbandingan prefix string permanen. Aturan direktori mengendalikan hierarki terkait sesuai semantik filesystem Landlock. Dengan demikian, normalisasi path tekstual bukan primitive enforcement, meskipun topologi mount dan relasi objek filesystem tetap berperan dalam keputusan akses kernel.

Right sengaja dibuat granular. Membaca isi file, menampilkan isi direktori, membuat file reguler, menghapus file, mengeksekusi file, memotong file, dan memindahkan objek antar-parent direpresentasikan secara terpisah. Direktori yang mengizinkan LANDLOCK_ACCESS_FS_READ_DIR karena itu tidak otomatis memberikan LANDLOCK_ACCESS_FS_READ_FILE untuk setiap entri yang terlihat.

Perbedaan tersebut penting bagi kebijakan tulis. LANDLOCK_ACCESS_FS_WRITE_FILE mengendalikan pembukaan file dengan akses tulis, sedangkan LANDLOCK_ACCESS_FS_TRUNCATE secara terpisah mencakup perilaku truncation pada kernel dengan ABI Landlock yang mendukung right itu. Kebijakan yang hendak membatasi penulisan destruktif perlu memperhitungkan keduanya, bukan menganggap “write” sebagai satu izin tunggal.

Enforcement bersifat monoton di dalam tumpukan domain

landlock_restrict_self() mengikat ruleset ke thread pemanggil dan membuat lapisan domain Landlock baru. Proses turunan mewarisi pembatasan tersebut. Lapisan Landlock tambahan dapat kembali mengurangi otoritas, tetapi ruleset berikutnya tidak dapat memulihkan akses yang sudah dihapus lapisan sebelumnya.

Sifat monoton ini memungkinkan self-restriction tanpa privilege tanpa menjadikan Landlock mekanisme untuk menimpa kebijakan administrator. Keputusan efektif tetap berupa irisan lapisan Landlock dan mekanisme access control sistem lainnya.

Secara historis, enforcement tanpa privilege mengharuskan pemanggil menetapkan no_new_privs sebelum landlock_restrict_self(), kecuali pemanggil memiliki privilege yang relevan. ABI Landlock yang lebih baru menambahkan flag enforcement yang dapat menetapkan no_new_privs sebagai bagian dari restriction yang berhasil. Perangkat lunak yang mendukung beberapa ABI harus mengikuti kontrak kernel aktif, bukan mengasumsikan interface terbaru tersedia.

Landlock juga membatasi jumlah lapisan ruleset yang dapat ditumpuk. Penambahan domain berulang sepanjang process tree yang panjang karena itu dapat menjadi constraint arsitektural. Aplikasi yang mengendalikan pembuatan proses sebaiknya memperlakukan pembuatan domain sebagai transisi lifecycle yang disengaja, bukan aksi per-operasi tanpa batas.

File descriptor yang sudah ada mempertahankan otoritas sebelumnya

Sandbox filesystem sering diterapkan setelah startup agar proses dapat lebih dulu membuka library, konfigurasi, log, atau endpoint IPC. Urutan tersebut menciptakan batasan yang presisi: file atau direktori yang sudah dibuka sebelum restriction Landlock tidak secara retroaktif tunduk pada pembatasan path baru dengan cara yang sama seperti akuisisi berbasis path setelah restriction.

Descriptor yang sudah dipegang karena itu dapat membawa otoritas melewati transisi sandbox. Hal ini bukan bypass kebijakan dalam model kernel; perilaku tersebut merupakan bagian dari kontrak interface. Aplikasi harus menentukan descriptor mana yang memang dipertahankan sebelum masuk ke domain terbatas.

Untuk right yang diperiksa dan diikat saat open, Landlock juga dapat mempertahankan pembatasan pada descriptor ketika descriptor dikirim ke proses lain. Desain kernel saat ini memakai sifat ini untuk operasi seperti truncation dan kontrol ioctl perangkat yang tercakup right Landlock. Transfer descriptor tidak selalu menghapus constraint akses yang melekat saat akuisisi.

Inventaris descriptor dengan demikian merupakan permukaan keamanan yang terpisah dari aturan path. Kebijakan hierarki yang ketat tidak dapat menggantikan descriptor berotoritas tinggi yang sengaja tetap terbuka sebelum restriction.

Topologi filesystem dan aksi yang belum didukung membatasi jaminan

Landlock tidak memediasi setiap operasi terkait filesystem. Dokumentasi kernel saat ini mencantumkan aksi seperti chdir(), stat(), chmod(), chown(), dan sejumlah interface metadata sebagai operasi yang belum sepenuhnya dapat dibatasi melalui right filesystem yang tersedia. Deployment harus menyatakan jaminannya berdasarkan right yang benar-benar ditangani Landlock.

Thread dalam sandbox dengan pembatasan filesystem tidak dapat memakai operasi mount untuk menulis ulang topologi filesystem, sehingga arti pembatasan hierarki terlindungi dari kelas perubahan tersebut. chroot() memiliki semantik berbeda dan tidak dengan sendirinya ditolak Landlock.

Objek kernel khusus juga memerlukan perhatian. Pipe, socket, descriptor namespace, dan resource yang diekspos melalui filesystem khusus tidak semuanya berperilaku seperti file reguler yang dikendalikan aturan path-beneath. Landlock memperoleh kontrol network dan IPC terpisah pada versi ABI yang lebih baru, tetapi mekanisme tersebut tidak boleh dicampuradukkan dengan kebijakan hierarki filesystem.

Batas dimulai saat restriction diberlakukan, bukan saat proses lahir

Landlock paling tepat ketika aplikasi menetapkan transisi jelas dari otoritas setup menuju otoritas runtime. Sebelum transisi, proses dapat memperoleh descriptor dan data yang diperlukan untuk beroperasi. Pada transisi, proses membentuk ruleset dengan handled rights yang sesuai klaim keamanan, menambahkan allowance sempit, lalu memasuki domain. Sesudahnya, akses baru dibatasi kebijakan bertumpuk, sementara descriptor yang dipertahankan menjadi pengecualian eksplisit yang dibawa melewati batas.

Model ini berbeda dari kebijakan seluruh container yang dikelola secara eksternal. Landlock memungkinkan proses mempersempit otoritas ambient miliknya tanpa menggantikan DAC, capabilities, seccomp, atau LSM lain. Properti keamanan yang berguna bersifat komposisional: setiap lapisan yang diberlakukan hanya dapat menambah pembatasan, dan aplikasi dapat menempatkan pengurangan yang tidak dapat dibalik itu pada titik ketika kebutuhan resource sudah lebih kecil dan lebih dapat diprediksi.