Sebuah ruleset Landlock tidak otomatis menolak setiap operasi yang dikenal kernel. Ruleset terlebih dahulu menyatakan access rights yang ditanganinya. Setelah ruleset diberlakukan, action yang ditangani tersebut ditolak secara default kecuali rule yang cocok memberinya izin.

Batas eksplisit ini menjadi bagian penting dari kompatibilitas Landlock. User space dapat membatasi rights yang dikenal dan telah diuji, sementara kernel yang lebih baru dapat menyediakan rights tambahan yang tidak pernah disebut binary lama.

Handled rights memilih kumpulan action yang dibatasi

landlock_create_ruleset() menerima landlock_ruleset_attr dengan access mask yang menentukan action yang dikontrol ruleset baru.

struct landlock_ruleset_attr attr = {
    .handled_access_fs =
        LANDLOCK_ACCESS_FS_READ_FILE |
        LANDLOCK_ACCESS_FS_READ_DIR |
        LANDLOCK_ACCESS_FS_WRITE_FILE,
};

Setelah ruleset diberlakukan, action filesystem tersebut masuk ke keputusan deny-by-default Landlock. Rights yang tidak tercantum pada handled_access_fs secara umum berada di luar batas pembatasan ruleset ini.

LANDLOCK_ACCESS_FS_REFER memiliki pengecualian historis: right tersebut ditolak secara default oleh ruleset walaupun tidak tercantum dalam handled mask, sedangkan pemberian izin tetap memerlukan right itu ditangani secara eksplisit.

Rule memberikan subset izin di bawah objek

Rule filesystem dapat memberikan handled rights di bawah direktori yang direpresentasikan oleh descriptor O_PATH.

struct landlock_path_beneath_attr path = {
    .parent_fd = dirfd,
    .allowed_access =
        LANDLOCK_ACCESS_FS_READ_FILE |
        LANDLOCK_ACCESS_FS_READ_DIR,
};

landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH, &path, 0);

Allowed rights pada rule harus merupakan subset dari rights yang ditangani ruleset. Pada contoh ini, operasi read dapat diizinkan di bawah hierarchy terpilih sementara LANDLOCK_ACCESS_FS_WRITE_FILE tetap ditolak di sana.

Modelnya berupa pembatasan aditif. Landlock tidak dapat memberikan akses yang ditolak permission DAC biasa atau LSM aktif lain. Rule Landlock menambahkan constraint pada kontrol akses sistem yang sudah ada.

Enforcement membuat domain untuk caller

landlock_restrict_self() memberlakukan ruleset yang telah selesai pada calling thread. Child berikutnya mewarisi domain Landlock tersebut, sehingga pembatasan mengikuti pembuatan proses tanpa mengharuskan setiap descendant membangun ulang ruleset.

Proses tanpa privilege dapat membatasi dirinya sendiri. Interface ini dirancang untuk mengurangi ambient authority, bukan memberikan privilege baru.

Ruleset juga dapat ditumpuk. Layer berikutnya menambahkan pembatasan; layer itu tidak dapat melonggarkan constraint yang diwarisi dari layer sebelumnya. Kernel membatasi jumlah layer ruleset yang dapat ditumpuk, sehingga konstruksi sandbox berulang merupakan resource terbatas.

Negosiasi ABI membatasi rights yang dapat diminta binary

Landlock berkembang dengan penambahan access rights dan kemampuan rule pada versi ABI berikutnya. Proses dapat meminta ABI tertinggi yang didukung dengan:

int abi = landlock_create_ruleset(
    NULL, 0, LANDLOCK_CREATE_RULESET_VERSION);

Binary sebaiknya hanya memasukkan rights yang didukung ABI tersebut ke handled mask. Access bit yang tidak dikenal dapat membuat pembuatan ruleset gagal dengan EINVAL.

Negosiasi ini mempertahankan asimetri yang berguna. Kernel baru dapat mengekspos kontrol yang tidak dipakai program lama, sementara program tetap dapat memberlakukan subset sesuai ABI yang terdeteksi. Sandbox yang terbentuk dengan demikian ditentukan oleh rights yang diminta program sekaligus Landlock ABI yang didukung kernel berjalan.

Descriptor yang sudah terbuka melintasi batas filesystem secara berbeda

Pemeriksaan filesystem Landlock melekat pada operasi tertentu, dan descriptor yang dibuka sebelum sandboxing tidak secara retroaktif diubah menjadi file yang baru dibuka. Descriptor yang sudah ada karena itu dapat mempertahankan capability yang terbentuk sebelum proses memasuki domain.

Perbedaan ini penting bagi desain proses. Membatasi akses berbasis pathname setelah membuka descriptor direktori atau file yang luas tidak menghapus authority yang sudah direpresentasikan descriptor tersebut. Landlock mempersempit akses berikutnya sesuai hook yang tersedia; mekanisme ini bukan revocation untuk descriptor.

Perbedaan serupa terlihat pada rights baru seperti LANDLOCK_ACCESS_FS_IOCTL_DEV, yang pembatasannya berlaku pada device file yang baru dibuka dan tidak menulis ulang status descriptor yang telah ada.

Cakupan filesystem bersifat eksplisit, bukan universal

Landlock menyediakan filesystem rights bernama seperti execute, read, write, truncate, penghapusan direktori, penghapusan file, operasi pembuatan, serta refer antar-direktori. Kumpulan ini tidak setara dengan seluruh syscall yang berkaitan dengan filesystem.

Sebagian operasi metadata dan operasi direktori proses masih berada di luar kontrol filesystem Landlock saat ini. Sandbox yang membutuhkan pembatasan di luar rights yang tersedia harus menggabungkan Landlock dengan mekanisme kernel lain, bukan menganggap keterlibatan pathname sebagai bukti bahwa operasi tersebut tercakup.

Hal ini juga merupakan konsekuensi desain handled-right: batas keamanan adalah kumpulan action kernel terdokumentasi yang direpresentasikan oleh Landlock rights yang didukung, bukan janji abstrak bahwa setiap operasi yang menyentuh path akan dibatasi.

Deny-by-default hanya berlaku di dalam batas yang dinyatakan

Konstruksi ruleset Landlock memisahkan dua keputusan. Handled mask menyatakan action yang menjadi terbatas, sedangkan rule individual menyatakan lokasi tempat subset action tersebut diizinkan. Enforcement kemudian mengubah ruleset menjadi domain yang diwarisi descendant.

Hasilnya adalah sandbox yang dapat dipasang tanpa privilege dan ditumpuk bersama kontrol keamanan yang sudah ada. Presisinya berasal dari scope eksplisit: handled rights ditolak kecuali diberikan izin, unhandled rights tidak diam-diam diklaim sebagai tercakup, layer turunan hanya menambah constraint, dan descriptor yang sudah ada mempertahankan authority yang terbentuk sebelum enforcement.