Sebuah service dapat dimulai dengan seluruh izin filesystem yang diberikan kepada identitas Unix-nya, tetapi hanya memerlukan sebagian kecil izin tersebut setelah inisialisasi. Mengganti akun service atau topologi mount dapat mengurangi otoritas itu, tetapi keduanya merupakan keputusan pada tingkat deployment. Linux Landlock menyediakan batas yang berbeda: proses dapat menambahkan pembatasan pada dirinya sendiri dan turunannya tanpa memperoleh privilege untuk memberikan akses baru.

Landlock adalah Linux Security Module yang dapat ditumpuk. Aturannya menjadi constraint tambahan, bukan pengganti discretionary access control, capabilities, atau kebijakan LSM lain yang aktif. Aturan Landlock tidak dapat mengubah operasi yang ditolak menjadi diizinkan. Landlock hanya dapat menghapus otoritas yang sebelumnya dimiliki proses.

Pembatasan bersifat aditif dan satu arah dalam sebuah domain

Proses membangun ruleset, menambahkan aturan, lalu memanggil landlock_restrict_self() untuk masuk ke domain Landlock yang dihasilkan. Ruleset menentukan kelas akses yang ditangani lapisan tersebut serta pengecualian yang tetap diizinkan di dalam kelas itu.

Setelah diterapkan, domain tidak dapat dilonggarkan oleh thread yang sudah dibatasi. Lapisan Landlock tambahan dapat mempersempit akses lebih jauh. Thread yang dibuat dari thread terbatas mewarisi pembatasan Landlock, sehingga launcher dapat menetapkan batas sebelum mengeksekusi kode aplikasi dengan tingkat kepercayaan lebih rendah.

Properti monoton ini menjadi bagian inti model keamanan. Landlock tidak mengharuskan proses tanpa privilege menjadi administrator kontrol akses. Proses dapat mengurangi otoritas ambient miliknya sendiri, tetapi tidak dapat memakai Landlock untuk memperbesar otoritas atau menghapus pembatasan yang diwarisi dari ancestor.

Pembatasan Landlock juga tersusun bersama pemeriksaan kernel biasa. Path yang diizinkan ruleset Landlock tetap dapat gagal karena Unix mode bits, ACL, state mount, LSM lain, atau kebijakan kernel lain menolak operasi tersebut.

handled_access_fs menetapkan permukaan penolakan

Ruleset filesystem tidak secara implisit memediasi setiap aksi filesystem yang mungkin terjadi. Saat ruleset dibuat, handled_access_fs mendeklarasikan hak akses filesystem yang akan ditangani ruleset. Untuk hak yang ditangani, akses ditolak kecuali aturan yang cocok memberikan operasi yang diminta. Hak di luar himpunan yang ditangani pada umumnya berada di luar permukaan keputusan lapisan tersebut.

Perbedaan ini membuat negosiasi ABI relevan bagi keamanan. Versi ABI Landlock baru menambahkan hak akses. Perangkat lunak yang dibangun dengan header lebih baru perlu memeriksa ABI Landlock pada kernel yang sedang berjalan dan membatasi hak yang diminta pada fitur yang benar-benar tersedia. String versi kernel bukan pengganti yang andal karena fitur dapat di-backport.

LANDLOCK_ACCESS_FS_REFER memiliki kasus historis khusus: reparenting lintas direktori ditolak oleh ruleset Landlock meski bit tersebut tidak dideklarasikan sebagai handled. Pemberian hak itu memerlukan handling eksplisit dan aturan yang cocok. Kode yang melakukan rename lintas direktori atau operasi hard link karena itu memerlukan perilaku kompatibilitas yang disengaja pada ABI Landlock lama.

Kebijakan yang secara diam-diam menghilangkan hak yang tidak didukung memiliki konsekuensi presisi: lapisan Landlock tersebut tidak dapat menegakkan pembatasan yang dihilangkan. Kompatibilitas graceful dapat berguna secara operasional, tetapi tidak boleh dinyatakan sebagai confinement yang setara.

Aturan path-beneath menempelkan kebijakan pada hierarki file

Pengecualian filesystem lazim ditambahkan dengan LANDLOCK_RULE_PATH_BENEATH. Aturan merujuk direktori atau file melalui file descriptor yang sudah dibuka dan memberikan akses terpilih di bawah hierarki tersebut.

Kebijakan berorientasi pada hierarki, bukan filter prefix string. Hal ini penting untuk hard link, rename, mount, dan perilaku namespace lain. Hak akses terikat pada objek kernel serta relasi hierarki, bukan pada pathname tekstual yang direkam saat kebijakan dibentuk.

Hak direktori juga memiliki scope berbeda. LANDLOCK_ACCESS_FS_READ_DIR berlaku untuk membaca isi direktori, sedangkan hak seperti LANDLOCK_ACCESS_FS_REMOVE_FILE, LANDLOCK_ACCESS_FS_MAKE_REG, dan LANDLOCK_ACCESS_FS_REFER mengatur operasi yang melibatkan entry dalam direktori. Izin untuk menampilkan isi direktori tidak dengan sendirinya memberikan izin membuka setiap file yang tercantum di sana.

Landlock karena itu tidak mereduksi otorisasi filesystem menjadi satu flag read/write. Batas yang berguna bergantung pada operasi aktual proses: traversal dan listing, membuka isi file, membuat nama, menghapus nama, mengeksekusi file, memotong data, memindahkan objek antar direktori, serta operasi spesifik perangkat dapat menempati kelas akses berbeda.

File descriptor terbuka dapat melintasi transisi kebijakan

Penerapan domain Landlock tidak secara retroaktif mencabut otoritas read atau write biasa yang sudah diwujudkan dalam file descriptor yang dibuka sebelum pembatasan. Dokumentasi kernel secara eksplisit memperlakukan file yang dibuka sebelum sandboxing sebagai objek di luar pembatasan filesystem tersebut untuk akses file biasa berikutnya.

Kondisi ini membentuk batas transisi penting. Proses yang membuka file sensitif, masuk ke domain Landlock yang akan menolak pembukaan path tersebut, lalu mempertahankan descriptor masih dapat memakai descriptor yang sudah ada sesuai izin yang ditetapkan ketika descriptor dibuka.

Sejumlah hak Landlock yang lebih baru diasosiasikan dengan descriptor saat open. Sebagai contoh, kemampuan memakai ftruncate() di bawah LANDLOCK_ACCESS_FS_TRUNCATE, serta mediasi ioctl() perangkat ketika didukung, bergantung pada hak yang diasosiasikan dengan opened file description. Dua descriptor yang merujuk inode sama karena itu dapat membawa otoritas relevan-Landlock yang berbeda bila keduanya dibuka pada sisi transisi kebijakan yang berbeda.

Descriptor passing mempertahankan concern ini melintasi batas proses. Sandbox filesystem karena itu perlu memperhitungkan descriptor yang diwariskan melalui fork() atau execve(), diterima melalui Unix socket, atau sengaja dipertahankan launcher. Kebijakan path dan inventaris descriptor merupakan bagian terpisah dari desain confinement yang sama.

Memindahkan objek filesystem antar direktori tidak setara dengan membuka file dalam satu direktori. Operasi tersebut mengubah hierarki yang mengatur akses berikutnya. Landlock karena itu menerapkan constraint tambahan pada operasi rename dan link lintas direktori melalui LANDLOCK_ACCESS_FS_REFER.

Agar reparenting diizinkan, hak hierarki sumber dan tujuan yang relevan harus tersedia. Tujuan juga tidak boleh memberi objek yang dipindahkan akses Landlock lebih besar daripada yang dimilikinya pada sumber. Upaya pemindahan yang menambah hak dapat gagal dengan EXDEV; ketiadaan izin create atau remove dapat menghasilkan EACCES.

Mekanisme ini mencegah hierarki writable dengan otoritas rendah menjadi jalur untuk menempatkan objek ke hierarki yang memiliki grant Landlock lebih luas. Konsekuensinya, perilaku aplikasi yang sangat bergantung pada atomic rename antara direktori staging dan tujuan harus direpresentasikan secara eksplisit dalam kebijakan, bukan dianggap sebagai akses write biasa.

Landlock tidak memediasi setiap operasi filesystem

Batas Landlock sengaja tidak lengkap dan berkembang menurut ABI. Dokumentasi kernel saat ini mencantumkan keluarga operasi filesystem yang belum sepenuhnya dapat dibatasi melalui hak akses Landlock, termasuk operasi yang terkait dengan chdir(), stat(), flock(), chmod(), chown(), extended attributes, timestamp, fcntl(), dan access().

Batasan itu mengubah klaim yang dapat dibuat deployment. Kebijakan filesystem Landlock dapat membatasi kelas akses yang didukung ABI aktif; kebijakan tersebut bukan reference monitor universal bagi setiap properti atau operasi metadata pada objek filesystem.

Presisi yang sama berlaku di luar file. ABI Landlock yang lebih baru menambahkan pembatasan jaringan terpilih dan scope IPC. Keberadaannya harus dideteksi melalui ABI dan dikonfigurasi secara eksplisit. Ruleset khusus filesystem tidak menyiratkan isolasi jaringan, dan proses dalam domain Landlock tidak otomatis terpisah dari setiap mekanisme IPC.

Penempatan domain menentukan eksekusi yang mewarisi batas

Pembatasan Landlock melekat pada thread pemanggil dan diwarisi oleh turunannya. Pembatasan tersebut tidak otomatis diterapkan pada sibling thread yang sudah ada. Dalam perangkat lunak multithreaded, penerapan kebijakan setelah worker dibuat karena itu dapat meninggalkan thread dalam domain Landlock berbeda.

Model launcher menghindari ambiguitas tersebut: siapkan resource yang diperlukan, tutup descriptor yang tidak dimaksudkan, buat dan isi ruleset, batasi thread launcher, lalu buat turunan atau eksekusi program target. Desain yang terintegrasi dengan aplikasi juga dapat bekerja, tetapi urutan pembuatan thread menjadi bagian dari kontrak keamanan.

Properti inheritance yang sama mendukung komposisi. Parent dapat menetapkan sandbox luas, lalu child menambahkan lapisan Landlock yang lebih sempit untuk satu fase kerja. Child tidak dapat keluar dari lapisan parent hanya dengan membangun ruleset berbeda.

Landlock mempersempit otoritas ambient tanpa mendefinisikan ulang ownership

Properti arsitektural utama Landlock adalah pemisahan antara kepemilikan kredensial sistem operasi dan kepemilikan otoritas yang dapat dipakai di dalam subtree proses. Identitas Unix dapat tetap memiliki izin atas filesystem yang luas, sementara domain Landlock menghapus operasi terpilih dari satu cabang eksekusi.

Pemisahan tersebut berguna hanya ketika batasnya tetap eksplisit. Dukungan ABI menentukan aksi yang dapat dimediasi. Mask handled-rights menentukan aksi yang didukung dan ditolak secara default oleh lapisan ini. Aturan path menentukan operasi hierarki yang diizinkan. Descriptor yang sudah ada dapat mempertahankan otoritas melintasi transisi, sementara lapisan kontrol akses kernel lain terus membuat keputusan secara independen.

Hasilnya adalah mekanisme pembatasan lokal proses, bukan sumber privilege baru. Nilai keamanannya berasal dari penyempitan otoritas ambient pada titik ketika kode aplikasi tidak lagi memerlukannya.