bwrap - konténerbeállító segédprogram
bwrap [OPTION...] [COMMAND]
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.
Ha az opciókat többször használja, az utolsó opció nyer, hacsak nincs másképp megadva.
Súgó nyomtatása és kilépés
Nyomtatott változat
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.
Hozzon létre egy új felhasználói névteret
Ha lehetséges, hozzon létre egy új felhasználói névteret, különben hagyja ki
Hozzon létre egy új ipc névteret
Hozzon létre egy új pid névteret
Hozzon létre egy új hálózati névteret
Hozzon létre egy új uts névteret
Hozzon létre egy új cgroup névteret
Ha lehetséges, hozzon létre egy új cgroup névteret, különben kihagyja
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
Megőrzi a hálózat névterét, felülírva a korábbi --unshare-all vagy --unshare-net
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.
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.
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.
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.
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.
Egyéni felhasználói azonosító használata a homokozóban (--unshare-user szükséges)
Egyéni csoportazonosító használata a sandboxban (--unshare-user szükséges)
Egyéni gazdagépnév használata a homokozóban (--unshare-uts szükséges)
Módosítsa a könyvtárat DIR-re
Állítson be egy környezeti változót
Egy környezeti változó beállításának visszavonása
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.
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.
Tartsa nyitva ezt a fájlleírót, amíg a sandbox fut
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ó.
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.
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.
Csatlakoztassa az SRC gazdagép elérési útját a DEST-re
Egyenlő a --bind értékkel, de figyelmen kívül hagyja a nem létező SRC-t
Csatlakoztassa az SRC gazdagép elérési útját a DEST-hez, lehetővé téve az eszköz elérését
Egyenlő a --dev-bind értékkel, de figyelmen kívül hagyja a nem létező SRC-t
A gazdagép elérési út SRC kötési csatolása csak olvasható a DEST-en
Egyenlő a --ro-bind értékkel, de figyelmen kívül hagyja a nem létező SRC-t
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
Szerelje fel a procfs-t a DEST-re
Csatlakoztassa az új devtmpfs-eket a DEST-re
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ű.
Új mqueue felszerelése a DEST-re
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.
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).
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).
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).
Hozzon létre egy szimbolikus hivatkozást a DEST helyen a cél SRC-vel
Állítsa a PATH engedélyeit, amelyeknek már létezniük kell, OCTAL-ra.
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.
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 a homokozóból. SELinux rendszeren megadhatja a SELinux környezetet a sandbox folyamat(ok)hoz.
Fájlcímke ideiglenes sandbox-tartalomhoz. SELinux rendszeren megadhatja a SELinux környezetet a sandbox tartalomhoz.
Blokkolja a homokozót az FD-ből való olvasáskor, amíg néhány adat nem áll rendelkezésre.
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á.
JSON formátumban írjon információkat a sandboxról az FD-be.
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.
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.
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.
Ne hozzon létre PID=1-es folyamatot a sandboxban az utódfolyamatok lekéréséhez.
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.
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.
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.
A bwrap parancs a kezdeti alkalmazási folyamat kilépési állapotát adja vissza (2. pid a sandboxban).
1. „JSON-vonalak” formátum: https://jsonlines.org/