bwrap - başvuru kılavuzu, seçenekler, komut örnekleri


İSİM

bwrap - kapsayıcı kurulum yardımcı programı

ÖZET

bwrap [OPTION...] [COMMAND]

TANIM

bwrap, kapsayıcı kurulumu için ayrıcalıklı bir yardımcıdır. Mümkün olsa da, doğrudan komut satırından kullanmanız pek olası değildir.

Kökün ana bilgisayardan görünmeyen bir tmpfs üzerinde olduğu ve son işlemden çıkıldığında otomatik olarak temizlenecek olan yeni, tamamen boş bir dosya sistemi ad alanı oluşturarak çalışır. Daha sonra, komutun ad alanında çalıştırılması için kök dosya sistemini ve işlem ortamını oluşturmak üzere komut satırı seçeneklerini kullanabilirsiniz.

Varsayılan olarak bwrap, korumalı alan için yeni bir bağlama ad alanı oluşturur. İsteğe bağlı olarak yeni kullanıcı, ipc, pid, ağ ve uts ad alanlarını da ayarlar (ancak bwrap setuid root kurulu değilse kullanıcı ad alanının gerekli olduğunu unutmayın). Sandbox'taki uygulama farklı bir UID ve GID ile çalıştırılabilir.

Gerekirse (örneğin, bir PID ad alanı kullanırken) bwrap, sanal alanda zombi toplamaktan sorumlu minimum bir pid 1 işlemi çalıştırıyor. Ayrıca, ilk uygulama sürecinin (pid 2) ne zaman öldüğünü algılar ve çıkış durumunu orijinal oluşturucuya geri bildirir. Korumalı alanda başka işlem kalmadığında, korumalı alanı temizlemek için pid 1 işlemi çıkar.

SEÇENEKLER

Seçenekler birden çok kez kullanıldığında, aksi belirtilmedikçe son seçenek kazanır.

Genel seçenekler:

--help

Yardımı yazdır ve çık

--version

Baskı versiyonu

--args FD

Verilen dosya tanıtıcısından null ile ayrılmış bağımsız değişkenleri ayrıştırın. Bu seçenek, birden çok kaynaktan seçenekleri ayrıştırmak için birden çok kez kullanılabilir.

Çekirdek ad alanlarıyla ilgili seçenekler:

--unshare-user

Yeni bir kullanıcı ad alanı oluştur

--unshare-user-try

Mümkünse yeni bir kullanıcı ad alanı oluşturun, aksi takdirde atlayın

--unshare-ipc

Yeni bir ipc ad alanı oluşturun

--unshare-pid

Yeni bir pid ad alanı oluştur

--unshare-net

Yeni bir ağ ad alanı oluştur

--unshare-uts

Yeni bir uts ad alanı oluşturun

--unshare-cgroup

Yeni bir grup ad alanı oluştur

--unshare-cgroup-try

Mümkünse yeni bir grup ad alanı oluşturun, aksi takdirde atlayın

--unshare-all

Tüm olası ad alanlarının paylaşımını kaldırın. Şu anda eşdeğerdir: --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try

--share-net

Daha önceki bir --unshare-all veya --unshare-net'i geçersiz kılarak ağ ad alanını koruyun

--userns FD

Yeni bir tane oluşturmak yerine mevcut bir kullanıcı ad alanını kullanın. Ad alanı, setns() için izin gereksinimlerini karşılamalıdır; bu, genellikle, aynı kullanıcının sahip olduğu, o anda etkin olan kullanıcı ad alanının soyundan gelmesi gerektiği anlamına gelir.

Bu, --unshare-user ile uyumsuzdur ve bubblewrap'in setuid sürümünde çalışmaz.

--userns2 FD

Yeni ad alanını ayarladıktan sonra belirtilen ad alanına geçin. Bunun çalışması için, belirtilen ad alanının kurulum için kullanılan kullanıcı ad alanının soyundan gelmesi gerekir, bu nedenle bu yalnızca --userns ile birlikte kullanışlıdır.

Bu yararlıdır, çünkü bazen bubblewrap'in kendisi iç içe geçmiş kullanıcı ad alanları oluşturur (bazı çekirdek sorunlarına çözüm bulmak için) ve --userns2 bunları girmek için kullanılabilir.

--disable-userns

Korumalı alandaki işlemin, dosya sistemi ad alanını yeniden düzenleyememesi veya diğer daha karmaşık ad alanı değişikliklerini yapamaması için daha fazla kullanıcı ad alanı oluşturmasını önleyin. Bu, şu anda user.max_user_namespaces sysctl'yi 1 olarak ayarlayarak ve ardından dış ad alanında bu sınırı yükseltemeyen iç içe geçmiş bir kullanıcı ad alanı girerek uygulanmaktadır. Bu seçenek --unshare-user gerektirir ve bubblewrap'in setuid sürümünde çalışmaz.

--assert-userns-disabled

Korumalı alandaki işlemin daha fazla kullanıcı ad alanı oluşturmasının engellendiğini, ancak bunu önlemek için herhangi bir özel işlem yapmadan onaylayın. Örneğin, bu, verilen kullanıcı ad alanının başka kullanıcı ad alanlarının oluşturulmasını önleyecek şekilde ayarlanıp ayarlanmadığını kontrol etmek için --userns ile birleştirilebilir.

--pidns FD

Oluşturmak yerine mevcut bir pid ad alanı kullanın. Bu genellikle --userns ile birlikte kullanılır, çünkü pid ad alanı, bwrap'in kullandığı kullanıcı ad alanının aynısına ait olmalıdır.

Bunun --unshare-pid ile birleştirilebileceğini ve bu durumda sandbox'ın, pass in one'ın alt öğesi olan kendi pid ad alanında olacağı anlamına geldiğini unutmayın.

--uid UID

Korumalı alanda özel bir kullanıcı kimliği kullanın (--unshare-user gerektirir)

--gid GID

Korumalı alanda özel bir grup kimliği kullanın (--unshare-user gerektirir)

--hostname HOSTNAME

Korumalı alanda özel bir ana bilgisayar adı kullanın (--unshare-uts gerektirir)

Ortam kurulumuyla ilgili seçenekler:

--chdir DIR

Dizini DIR olarak değiştir

--setenv VAR VALUE

Bir ortam değişkeni ayarlayın

--unsetenv VAR

Bir ortam değişkeninin ayarını kaldırın

--clearenv

PWD ve daha sonra --setenv tarafından ayarlananlar dışında tüm ortam değişkenlerinin ayarını kaldırın

Korumalı alanı dışarıdan izlemek için seçenekler:

--lock-file DEST

Korumalı alan çalışırken DEST'i kilitleyin. Bu seçenek, birden çok dosyada kilit almak için birden çok kez kullanılabilir.

--sync-fd FD

Korumalı alan çalışırken bu dosya tanıtıcıyı açık tutun

Dosya sistemi ile ilgili seçenekler:

Bunların tümü, dosya sistemini doğrudan değiştiren veya dosya sistemine bir şeyler bağlayan işlemlerdir. Bunlar argüman olarak verildikleri sırayla uygulanır.

Belirli bir hedef oluşturmak için gerekli olan tüm eksik üst dizinler, gerektiğinde otomatik olarak oluşturulur. İzinleri normalde 0755 (rwxr-xr-x) olarak ayarlanmıştır. Ancak, bir --perms seçeneği etkinse ve bu, group veya other için izinleri sıfıra ayarlarsa, yeni oluşturulan üst dizinlerin de karşılık gelen izinleri sıfıra ayarlanır. --size, bir --tmpfs eyleminden önce oluşturulurken oluşturulan bağlamanın boyutunu değiştirir; --perms ve --size birleştirilebilir.

--perms OCTAL

Bu seçenek kendi başına hiçbir şey yapmaz ve etkilediği seçeneklerden biri tarafından takip edilmelidir. Bir sonraki işlem için izinleri OCTAL olarak ayarlar. Sonraki işlemler etkilenmez: örneğin,

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

Bu seçenek kendi başına hiçbir şey yapmaz ve ardından --tmpfs gelmelidir. Sonraki tmpf'ler için boyutu bayt cinsinden ayarlar. Örneğin,

--size 10485760 --tmpfs /tmp 

/tmp boyutunda 10MiB boyutunda bir tmpfs oluşturacaktır. Sonraki işlemler etkilenmez: örneğin,

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

/a'yı 10MiB boyutunda bağlayacak, ardından /b için varsayılan boyuta geri dönecektir.

--perms ve --size öğelerinin birleştirilebileceğini unutmayın:

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

oluşturulan tmpf'lere izinlerin yanı sıra maksimum boyutu da uygulayacaktır.

--bind SRC DEST

Bağlama ana bilgisayar yolu SRC'yi DEST'e bağlar

--bind-try SRC DEST

--bind değerine eşittir ancak var olmayan SRC'yi yok sayar

--dev-bind SRC DEST

Cihaz erişimine izin vererek ana bilgisayar yolu SRC'yi DEST'e bağlayın

--dev-bind-try SRC DEST

--dev-bind değerine eşittir ancak var olmayan SRC'yi yok sayar

--ro-bind SRC DEST

Bağlama ana bilgisayar yolu SRC'yi DEST'te salt okunur olarak bağlar

--ro-bind-try SRC DEST

--ro-bind değerine eşittir ancak var olmayan SRC'yi yok sayar

--remount-ro DEST

DEST yolunu salt okunur olarak yeniden bağlayın. Belirtilen yol altındaki diğer bağlama noktalarını değiştirmeden yalnızca belirtilen bağlama noktasında çalışır.

--proc DEST

procfs'i DEST'e bağla

--dev DEST

DEST'e yeni devtmpf'ler ekleyin

--tmpfs DEST

DEST'e yeni tmpf'ler ekleyin. Önceki seçenek --perms ise, tmpfs modunu ayarlar. Aksi takdirde, tmpfs modu 0755'e sahiptir. Önceki seçenek --size ise, boyutu tmpfs'nin bayt cinsinden ayarlar. Aksi takdirde, tmpfs varsayılan boyuta sahiptir.

--mqueue DEST

DEST'e yeni mqueue ekle

--dir DEST

DEST'te bir dizin oluşturun. Dizin zaten varsa, izinleri değiştirilmez, --perms yoksayılır (mevcut bir dizinin izinlerinin değiştirilmesi gerekiyorsa --chmod kullanın). Dizin yeni oluşturulmuşsa ve önceki seçenek --perms ise, dizinin kipini ayarlar. Aksi takdirde, yeni oluşturulan dizinlerin modu 0755'tir.

--file FD DEST

FD dosya tanıtıcısından DEST'e kopyalayın. Önceki seçenek --perms ise, yeni dosyanın modunu ayarlar. Aksi takdirde, dosyanın modu 0666'dır (bunun --bind-data ile aynı olmadığına dikkat edin).

--bind-data FD DEST

Dosya tanıtıcı FD'den DEST'e bağlanan bir dosyaya kopyalayın. Önceki seçenek --perms ise, yeni dosyanın modunu ayarlar. Aksi takdirde, dosyanın modu 0600'dür (bunun --file ile aynı olmadığına dikkat edin).

--ro-bind-data FD DEST

Dosya tanıtıcı FD'den DEST'te bağlama bağlantılı salt okunur olan bir dosyaya kopyalayın. Önceki seçenek --perms ise, yeni dosyanın modunu ayarlar. Aksi takdirde, dosyanın modu 0600'dür (bunun --file ile aynı olmadığına dikkat edin).

--symlink SRC DEST

Hedef SRC ile DEST'te bir sembolik bağlantı oluşturun

--chmod OCTAL PATH

Zaten olması gereken PATH izinlerini OCTAL olarak ayarlayın.

Kilitleme seçenekleri:

--seccomp FD

FD'den seccomp kurallarını yükleyin ve kullanın. Kuralların seccomp_export_bpf tarafından oluşturulan derlenmiş bir cBPF programı biçiminde olması gerekir. Bu seçenek birden fazla verilirse sadece sonuncusu kullanılır. Birden fazla seccomp programı gerekiyorsa --add-seccomp-fd kullanın.

--add-seccomp-fd FD

FD'den seccomp kurallarını yükleyin ve kullanın. Kuralların seccomp_export_bpf tarafından oluşturulan derlenmiş bir cBPF programı biçiminde olması gerekir. Bu seçenek tekrarlanabilir, bu durumda tüm seccomp programları verilen sırada yüklenir (çekirdeğin bunları ters sırada değerlendireceğini unutmayın, bu nedenle bwrap komut satırındaki son program önce değerlendirilir). Muhtemelen sonuncusu hariç tümü, PR_SET_SECCOMP prctl'nin kullanımına izin vermelidir. Bu seçenek --seccomp ile birleştirilemez.

--exec-label LABEL

Korumalı alandan Yürütme Etiketi. Bir SELinux sisteminde, sanal alan işlemleri için SELinux bağlamını belirleyebilirsiniz.

--file-label LABEL

Geçici korumalı alan içeriği için dosya etiketi. Bir SELinux sisteminde, sanal alan içeriği için SELinux bağlamını belirleyebilirsiniz.

--block-fd FD

Bazı veriler mevcut olana kadar FD'den okuma sırasında korumalı alanı engelleyin.

--userns-block-fd FD

Kullanıcı ad alanını başlatmayın, ancak hazır olana kadar FD'de bekleyin. Bu, harici süreçlerin (newuidmap/newgidmap gibi) kullanıcı ad alanını sanal alan işlemi tarafından kullanılmadan önce ayarlamasına izin verir.

--info-fd FD

Korumalı alanla ilgili bilgileri JSON formatında FD'ye yazın.

--json-status-fd FD

Birden çok JSON belgesi, her satıra bir tane olmak üzere FD'ye yazılır ("JSON satırları" biçimi[1]). Her satır tek bir JSON nesnesidir. bwrap, korumalı alan içinde alt süreci başlattıktan sonra, alt-pid üyeli bir nesneyi --json-status-fd'ye yazar (bu, eski < güçlü>--bilgi-fd). Karşılık gelen değer, bwrap'ın çalıştırıldığı pid ad alanındaki alt sürecin işlem kimliğidir. Varsa, ad alanı kimlikleri de alt öğe-pid ile nesneye dahil edilir; yine, bu eski --info-fd'yi kopyalar. Korumalı alan içindeki alt süreç çıktığında, bwrap çıkış kodu üyesi olan bir nesne yazar ve ardından --json-status-fd'yi kapatır. Çıkış koduna karşılık gelen değer, olağan kabuk kodlamasında çocuğun çıkış durumudur (n durumuyla normal olarak çıktıysa n veya n sinyali tarafından öldürüldüyse 128+n). bwrap'in gelecekteki sürümlerinde bu nesnelere başka üyeler eklenebilir ve diğer JSON nesneleri mevcut nesnelerden önce veya sonra eklenebilir, bu nedenle okuyucular anlamadıkları üyeleri ve nesneleri göz ardı etmelidir.

--new-session

Korumalı alan için yeni bir terminal oturumu oluşturun (setid() öğesini çağırır). Bu, sanal alanın kontrol terminalinden bağlantısını keser; bu, örneğin sanal alanın terminale girdi enjekte edemediği anlamına gelir.

Not: Genel bir sanal alanda, --new-session kullanmıyorsanız, TIOCSTI ioctl'ye izin vermemek için seccomp kullanmanız önerilir, aksi takdirde uygulama klavye girişini terminale besleyebilir.

--die-with-parent

bwraps ebeveyni öldüğünde alt sürecin (COMMAND) ölmesini sağlar. bwrap veya bwraps ebeveyni öldüğünde COMMAND işlemi dahil olmak üzere ebeveynden çocuğa sırayla tüm bwrap sanal alan işlemlerini öldürür (SIGKILL). Bkz. prctl, PR_SET_PDEATHSIG.

--as-pid-1

Alt süreçleri toplamak için sanal alanda PID=1 olan bir süreç oluşturmayın.

--cap-add CAP

Ayrıcalıklı kullanıcı olarak çalışırken belirtilen yeteneği ekleyin. İzin verilen tüm büyük harfleri eklemek için ALL özel değerini kabul eder.

--cap-drop CAP

Ayrıcalıklı kullanıcı olarak çalışırken belirtilen yeteneği bırakın. Tüm büyük harflerin atılması için ALL özel değerini kabul eder. Varsayılan olarak, korumalı alan işleminde hiçbir büyük harf bırakılmaz. --cap-add ve --cap-drop seçenekleri, komut satırında belirtilen sırayla işlenir. Lütfen belirtilen sıraya dikkat edin.

ÇEVRE

HOME

--chdir açıkça belirtilmemişse ve geçerli cwd sanal alanda yoksa, sanal alanda cwd olarak kullanılır. Burada kullanılan değeri geçersiz kılmak için --setenv seçeneği kullanılabilir.

ÇIKIŞ DURUMU

bwrap komutu, ilk uygulama işleminin çıkış durumunu döndürür (korumalı alanda pid 2).

NOTLAR

1. "JSON satırları" formatı: https://jsonlines.org/