bwrap - utilitas pengaturan kontainer
bwrap [OPTION...] [COMMAND]
bwrap adalah bantuan istimewa untuk penyiapan penampung. Anda tidak mungkin menggunakannya langsung dari commandline, meskipun itu mungkin.
Ini bekerja dengan membuat namespace sistem file baru yang benar-benar kosong di mana root berada di tmpfs yang tidak terlihat dari host, dan yang akan dibersihkan secara otomatis saat proses terakhir keluar. Anda kemudian dapat menggunakan opsi baris perintah untuk membangun sistem file root dan lingkungan proses agar perintah dapat dijalankan di namespace.
Secara default, bwrap membuat ruang nama pemasangan baru untuk kotak pasir. Opsional itu juga mengatur ruang nama pengguna, ipc, pid, jaringan dan uts baru (tetapi perhatikan ruang nama pengguna diperlukan jika bwrap tidak diinstal root setuid). Aplikasi di sandbox dapat dibuat untuk dijalankan dengan UID dan GID yang berbeda.
Jika diperlukan (mis. saat menggunakan namespace PID) bwrap sedang menjalankan proses pid 1 minimal di kotak pasir yang bertanggung jawab untuk menuai zombie. Itu juga mendeteksi ketika proses aplikasi awal (pid 2) mati dan melaporkan status keluarnya kembali ke pemijahan asli. Proses pid 1 keluar untuk membersihkan kotak pasir ketika tidak ada proses lain di kotak pasir yang tersisa.
Saat opsi digunakan berkali-kali, opsi terakhir menang, kecuali ditentukan lain.
Cetak bantuan dan keluar
Versi cetak
Parsing argumen yang dipisahkan nul dari deskriptor file yang diberikan. Opsi ini dapat digunakan berkali-kali untuk mengurai opsi dari berbagai sumber.
Buat ruang nama pengguna baru
Buat ruang nama pengguna baru jika memungkinkan, lewati saja
Buat ruang nama ipc baru
Buat ruang nama pid baru
Buat ruang nama jaringan baru
Buat namespace uts baru
Buat namespace cgroup baru
Buat ruang nama cgroup baru jika memungkinkan, lewati saja
Batalkan berbagi semua kemungkinan ruang nama. Saat ini setara dengan: --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try
Mempertahankan namespace jaringan, mengganti --unshare-all atau --unshare-net sebelumnya
Gunakan ruang nama pengguna yang ada alih-alih membuat yang baru. Namespace harus memenuhi persyaratan izin untuk setns(), yang umumnya berarti bahwa namespace tersebut harus turunan dari namespace pengguna yang saat ini aktif, yang dimiliki oleh pengguna yang sama.
Ini tidak kompatibel dengan --unshare-user, dan tidak berfungsi di bubblewrap versi setuid.
Setelah menyiapkan namespace baru, alihkan ke namespace yang ditentukan. Agar ini berfungsi, namespace yang ditentukan harus turunan dari namespace pengguna yang digunakan untuk penyiapan, jadi ini hanya berguna jika dikombinasikan dengan --userns.
Ini berguna karena terkadang bubblewrap sendiri membuat ruang nama pengguna bersarang (untuk mengatasi beberapa masalah kernel) dan --userns2 dapat digunakan untuk memasukkannya.
Cegah proses di kotak pasir membuat ruang nama pengguna lebih lanjut, sehingga tidak dapat mengatur ulang ruang nama sistem file atau melakukan modifikasi ruang nama lain yang lebih kompleks. Ini saat ini diterapkan dengan menyetel sysctl user.max_user_namespaces ke 1, lalu memasukkan namespace pengguna bersarang yang tidak dapat menaikkan batas tersebut di namespace luar. Opsi ini memerlukan --unshare-user, dan tidak berfungsi di bubblewrap versi setuid.
Konfirmasikan bahwa proses di kotak pasir telah dicegah untuk membuat ruang nama pengguna lebih lanjut, tetapi tanpa mengambil tindakan khusus apa pun untuk mencegahnya. Misalnya, ini dapat digabungkan dengan --userns untuk memeriksa apakah ruang nama pengguna tertentu telah disiapkan untuk mencegah pembuatan ruang nama pengguna lebih lanjut.
Gunakan ruang nama pid yang ada alih-alih membuatnya. Ini sering digunakan dengan --userns, karena namespace pid harus dimiliki oleh namespace pengguna yang sama dengan yang digunakan bwrap.
Perhatikan bahwa ini dapat digabungkan dengan --unshare-pid, dan dalam hal ini berarti kotak pasir akan berada di ruang nama pidnya sendiri, yang merupakan anak dari yang diteruskan dalam satu.
Gunakan id pengguna khusus di kotak pasir (memerlukan --unshare-user)
Gunakan id grup khusus di kotak pasir (memerlukan --unshare-user)
Gunakan nama host khusus di kotak pasir (memerlukan --unshare-uts)
Ubah direktori menjadi DIR
Tetapkan variabel lingkungan
Hapus variabel lingkungan
Batalkan setelan semua variabel lingkungan, kecuali untuk PWD dan yang selanjutnya disetel oleh --setenv
Ambil kunci di DEST saat kotak pasir sedang berjalan. Opsi ini dapat digunakan berkali-kali untuk mengunci banyak file.
Biarkan deskriptor file ini tetap terbuka saat kotak pasir sedang berjalan
Ini semua adalah operasi yang memodifikasi sistem file secara langsung, atau memasang barang di sistem file. Ini diterapkan dalam urutan yang diberikan sebagai argumen.
Setiap direktori induk yang hilang yang diperlukan untuk membuat tujuan yang ditentukan secara otomatis dibuat sesuai kebutuhan. Izin mereka biasanya diatur ke 0755 (rwxr-xr-x). Namun, jika opsi --perms aktif, dan menetapkan izin untuk grup atau lainnya ke nol, direktori induk yang baru dibuat juga akan menetapkan izin yang sesuai ke nol. --size mengubah ukuran dudukan yang dibuat saat mendahului tindakan --tmpfs; --perm dan --size dapat digabungkan.
Opsi ini tidak melakukan apa pun dengan sendirinya, dan harus diikuti oleh salah satu opsi yang terpengaruh. Ini mengatur izin untuk operasi selanjutnya ke OCTAL. Operasi selanjutnya tidak terpengaruh: misalnya,
--perms 0700 --tmpfs /a --tmpfs /b
Note that --perms and --size can be combined:
--perms 0700 --size 10485760 --tmpfs /s
will apply permissions as well as a maximum size to the created tmpfs.
Opsi ini tidak melakukan apa-apa sendiri, dan harus diikuti oleh --tmpfs. Ini menetapkan ukuran dalam byte untuk tmpfs berikutnya. Misalnya,
--size 10485760 --tmpfs /tmp
akan membuat tmpfs di /tmp berukuran 10MiB. Operasi selanjutnya tidak terpengaruh: misalnya,
--size 10485760 --tmpfs /a --tmpfs /b
akan memasang /a dengan ukuran 10MiB, lalu kembali ke ukuran default untuk /b.
Perhatikan bahwa --perms dan --size dapat digabungkan:
--size 10485760 --perms 0700 --tmpfs /s
akan menerapkan izin serta ukuran maksimum ke tmpfs yang dibuat.
Ikat pasang SRC jalur host di DEST
Sama dengan --bind tetapi mengabaikan SRC yang tidak ada
Ikat pasang SRC jalur host di DEST, memungkinkan akses perangkat
Sama dengan --dev-bind tetapi mengabaikan SRC yang tidak ada
Ikat pasang jalur host SRC yang hanya dapat dibaca di DEST
Sama dengan --ro-bind tetapi mengabaikan SRC yang tidak ada
Pasang kembali jalur DEST sebagai hanya dapat dibaca. Ini hanya berfungsi pada titik pemasangan yang ditentukan, tanpa mengubah titik pemasangan lainnya di bawah jalur yang ditentukan
Pasang procfs di DEST
Pasang devtmpfs baru di DEST
Pasang tmpf baru di DEST. Jika opsi sebelumnya adalah --perms, ini menyetel mode tmpfs. Jika tidak, tmpfs memiliki mode 0755. Jika opsi sebelumnya adalah --size, ini menetapkan ukuran tmpfs dalam byte. Jika tidak, tmpfs memiliki ukuran default.
Pasang mqueue baru di DEST
Buat direktori di DEST. Jika direktori sudah ada, izinnya tidak diubah, abaikan --perms (gunakan --chmod jika izin direktori yang ada perlu diubah). Jika direktori baru dibuat dan opsi sebelumnya adalah --perms, mode direktori akan disetel. Jika tidak, direktori yang baru dibuat memiliki mode 0755.
Salin dari deskriptor file FD ke DEST. Jika opsi sebelumnya adalah --perms, ini menyetel mode file baru. Jika tidak, file memiliki mode 0666 (perhatikan bahwa ini tidak sama dengan --bind-data).
Salin dari deskriptor file FD ke file yang terpasang di DEST. Jika opsi sebelumnya adalah --perms, ini menyetel mode file baru. Jika tidak, file memiliki mode 0600 (perhatikan bahwa ini tidak sama dengan --file).
Salin dari FD deskriptor file ke file yang hanya-di-bind-mount read-only di DEST. Jika opsi sebelumnya adalah --perms, ini menyetel mode file baru. Jika tidak, file memiliki mode 0600 (perhatikan bahwa ini tidak sama dengan --file).
Buat symlink di DEST dengan target SRC
Setel izin PATH, yang harus sudah ada, ke OCTAL.
Muat dan gunakan aturan seccomp dari FD. Aturan harus dalam bentuk program cBPF yang dikompilasi, seperti yang dihasilkan oleh seccomp_export_bpf. Jika opsi ini diberikan lebih dari satu kali, hanya opsi terakhir yang digunakan. Gunakan --add-seccomp-fd jika diperlukan beberapa program seccomp.
Muat dan gunakan aturan seccomp dari FD. Aturan harus dalam bentuk program cBPF yang dikompilasi, seperti yang dihasilkan oleh seccomp_export_bpf. Opsi ini dapat diulangi, dalam hal ini semua program seccomp akan dimuat dalam urutan yang diberikan (perhatikan bahwa kernel akan mengevaluasinya dalam urutan terbalik, sehingga program terakhir pada baris perintah bwrap dievaluasi terlebih dahulu). Semuanya, kecuali mungkin yang terakhir, harus mengizinkan penggunaan prctl PR_SET_SECCOMP. Opsi ini tidak dapat digabungkan dengan --seccomp.
Exec Label dari kotak pasir. Pada sistem SELinux Anda dapat menentukan konteks SELinux untuk proses sandbox.
Label file untuk konten kotak pasir sementara. Pada sistem SELinux Anda dapat menentukan konteks SELinux untuk konten sandbox.
Blokir kotak pasir saat membaca dari FD hingga beberapa data tersedia.
Jangan menginisialisasi ruang nama pengguna tetapi tunggu di FD hingga siap. Ini memungkinkan proses eksternal (seperti newuidmap/newgidmap) untuk mengatur ruang nama pengguna sebelum digunakan oleh proses kotak pasir.
Tulis informasi dalam format JSON tentang kotak pasir ke FD.
Beberapa dokumen JSON ditulis ke FD, satu per baris (format "baris JSON"[1]). Setiap baris adalah objek JSON tunggal. Setelah bwrap memulai proses anak di dalam kotak pasir, ia menulis objek dengan anggota anak-pid ke --json-status-fd (ini menduplikasi --info-fd yang lebih lama). Nilai yang sesuai adalah ID proses dari proses anak di namespace pid tempat bwrap dijalankan. Jika tersedia, ID namespace juga disertakan dalam objek dengan pid anak; sekali lagi, ini menduplikasi --info-fd yang lama. Saat proses anak di dalam kotak pasir keluar, bwrap menulis objek dengan anggota kode keluar, lalu menutup --json-status-fd. Nilai yang sesuai dengan kode keluar adalah status keluar anak, dalam pengkodean shell biasa (n jika keluar secara normal dengan status n, atau 128+n jika dimatikan oleh sinyal n). Anggota lain dapat ditambahkan ke objek tersebut di versi bwrap yang akan datang, dan objek JSON lainnya dapat ditambahkan sebelum atau sesudah objek saat ini, sehingga pembaca harus mengabaikan anggota dan objek yang tidak mereka pahami.
Buat sesi terminal baru untuk kotak pasir (panggilan setsid()). Ini memutus kotak pasir dari terminal pengontrol yang berarti kotak pasir tidak dapat misalnya menyuntikkan input ke terminal.
Catatan: Di kotak pasir umum, jika Anda tidak menggunakan --new-session, disarankan untuk menggunakan seccomp untuk melarang TIOCSTI ioctl, jika tidak, aplikasi dapat memasukkan input keyboard ke terminal.
Memastikan proses anak (COMMAND) mati ketika bwraps parent mati. Bunuh (SIGKILL) semua proses kotak pasir bwrap secara berurutan dari induk ke anak termasuk proses PERINTAH saat bwrap atau induk bwrap mati. Lihat prctl, PR_SET_PDEATHSIG.
Jangan buat proses dengan PID=1 di kotak pasir untuk menuai proses anak.
Tambahkan kemampuan yang ditentukan saat menjalankan sebagai pengguna istimewa. Itu menerima nilai khusus ALL untuk menambahkan semua batas yang diizinkan.
Jatuhkan kemampuan yang ditentukan saat menjalankan sebagai pengguna istimewa. Itu menerima nilai khusus ALL untuk menghapus semua batas. Secara default tidak ada batas yang tersisa dalam proses kotak pasir. Opsi --cap-add dan --cap-drop diproses sesuai urutan yang ditentukan pada baris perintah. Harap berhati-hati dengan urutan yang ditentukan.
Digunakan sebagai cwd di kotak pasir jika --chdir belum ditentukan secara eksplisit dan cwd saat ini tidak ada di dalam kotak pasir. Opsi --setenv dapat digunakan untuk mengganti nilai yang digunakan di sini.
Perintah bwrap mengembalikan status keluar dari proses aplikasi awal (pid 2 di kotak pasir).
1. Format "baris JSON": https://jsonlines.org/