bwrap - kézikönyv, opciók, parancspéldák


NÉV

bwrap - konténerbeállító segédprogram

SZINOPSZIS

bwrap [OPTION...] [COMMAND]

LEÍRÁS

A bwrap a tároló beállításának kiemelt segítője. Nem valószínű, hogy közvetlenül a parancssorból fogja használni, bár ez lehetséges.

Úgy működik, hogy létrehoz egy új, teljesen üres fájlrendszer-névteret, ahol a gyökér egy tmpfs-en van, amely nem látható a gazdagéptől, és amely automatikusan megtisztul, amikor az utolsó folyamat kilép. Ezután a parancssori opciók segítségével létrehozhatja a gyökér fájlrendszert és a folyamatkörnyezetet a parancs névtérben való futtatásához.

Alapértelmezés szerint a bwrap új csatolási névteret hoz létre a sandbox számára. Opcionálisan új felhasználói, ipc, pid, hálózati és uts névtereket is beállít (de vegye figyelembe, hogy a felhasználói névtér szükséges, ha a bwrap nincs telepítve setuid root). A sandboxban lévő alkalmazás más UID-vel és GID-vel is futtatható.

Szükség esetén (például PID névtér használatakor) a bwrap minimális pid 1 folyamatot futtat a sandboxban, amely a zombik learatásáért felelős. Azt is érzékeli, ha a kezdeti alkalmazási folyamat (pid 2) leáll, és visszaküldi a kilépési állapotát az eredeti spawnernek. A pid 1 folyamat kilép, hogy megtisztítsa a homokozót, ha már nincs más folyamat a homokozóban.

LEHETŐSÉGEK

Ha az opciókat többször használja, az utolsó opció nyer, hacsak nincs másképp megadva.

Általános opciók:

--help

Súgó nyomtatása és kilépés

--version

Nyomtatott változat

--args FD

Elemezze a null-elválasztott argumentumokat az adott fájlleíróból. Ez az opció többször használható a több forrásból származó opciók elemzéséhez.

A kernel névtereivel kapcsolatos beállítások:

--unshare-user

Hozzon létre egy új felhasználói névteret

--unshare-user-try

Ha lehetséges, hozzon létre egy új felhasználói névteret, különben hagyja ki

--unshare-ipc

Hozzon létre egy új ipc névteret

--unshare-pid

Hozzon létre egy új pid névteret

--unshare-net

Hozzon létre egy új hálózati névteret

--unshare-uts

Hozzon létre egy új uts névteret

--unshare-cgroup

Hozzon létre egy új cgroup névteret

--unshare-cgroup-try

Ha lehetséges, hozzon létre egy új cgroup névteret, különben kihagyja

--unshare-all

Az összes lehetséges névtér megosztásának megszüntetése. Jelenleg a következővel egyenértékű: --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try

--share-net

Megőrzi a hálózat névterét, felülírva a korábbi --unshare-all vagy --unshare-net

--userns FD

Használjon meglévő felhasználói névteret új létrehozása helyett. A névtérnek meg kell felelnie a setns() engedélykövetelményeinek, ami általában azt jelenti, hogy az aktuálisan aktív felhasználói névtér leszármazottjának kell lennie, és a tulajdonosa ugyanaz a felhasználó.

Ez nem kompatibilis az --unshare-user-el, és nem működik a bubblewrap setuid verziójában.

--userns2 FD

Az új névtér beállítása után váltson át a megadott névtérre. Ahhoz, hogy ez működjön, a megadott névtérnek a beállításhoz használt felhasználói névtér leszármazottjának kell lennie, ezért ez csak a --userns-szel együtt hasznos.

Ez azért hasznos, mert néha maga a bubblewrap beágyazott felhasználói névtereket hoz létre (néhány kernelprobléma megkerülésére), és a --userns2 használható ezek megadására.

--disable-userns

Akadályozza meg, hogy a homokozóban lévő folyamat további felhasználói névtereket hozzon létre, hogy ne tudja átrendezni a fájlrendszer névterét vagy más bonyolultabb névteret módosítani. Ez jelenleg úgy valósul meg, hogy a user.max_user_namespaces sysctl értéket 1-re állítja, majd beír egy beágyazott felhasználói névteret, amely nem tudja növelni ezt a korlátot a külső névtérben. Ehhez a beállításhoz --unshare-user szükséges, és nem működik a bubblewrap setuid verziójában.

--assert-userns-disabled

Győződjön meg arról, hogy a homokozóban lévő folyamat nem hoz létre további felhasználói névtereket, de anélkül, hogy ezt megakadályozná. Ez például kombinálható a --userns paraméterrel, így ellenőrizhető, hogy az adott felhasználói névtér már be van állítva, így megakadályozva további felhasználói névterek létrehozását.

--pidns FD

Használjon meglévő pid névteret egy létrehozása helyett. Ezt gyakran használják a --userns mellett, mert a pid névtérnek ugyanannak a felhasználói névtérnek kell lennie, amelyet a bwrap használ.

Megjegyzendő, hogy ez kombinálható a --unshare-pid paraméterrel, és ebben az esetben ez azt jelenti, hogy a sandbox a saját pid névterében lesz, ami az átadott egyben gyermeke.

--uid UID

Egyéni felhasználói azonosító használata a homokozóban (--unshare-user szükséges)

--gid GID

Egyéni csoportazonosító használata a sandboxban (--unshare-user szükséges)

--hostname HOSTNAME

Egyéni gazdagépnév használata a homokozóban (--unshare-uts szükséges)

A környezet beállításának lehetőségei:

--chdir DIR

Módosítsa a könyvtárat DIR-re

--setenv VAR VALUE

Állítson be egy környezeti változót

--unsetenv VAR

Egy környezeti változó beállításának visszavonása

--clearenv

Törölje az összes környezeti változó beállítását, kivéve a PWD értéket és azokat, amelyeket ezt követően a --setenv állít be.

Lehetőségek a homokozó kívülről történő megfigyelésére:

--lock-file DEST

A homokozó működése közben zárja le a DEST-et. Ez az opció többször használható több fájl zárolásához.

--sync-fd FD

Tartsa nyitva ezt a fájlleírót, amíg a sandbox fut

Fájlrendszerrel kapcsolatos lehetőségek:

Ezek mind olyan műveletek, amelyek közvetlenül módosítják a fájlrendszert, vagy beillesztenek dolgokat a fájlrendszerbe. Ezeket az argumentumként megadott sorrendben alkalmazzuk.

A megadott cél létrehozásához szükséges hiányzó szülőkönyvtárak szükség szerint automatikusan létrejönnek. Engedélyeik általában 0755-re vannak beállítva (rwxr-xr-x). Ha azonban a --perms opció érvényben van, és nullára állítja a csoport vagy egyéb engedélyeket, akkor az újonnan létrehozott szülőkönyvtárak megfelelő engedélye is nullára lesz állítva. A --size módosítja a létrehozott csatolás méretét, amikor egy --tmpfs művelet előtt áll; --perms és --size kombinálható.

--perms OCTAL

Ez az opció önmagában semmit sem tesz, és követnie kell az általa érintett opciók egyikét. A következő művelet engedélyeit OCTAL-ra állítja. A későbbi műveleteket ez nem érinti: pl.

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

Ez a beállítás önmagában semmit sem csinál, és a --tmpfs-nek kell követnie. A következő tmpfs méretét byte-ban állítja be. Például,

--size 10485760 --tmpfs /tmp 

létrehoz egy 10 MiB méretű tmpfs fájlt a /tmp mappában. A későbbi műveleteket ez nem érinti: pl.

--size 10485760 --tmpfs /a --tmpfs /b 

felcsatolja az /a fájlt 10 MB méretű, majd visszatér a /b alapértelmezett méretéhez.

Vegye figyelembe, hogy a --perms és a --size kombinálható:

--size 10485760 --perms 0700 --tmpfs /s 

engedélyeket és maximális méretet fog alkalmazni a létrehozott tmpfs-re.

--bind SRC DEST

Csatlakoztassa az SRC gazdagép elérési útját a DEST-re

--bind-try SRC DEST

Egyenlő a --bind értékkel, de figyelmen kívül hagyja a nem létező SRC-t

--dev-bind SRC DEST

Csatlakoztassa az SRC gazdagép elérési útját a DEST-hez, lehetővé téve az eszköz elérését

--dev-bind-try SRC DEST

Egyenlő a --dev-bind értékkel, de figyelmen kívül hagyja a nem létező SRC-t

--ro-bind SRC DEST

A gazdagép elérési út SRC kötési csatolása csak olvasható a DEST-en

--ro-bind-try SRC DEST

Egyenlő a --ro-bind értékkel, de figyelmen kívül hagyja a nem létező SRC-t

--remount-ro DEST

Csatlakoztassa újra a DEST elérési utat írásvédettként. Csak a megadott beillesztési ponton működik, anélkül, hogy a megadott elérési út alatt bármilyen más csatolási pontot megváltoztatna

--proc DEST

Szerelje fel a procfs-t a DEST-re

--dev DEST

Csatlakoztassa az új devtmpfs-eket a DEST-re

--tmpfs DEST

Csatlakoztassa az új tmpfs-eket a DEST-re. Ha az előző beállítás a --perms volt, akkor ez beállítja a tmpfs módot. Ellenkező esetben a tmpfs 0755-ös móddal rendelkezik. Ha az előző beállítás --size volt, akkor a tmpfs méretét bájtokban állítja be. Ellenkező esetben a tmpfs az alapértelmezett méretű.

--mqueue DEST

Új mqueue felszerelése a DEST-re

--dir DEST

Hozzon létre egy könyvtárat a DEST helyen. Ha a könyvtár már létezik, az engedélyei nem módosíthatók, figyelmen kívül hagyva a --perms-t (ha egy meglévő könyvtár engedélyeit módosítani kell, használja a --chmod-t). Ha a könyvtárat újonnan hozták létre, és az előző beállítás a --perms volt, akkor ez beállítja a könyvtár üzemmódját. Ellenkező esetben az újonnan létrehozott könyvtárak 0755-ös móddal rendelkeznek.

--file FD DEST

Másolás az FD fájlleíróból a DEST-be. Ha az előző beállítás a --perms volt, akkor beállítja az új fájl módját. Ellenkező esetben a fájl 0666-os móddal rendelkezik (vegye figyelembe, hogy ez nem ugyanaz, mint a --bind-data).

--bind-data FD DEST

Másolás az FD fájlleíróból egy olyan fájlba, amely a DEST-re van kötve. Ha az előző beállítás a --perms volt, akkor beállítja az új fájl módját. Ellenkező esetben a fájl 0600-as móddal rendelkezik (megjegyzendő, hogy ez nem ugyanaz, mint a --file).

--ro-bind-data FD DEST

Másolás az FD fájlleíróból egy olyan fájlba, amely a DEST-en csak olvasható, kötött csatolással. Ha az előző beállítás a --perms volt, akkor beállítja az új fájl módját. Ellenkező esetben a fájl 0600-as móddal rendelkezik (megjegyzendő, hogy ez nem ugyanaz, mint a --file).

--symlink SRC DEST

Hozzon létre egy szimbolikus hivatkozást a DEST helyen a cél SRC-vel

--chmod OCTAL PATH

Állítsa a PATH engedélyeit, amelyeknek már létezniük kell, OCTAL-ra.

Lezárási lehetőségek:

--seccomp FD

Töltse be és használja a seccomp szabályokat az FD-ből. A szabályoknak egy lefordított cBPF program formájában kell lenniük, a seccomp_export_bpf által generált módon. Ha ezt a lehetőséget többször megadjuk, akkor csak az utolsó kerül felhasználásra. Ha több seccomp programra van szükség, használja az --add-seccomp-fd parancsot.

--add-seccomp-fd FD

Töltse be és használja a seccomp szabályokat az FD-ből. A szabályoknak egy lefordított cBPF program formájában kell lenniük, a seccomp_export_bpf által generált módon. Ez az opció megismételhető, ebben az esetben az összes seccomp program a megadott sorrendben töltődik be (megjegyzendő, hogy a kernel fordított sorrendben értékeli ki őket, így a bwrap parancssor utolsó programja kerül kiértékelésre először). Valószínűleg az utolsó kivételével mindegyiknek engedélyeznie kell a PR_SET_SECCOMP prctl használatát. Ez a beállítás nem kombinálható a --seccomp paraméterrel.

--exec-label LABEL

Exec Label a homokozóból. SELinux rendszeren megadhatja a SELinux környezetet a sandbox folyamat(ok)hoz.

--file-label LABEL

Fájlcímke ideiglenes sandbox-tartalomhoz. SELinux rendszeren megadhatja a SELinux környezetet a sandbox tartalomhoz.

--block-fd FD

Blokkolja a homokozót az FD-ből való olvasáskor, amíg néhány adat nem áll rendelkezésre.

--userns-block-fd FD

Ne inicializálja a felhasználói névteret, hanem várja meg az FD-n, amíg készen áll. Ez lehetővé teszi a külső folyamatok (például a newuidmap/newgidmap) számára, hogy beállítsák a felhasználói névteret, mielőtt azt a sandbox folyamat felhasználná.

--info-fd FD

JSON formátumban írjon információkat a sandboxról az FD-be.

--json-status-fd FD

Több JSON-dokumentum íródik FD-be, soronként egyet („JSON-vonalak” formátum[1]). Minden sor egy JSON-objektum. Miután a bwrap elindította a gyermek folyamatot a sandboxon belül, egy gyermek-pid tagú objektumot ír a --json-status-fd fájlba (ez megkettőzi a régebbi --info-fd). A megfelelő érték annak a gyermekfolyamatnak a folyamatazonosítója, amelyből a bwrap futott a pid névtérben. Ha rendelkezésre állnak, a névtér-azonosítók is szerepelnek az objektumban a gyermek-pid-vel; ez ismét megduplázza a régebbi --info-fd-t. Amikor a sandboxon belüli gyermekfolyamat kilép, a bwrap egy kilépési kódtaggal rendelkező objektumot ír, majd bezárja a --json-status-fd fájlt. Az exit-kódnak megfelelő érték a gyermek kilépési állapota, a szokásos shell kódolásban (n, ha normálisan n állapottal lépett ki, vagy 128+n, ha n jellel megölte). Más tagok is hozzáadhatók ezekhez az objektumokhoz a bwrap jövőbeli verzióiban, és más JSON-objektumok is hozzáadhatók az aktuális objektumok elé vagy után, így az olvasóknak figyelmen kívül kell hagyniuk azokat a tagokat és objektumokat, amelyeket nem értenek.

--new-session

Hozzon létre egy új terminál-munkamenetet a sandbox számára (meghívja a setsid()-t). Ez leválasztja a homokozót a vezérlő terminálról, ami azt jelenti, hogy a sandbox például nem tud bemenetet injektálni a terminálba.

Megjegyzés: Általános sandboxban, ha nem használja a --new-session parancsot, javasoljuk, hogy a seccomp használatával tiltsa le a TIOCSTI ioctl-t, különben az alkalmazás billentyűzetes bevitelt adhat a terminálhoz.

--die-with-parent

Biztosítja, hogy a gyermekfolyamat (COMMAND) elhaljon, amikor a bwraps szülő meghal. Megöli (SIGKILL) az összes bwrap sandbox folyamatot a szülőtől a gyermekig, beleértve a COMMAND folyamatot, amikor a bwrap vagy a bwraps szülő meghal. Lásd: prctl, PR_SET_PDEATHSIG.

--as-pid-1

Ne hozzon létre PID=1-es folyamatot a sandboxban az utódfolyamatok lekéréséhez.

--cap-add CAP

Adja hozzá a megadott képességet, amikor privilegizált felhasználóként fut. Elfogadja az ALL speciális értéket az összes megengedett felső érték hozzáadásához.

--cap-drop CAP

Hagyja el a megadott képességet, ha privilegizált felhasználóként fut. Elfogadja az ALL speciális értéket, hogy eldobja az összes nagybetűt. Alapértelmezés szerint a homokozó folyamatban nem maradnak sapkák. A --cap-add és --cap-drop opciók feldolgozása a parancssorban megadott sorrendben történik. Kérjük, ügyeljen a megadott sorrendre.

KÖRNYEZET

HOME

Cwdként használatos a sandboxban, ha a --chdir nincs kifejezetten megadva, és az aktuális cwd nincs jelen a sandboxban. A --setenv opcióval felülírhatja az itt használt értéket.

KILÉPÉSI ÁLLAPOT

A bwrap parancs a kezdeti alkalmazási folyamat kilépési állapotát adja vissza (2. pid a sandboxban).

MEGJEGYZÉSEK

1. „JSON-vonalak” formátum: https://jsonlines.org/