Sebuah proses Linux dapat secara sukarela mengurangi akses yang sebenarnya masih diizinkan oleh UID, capability, mount namespace, dan lapisan keamanan lain. Landlock menerapkan mekanisme ini sebagai Linux Security Module yang dapat ditumpuk: proses membuat ruleset, menambahkan objek yang diizinkan, lalu menempatkan dirinya ke dalam domain Landlock.
Policy yang dihasilkan merupakan pembatasan tambahan. Landlock tidak memberikan akses yang sudah ditolak oleh DAC, ACL, SELinux, AppArmor, permission mount, atau kontrol aktif lainnya. Setelah diterapkan, lapisan Landlock tidak dapat dilepas dari thread tersebut; domain Landlock berikutnya hanya dapat menambah pembatasan.
Karakter ini membedakan Landlock dari perubahan ownership filesystem atau pembuatan mount namespace terpisah. Proses dapat mempersempit ambient authority miliknya tanpa mengubah policy tingkat sistem maupun topologi filesystem.
Ruleset menyatakan kelas akses yang dikendalikannya
landlock_create_ruleset() membuat file descriptor yang merepresentasikan ruleset. Field handled_access_fs, handled_access_net, dan scoped menyatakan kelas akses yang akan dibatasi oleh ruleset tersebut.
Untuk policy yang hanya mencakup filesystem, bentuknya secara konseptual:
struct landlock_ruleset_attr attr = {
.handled_access_fs =
LANDLOCK_ACCESS_FS_READ_FILE |
LANDLOCK_ACCESS_FS_READ_DIR |
LANDLOCK_ACCESS_FS_WRITE_FILE,
};
int ruleset_fd = landlock_create_ruleset(&attr, sizeof(attr), 0);Deklarasi handled right memiliki konsekuensi langsung. Untuk akses filesystem yang ditangani, ruleset berawal dari kondisi ditolak dan rule menambahkan izin bagi objek tertentu. Right yang tidak dimasukkan umumnya berada di luar policy lapisan tersebut, dengan semantik ABI khusus seperti LANDLOCK_ACCESS_FS_REFER sebagai pengecualian.
Perbedaan ini mencegah ruleset dianggap sebagai allowlist universal untuk filesystem padahal sebenarnya hanya mengendalikan kelompok operasi tertentu.
Path rule menempelkan izin pada hierarchy filesystem
Rule filesystem memakai LANDLOCK_RULE_PATH_BENEATH. Objek diidentifikasi melalui file descriptor, sebaiknya dibuka dengan O_PATH, bukan dengan menyimpan string pathname di dalam policy.
int dir_fd = open("/srv/app/data", O_PATH | O_CLOEXEC);
struct landlock_path_beneath_attr rule = {
.parent_fd = dir_fd,
.allowed_access =
LANDLOCK_ACCESS_FS_READ_FILE |
LANDLOCK_ACCESS_FS_READ_DIR,
};
landlock_add_rule(
ruleset_fd,
LANDLOCK_RULE_PATH_BENEATH,
&rule,
0
);Untuk handled right di atas, rule ini mengizinkan pembacaan di bawah /srv/app/data tetapi tidak mengizinkan LANDLOCK_ACCESS_FS_WRITE_FILE di sana. Hierarchy lain dapat menerima subset izin yang berbeda.
Policy terikat pada objek filesystem kernel dan traversal hierarchy, bukan pada pencocokan prefix teks. Bind mount dan OverlayFS karena itu memiliki konsekuensi berbeda: hierarchy hasil bind mount mengacu pada file dasar yang sama, sedangkan layer OverlayFS dan merged hierarchy diperlakukan sebagai hierarchy terpisah dalam policy Landlock.
Enforcement membuat domain keamanan baru
Setelah rule terisi, landlock_restrict_self() menerapkan ruleset pada thread pemanggil. Pada kernel sebelum Landlock ABI 11, pemanggil tanpa privilege biasanya mengaktifkan no_new_privs terlebih dahulu:
prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
landlock_restrict_self(ruleset_fd, 0);ABI 11 menambahkan LANDLOCK_RESTRICT_SELF_NO_NEW_PRIVS, sehingga enforcement yang berhasil dapat mengaktifkan no_new_privs sebagai bagian dari operasi tersebut. Kode yang menargetkan beberapa generasi kernel perlu menegosiasikan ABI Landlock yang sedang berjalan dan tidak mengasumsikan flag terbaru selalu tersedia.
Thread yang berhasil dibatasi masuk ke domain Landlock. Child yang dibuat sesudahnya mewarisi pembatasan tersebut. Penumpukan ruleset lain membuat domain yang menggabungkan pembatasan lama dan baru; hak yang sudah dihapus oleh lapisan sebelumnya tidak dapat dipulihkan.
Sifat monoton ini merupakan bagian inti model keamanan. Kode yang tidak dipercaya tidak dapat memakai API Landlock untuk memperluas authority miliknya.
File descriptor yang sudah terbuka membentuk batas penting
Right filesystem yang diperiksa ketika file dibuka berlaku pada operasi open setelah sandbox aktif. File yang sudah dibuka sebelum enforcement tidak dibatalkan secara retroaktif.
Batas tersebut penting dalam desain proses:
open sensitive fd
apply Landlock
use existing fdDescriptor yang sudah ada dapat tetap menyediakan operasi yang diperoleh sebelum proses masuk ke domain Landlock. Karena itu, Landlock bukan mekanisme untuk mencabut seluruh resource yang telah dimiliki proses.
Batas sandbox perlu memperhitungkan descriptor warisan, descriptor yang dibuka saat inisialisasi, UNIX socket, pipe, shared memory, serta capability lain yang sudah ada di dalam proses. Menutup descriptor yang tidak diperlukan sebelum enforcement mengurangi authority yang berada di luar pemeriksaan path berikutnya.
Cakupan filesystem bersifat eksplisit, bukan universal
Landlock terus bertambah pada versi ABI berikutnya, tetapi tidak memediasi setiap operasi terkait filesystem. Dokumentasi kernel saat ini mencantumkan operasi seperti chdir(2), stat(2), flock(2), chmod(2), chown(2), setxattr(2), utime(2), fcntl(2), dan access(2) sebagai tindakan yang saat ini belum dapat dibatasi melalui right filesystem Landlock.
Batas ini relevan bagi keamanan. Policy yang mengendalikan pembacaan, penulisan, pembuatan, penghapusan, eksekusi file, dan sejumlah operasi lain tidak tepat disebut mengendalikan seluruh operasi metadata atau descriptor.
Right yang tersedia juga bergantung pada ABI Landlock yang didukung kernel aktif. Aplikasi perlu memeriksa versi ABI dan menyesuaikan fitur policy. Menganggap header saat kompilasi sebagai bukti dukungan runtime dapat menyebabkan setup gagal atau policy yang lebih lemah dari target.
Network rule memakai port sebagai objek policy
Landlock tidak terbatas pada akses filesystem. Network rule ditambahkan pada versi ABI yang lebih baru. Sebuah rule LANDLOCK_RULE_NET_PORT mengaitkan network action yang diizinkan dengan port.
Ruleset menyatakan network right yang ditangani, lalu menambahkan port tertentu:
struct landlock_net_port_attr net_rule = {
.allowed_access = LANDLOCK_ACCESS_NET_CONNECT_TCP,
.port = 443,
};
landlock_add_rule(
ruleset_fd,
LANDLOCK_RULE_NET_PORT,
&net_rule,
0
);Kumpulan network right yang tersedia bergantung pada ABI. ABI terbaru memperluas cakupan di luar operasi TCP awal. Seperti policy filesystem, kode portabel perlu menegosiasikan dukungan dan tidak mengirim right yang tidak dikenal kernel lama.
Kontrol jaringan Landlock melengkapi, bukan menggantikan, network namespace, firewall policy, seccomp, atau otorisasi tingkat service. Setiap mekanisme membatasi bagian sistem yang berbeda.
Landlock berkomposisi dengan lapisan keamanan yang sudah ada
Landlock dapat ditumpuk. Proses yang sudah tunduk pada permission UNIX biasa dan LSM lain tetap tunduk pada kontrol tersebut setelah masuk ke domain Landlock.
Akses efektif merupakan irisan:
effective access
= system-wide permission
AND existing security layers
AND Landlock domainKomposisi ini berguna untuk aplikasi yang sudah berjalan di bawah policy distribusi atau administrator. Aplikasi dapat menambahkan batas bagi dirinya sendiri tanpa harus menguasai konfigurasi keamanan global host.
Konsekuensinya, rule Landlock yang mengizinkan sebuah operasi tidak membuktikan operasi itu akan berhasil. Lapisan lain masih dapat menolaknya.
Batas yang berguna adalah authority minimum setelah inisialisasi
Landlock cocok untuk proses yang membutuhkan akses lebih luas saat inisialisasi dibanding saat steady state. Sebuah service dapat memuat konfigurasi dan library, membuka resource listening, menyiapkan state runtime, lalu masuk ke domain yang hanya mengekspos hierarchy file dan operasi jaringan yang diperlukan sesudahnya.
Nilai keamanannya berasal dari pengurangan ambient authority sebelum proses menangani input yang kurang tepercaya atau masuk ke request loop jangka panjang. Jika bug memory-safety atau logic kemudian memicu operasi filesystem atau jaringan yang tidak dimaksudkan, kernel mengevaluasinya terhadap domain Landlock tambahan.
Jaminan tersebut tetap dibatasi oleh right yang memang dimediasi Landlock, ABI yang tersedia pada kernel aktif, dan resource yang diperoleh sebelum enforcement. Policy Landlock yang presisi karena itu merupakan lapisan pengurangan hak yang tidak dapat dibatalkan, bukan batas isolasi lengkap.