Petunjuk dan konteks
Sebuah alat command-line harus membaca sekumpulan kecil file input, menulis ke direktori output yang ditentukan, dan menjalankan plugin yang tidak tepercaya. Penerapan (deployment) tidak dapat memberikan hak istimewa tambahan, dan kernel mungkin hanya mengekspos ABI Landlock versi lama. Bagaimana Anda akan merancang sandbox, memverifikasi bahwa aturan berfungsi, dan menghindari anggapan bahwa seperangkat aturan yang lebih ketat adalah bukti bahwa seluruh sistem aman?
Pertanyaan ini cocok untuk peran Linux, keamanan, build-system, dan eksekusi multi-tenant. Sinyal yang dinilai adalah pemahaman tentang Landlock sebagai mekanisme pembatasan diri proses yang dapat ditumpuk (stackable) dan tanpa hak istimewa (unprivileged), bukan sekadar menghafal satu struktur C.
Hal yang diuji oleh pewawancara
- Apakah Anda membedakan domain aturan, jenis aturan, hak akses, dan cakupan proses.
- Apakah Anda memeriksa (probe) ABI kernel sebelum menyusun set izin yang didukung.
- Apakah Anda mengetahui bahwa file descriptor yang dibuka sebelum pembatasan memerlukan audit terpisah.
- Apakah Anda mempertimbangkan fork, exec, thread, dan pewarisan proses anak (child-process inheritance).
- Apakah penanganan kegagalan, observabilitas, rollback, dan pengujian merupakan bagian dari peluncuran.
Pertanyaan klarifikasi awal
- Jalur mana yang memerlukan kapabilitas baca (read), buat (create), hapus (delete), eksekusi (execute), dan jaringan?
- Bisakah plugin melakukan fork, exec, membuat thread, atau menerima file descriptor yang diwariskan?
- Berapa versi kernel minimum dan penurunan (downgrade) keamanan apa yang dapat diterima?
- Apakah log, file input, soket, atau perangkat dibuka sebelum proses dibatasi?
- Apakah akses file merupakan satu-satunya batasan, atau apakah seccomp, kontainer, atau MAC juga diperlukan?
Jawaban 30 detik
“Saya akan memeriksa ABI Landlock terlebih dahulu, membuat domain aturan, hanya memberikan akses baca ke pohon input dan akses buat/tulis ke pohon output, kemudian membatasi proses saat ini sehingga turunannya mewarisi kebijakan tersebut. File descriptor yang dibuka sebelum pembatasan memerlukan audit eksplisit karena mungkin tetap dapat digunakan. Saya akan membangun set izin umum terkecil untuk ABI yang lebih lama; jika kapabilitas isolasi wajib tidak tersedia, alat tersebut menolak berjalan atau masuk ke mode baca-saja berisiko rendah yang dicatat dengan jelas, alih-alih berjalan tanpa sandbox secara diam-diam.”
Pembahasan mendalam langkah demi langkah
Langkah 1: Tentukan model ancaman dan hak minimum
Buat daftar tindakan yang dapat dilakukan plugin: membaca file host, menimpa output, mengeksekusi program lain, menghapus direktori, mengakses jaringan, atau menyalahgunakan deskriptor yang diwariskan. Petakan setiap tindakan ke hak sistem file yang didukung Landlock. Berikan hanya izin baca yang diperlukan di bawah pohon input dan tulis atau buat di bawah pohon output. Biarkan setiap hak yang tidak diberikan tetap ditolak daripada membuka root dan mengandalkan pemeriksaan aplikasi.
Langkah 2: Periksa ABI
Landlock menambahkan hak akses di berbagai versi ABI. Saat startup, baca ABI yang tersedia dan bagi kebijakan yang diinginkan menjadi hak wajib dan opsional. Tambahkan hak opsional hanya jika didukung. Hak yang tidak dikenal dapat menyebabkan pembuatan aturan gagal, sehingga pembangun kebijakan harus peka terhadap kapabilitas (capability-aware). Catat ABI yang terdeteksi, versi kebijakan, dan hak efektif sebagai field terstruktur.
Langkah 3: Bangun domain aturan dan ikat jalur (paths)
Buat domain aturan, buka deskriptor direktori tepercaya selama startup, dan ikat aturan jalur dengan hak terkecil yang diperlukan untuk setiap pohon. Membuka deskriptor tersebut sebelum kode plugin berjalan mencegah penyiapan kebijakan menyelesaikan jalur yang dikendalikan penyerang. Setelah menyusun aturan, batasi proses saat ini dan uji perilaku pewarisan thread dan panggilan exec berikutnya.
Langkah 4: Audit sumber daya yang terbuka dan pewarisan
Landlock membatasi permintaan akses berikutnya; deskriptor yang dibuka sebelum pembatasan mungkin masih dapat digunakan. Tutup deskriptor yang tidak diperlukan, tandai deskriptor yang diperlukan sebagai sumber daya terkontrol, dan cegah deskriptor yang tidak terkait diteruskan. Tinjau input dan output standar, log, soket, handle direktori, dan deskriptor yang diberikan ke plugin. Uji fork, exec, thread, dan proses anak secara terpisah.
Langkah 5: Tentukan kegagalan dan pertahanan berlapis (defense in depth)
Landlock tidak secara otomatis membatasi setiap panggilan sistem (system call), operasi jaringan, atau kapabilitas yang sudah dimiliki oleh proses. Tambahkan seccomp, kontainer, user namespaces, atau MAC sistem jika model ancaman memerlukannya. Jika domain aturan wajib tidak dapat dibuat, pilih penolakan, mode baca-saja, atau gerbang persetujuan. Setiap downgrade harus mengeluarkan peringatan beserta alasannya; tidak boleh mengeksekusi plugin yang tidak tepercaya secara diam-diam tanpa batasan keamanan.
Langkah 6: Verifikasi, amati, dan lakukan rollback
Gunakan fixture CI untuk mencakup matriks izin/tolak (allow/deny): pembacaan input berhasil, penulisan output berhasil, pembacaan di luar pohon yang diizinkan gagal, dan operasi hapus atau eksekusi gagal sesuai rancangan. Ulangi pemeriksaan ini pada proses anak. Catat ABI, hash kebijakan, jumlah operasi yang ditolak, dan alasan keluar (exit reasons). Selama canary deployment, ukur penolakan palsu (false denials); saat plugin memerlukan hak lain, perbarui daftar izin dan pengujian alih-alih membuka direktori induknya. Rollback dapat menonaktifkan plugin atau memulihkan runner versi lama sambil tetap mempertahankan peringatan kegagalan sandbox.
Contoh jawaban berkualitas tinggi
Saya akan mulai dengan inventarisasi izin untuk kebutuhan file, eksekusi, dan pewarisan plugin, lalu memeriksa ABI Landlock pada kernel target. Domain aturan memberikan izin baca pada pohon input serta buat dan tulis pada pohon output; hak opsional diaktifkan satu per satu, sementara kapabilitas wajib yang hilang akan membuat eksekusi tidak dapat dijalankan. Sebelum pembatasan, saya menutup deskriptor yang tidak perlu dan mengaudit stream standar, log, soket, dan deskriptor yang disediakan plugin, kemudian memverifikasi perilaku fork, exec, thread, dan proses anak.
Setelah membatasi proses, saya akan menjalankan matriks allow/deny dengan plugin yang sebenarnya dan mencatat ABI, versi kebijakan, operasi yang ditolak, dan alasan downgrade. Landlock menyediakan batasan sistem file yang dapat ditumpuk, bukan sandbox hak istimewa atau jaringan yang lengkap, sehingga seccomp, kontainer, user namespaces, atau MAC mungkin masih diperlukan. Jika kebijakan inti tidak dapat dibuat, runner menolak atau masuk ke mode baca-saja dengan peringatan eksplisit; runner tidak pernah melewati kebijakan secara diam-diam.
Kesalahan umum
- Memperlakukan Landlock sebagai isolasi hak istimewa → Ini terutama membatasi akses terkontrol berikutnya → gabungkan kontrol sesuai dengan model ancaman.
- Mengabaikan perbedaan ABI → Hak-hak baru mungkin tidak dikenal pada kernel yang lebih lama → periksa dan bangun kebijakan umum terkecil.
- Membuka segalanya sebelum menerapkan sandbox → Deskriptor yang ada mungkin tetap dapat digunakan → tutup, audit, dan hentikan pewarisan deskriptor yang tidak terkait terlebih dahulu.
- Mengizinkan pohon induk dan memercayai pemeriksaan aplikasi → Plugin dapat menjelajahi lebih banyak jalur → berikan hak per pohon dan per operasi.
- Melanjutkan secara diam-diam setelah kegagalan penyiapan → Operator tidak dapat melihat bahwa isolasi hilang → tolak, gunakan mode baca-saja, atau wajibkan persetujuan dengan peringatan.
- Hanya menguji proses utama → fork, exec, dan thread mengubah batasan → uji setiap jalur pewarisan dengan kasus penolakan.
Pertanyaan lanjutan
Bisakah Landlock membatasi file yang sudah dibuka sebelumnya?
Ini tidak boleh dianggap sebagai mekanisme penutupan otomatis. Deskriptor yang dibuka sebelum pembatasan mungkin tetap dapat digunakan, jadi tutup deskriptor yang tidak diperlukan sebelum menerapkan kebijakan, kendalikan penerusan deskriptor, dan sertakan handle yang dipertahankan dalam audit dan pengujian.
Bagaimana jika kernel tidak memiliki salah satu hak akses yang diminta?
Pisahkan hak wajib dari hak opsional. Periksa ABI, tambahkan hak opsional yang didukung, dan tolak startup atau masuk ke mode aman dengan peringatan eksplisit jika hak wajib tidak ada. Jangan mengabaikan kegagalan pembuatan aturan atau menulis hak yang tidak dikenal ke dalam aturan.
Mengapa menambahkan seccomp atau kontainer?
Kekuatan Landlock terletak pada pembatasan diri tanpa hak istimewa yang berfokus pada sistem file. Ini tidak mencakup setiap panggilan sistem, jalur jaringan, atau kebijakan host. Seccomp, user namespaces, kontainer, dan MAC dapat melengkapi batasan panggilan, identitas, dan tingkat sistem tersebut; rancangan gabungan ini tetap memerlukan pengujian pewarisan dan jalur kegagalan.