bwrap - manual referensi, opsi, contoh perintah


NAMA

bwrap - utilitas pengaturan kontainer

RINGKASAN

bwrap [OPTION...] [COMMAND]

KETERANGAN

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.

PILIHAN

Saat opsi digunakan berkali-kali, opsi terakhir menang, kecuali ditentukan lain.

Pilihan umum:

--help

Cetak bantuan dan keluar

--version

Versi cetak

--args FD

Parsing argumen yang dipisahkan nul dari deskriptor file yang diberikan. Opsi ini dapat digunakan berkali-kali untuk mengurai opsi dari berbagai sumber.

Opsi yang terkait dengan ruang nama kernel:

--unshare-user

Buat ruang nama pengguna baru

--unshare-user-try

Buat ruang nama pengguna baru jika memungkinkan, lewati saja

--unshare-ipc

Buat ruang nama ipc baru

--unshare-pid

Buat ruang nama pid baru

--unshare-net

Buat ruang nama jaringan baru

--unshare-uts

Buat namespace uts baru

--unshare-cgroup

Buat namespace cgroup baru

--unshare-cgroup-try

Buat ruang nama cgroup baru jika memungkinkan, lewati saja

--unshare-all

Batalkan berbagi semua kemungkinan ruang nama. Saat ini setara dengan: --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try

--share-net

Mempertahankan namespace jaringan, mengganti --unshare-all atau --unshare-net sebelumnya

--userns FD

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.

--userns2 FD

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.

--disable-userns

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.

--assert-userns-disabled

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.

--pidns FD

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.

--uid UID

Gunakan id pengguna khusus di kotak pasir (memerlukan --unshare-user)

--gid GID

Gunakan id grup khusus di kotak pasir (memerlukan --unshare-user)

--hostname HOSTNAME

Gunakan nama host khusus di kotak pasir (memerlukan --unshare-uts)

Opsi tentang penyiapan lingkungan:

--chdir DIR

Ubah direktori menjadi DIR

--setenv VAR VALUE

Tetapkan variabel lingkungan

--unsetenv VAR

Hapus variabel lingkungan

--clearenv

Batalkan setelan semua variabel lingkungan, kecuali untuk PWD dan yang selanjutnya disetel oleh --setenv

Opsi untuk memantau kotak pasir dari luar:

--lock-file DEST

Ambil kunci di DEST saat kotak pasir sedang berjalan. Opsi ini dapat digunakan berkali-kali untuk mengunci banyak file.

--sync-fd FD

Biarkan deskriptor file ini tetap terbuka saat kotak pasir sedang berjalan

Opsi terkait sistem file:

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.

--perms OCTAL

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.

--size BYTES

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.

--bind SRC DEST

Ikat pasang SRC jalur host di DEST

--bind-try SRC DEST

Sama dengan --bind tetapi mengabaikan SRC yang tidak ada

--dev-bind SRC DEST

Ikat pasang SRC jalur host di DEST, memungkinkan akses perangkat

--dev-bind-try SRC DEST

Sama dengan --dev-bind tetapi mengabaikan SRC yang tidak ada

--ro-bind SRC DEST

Ikat pasang jalur host SRC yang hanya dapat dibaca di DEST

--ro-bind-try SRC DEST

Sama dengan --ro-bind tetapi mengabaikan SRC yang tidak ada

--remount-ro DEST

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

--proc DEST

Pasang procfs di DEST

--dev DEST

Pasang devtmpfs baru di DEST

--tmpfs 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.

--mqueue DEST

Pasang mqueue baru di DEST

--dir 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.

--file FD DEST

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).

--bind-data FD DEST

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).

--ro-bind-data FD DEST

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).

--symlink SRC DEST

Buat symlink di DEST dengan target SRC

--chmod OCTAL PATH

Setel izin PATH, yang harus sudah ada, ke OCTAL.

Opsi penguncian:

--seccomp FD

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.

--add-seccomp-fd FD

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 LABEL

Exec Label dari kotak pasir. Pada sistem SELinux Anda dapat menentukan konteks SELinux untuk proses sandbox.

--file-label LABEL

Label file untuk konten kotak pasir sementara. Pada sistem SELinux Anda dapat menentukan konteks SELinux untuk konten sandbox.

--block-fd FD

Blokir kotak pasir saat membaca dari FD hingga beberapa data tersedia.

--userns-block-fd FD

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.

--info-fd FD

Tulis informasi dalam format JSON tentang kotak pasir ke FD.

--json-status-fd 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.

--new-session

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.

--die-with-parent

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.

--as-pid-1

Jangan buat proses dengan PID=1 di kotak pasir untuk menuai proses anak.

--cap-add CAP

Tambahkan kemampuan yang ditentukan saat menjalankan sebagai pengguna istimewa. Itu menerima nilai khusus ALL untuk menambahkan semua batas yang diizinkan.

--cap-drop CAP

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.

LINGKUNGAN

HOME

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.

STATUS KELUAR

Perintah bwrap mengembalikan status keluar dari proses aplikasi awal (pid 2 di kotak pasir).

CATATAN

1. Format "baris JSON": https://jsonlines.org/