bwrap - справочное руководство, опции, примеры команд


ИМЯ

bwrap - утилита настройки контейнера

СИНТАКСИС

bwrap [OPTION...] [COMMAND]

ОПИСАНИЕ

bwrap — привилегированный помощник для настройки контейнера. Вы вряд ли будете использовать его напрямую из командной строки, хотя это возможно.

Он работает путем создания нового, полностью пустого пространства имен файловой системы, где корень находится в tmpfs, который невидим для хоста и который будет автоматически очищаться при завершении последнего процесса. Затем вы можете использовать параметры командной строки для создания корневой файловой системы и среды процесса для запуска команды в пространстве имен.

По умолчанию bwrap создает новое пространство имен монтирования для песочницы. При желании он также устанавливает новые пространства имен пользователя, ipc, pid, network и uts (но обратите внимание, что пространство имен пользователя требуется, если bwrap не установлен setuid root). Приложение в песочнице можно настроить для работы с другим UID и GID.

При необходимости (например, при использовании пространства имен PID) bwrap запускает в песочнице минимальный процесс pid 1, который отвечает за пожинание зомби. Он также обнаруживает, когда начальный процесс приложения (pid 2) умирает, и сообщает о своем статусе выхода обратно исходному генератору. Процесс pid 1 завершает работу, чтобы очистить песочницу, когда в ней не осталось других процессов.

ПАРАМЕТРЫ

Когда параметры используются несколько раз, выигрывает последний вариант, если не указано иное.

Общие настройки:

--help

Распечатать справку и выйти

--version

Версия для печати

--args FD

Анализ аргументов, разделенных нулем, из данного файлового дескриптора. Этот параметр можно использовать несколько раз для анализа параметров из нескольких источников.

Параметры, относящиеся к пространствам имен ядра:

--unshare-user

Создайте новое пространство имен пользователей

--unshare-user-try

Создайте новое пространство имен пользователя, если это возможно, иначе пропустите его.

--unshare-ipc

Создайте новое пространство имен ipc

--unshare-pid

Создайте новое пространство имен pid

--unshare-net

Создайте новое сетевое пространство имен

--unshare-uts

Создайте новое пространство имен uts

--unshare-cgroup

Создайте новое пространство имен cgroup

--unshare-cgroup-try

Создайте новое пространство имен cgroup, если это возможно, иначе пропустите его.

--unshare-all

Отмените общий доступ ко всем возможным пространствам имен. В настоящее время эквивалентно: --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try

--share-net

Сохраните сетевое пространство имен, переопределив более раннее --unshare-all или --unshare-net.

--userns FD

Используйте существующее пространство имен пользователей вместо создания нового. Пространство имен должно соответствовать требованиям разрешений для setns(), что обычно означает, что оно должно быть потомком текущего активного пользовательского пространства имен, принадлежащего тому же пользователю.

Это несовместимо с --unshare-user и не работает в версии bubblewrap с setuid.

--userns2 FD

После настройки нового пространства имен переключитесь на указанное пространство имен. Чтобы это работало, указанное пространство имен должно быть потомком пространства имен пользователя, используемого для установки, поэтому это полезно только в сочетании с --userns.

Это полезно, потому что иногда bubblewrap сам создает вложенные пространства имен пользователей (чтобы обойти некоторые проблемы с ядром), и для их ввода можно использовать --userns2.

--disable-userns

Не позволяйте процессу в песочнице создавать дополнительные пользовательские пространства имен, чтобы он не мог переупорядочивать пространство имен файловой системы или выполнять другие более сложные модификации пространства имен. В настоящее время это реализуется путем установки sysctl user.max_user_namespaces в 1, а затем ввода вложенного пользовательского пространства имен, которое не может поднять этот предел во внешнем пространстве имен. Для этого параметра требуется --unshare-user, и он не работает в версии bubblewrap с setuid.

--assert-userns-disabled

Подтвердите, что процесс в песочнице не может создавать дополнительные пространства имен пользователей, но не предпринимая никаких конкретных действий для предотвращения этого. Например, это можно комбинировать с --userns, чтобы проверить, что данное пространство имен пользователей уже настроено, чтобы предотвратить создание дополнительных пространств имен пользователей.

--pidns FD

Используйте существующее пространство имен pid вместо его создания. Это часто используется с --userns, потому что пространство имен pid должно принадлежать тому же пространству имен пользователей, которое использует bwrap.

Обратите внимание, что это можно комбинировать с --unshare-pid, и в этом случае это означает, что песочница будет находиться в своем собственном пространстве имен pid, которое является дочерним по отношению к переданному.

--uid UID

Используйте собственный идентификатор пользователя в песочнице (требуется --unshare-user)

--gid GID

Используйте собственный идентификатор группы в песочнице (требуется --unshare-user)

--hostname HOSTNAME

Используйте пользовательское имя хоста в песочнице (требуется --unshare-uts)

Варианты настройки среды:

--chdir DIR

Изменить каталог на DIR

--setenv VAR VALUE

Установить переменную среды

--unsetenv VAR

Сбросить переменную среды

--clearenv

Отменить установку всех переменных среды, кроме PWD и любых, которые впоследствии устанавливаются с помощью --setenv.

Варианты наблюдения за песочницей снаружи:

--lock-file DEST

Заблокируйте DEST во время работы песочницы. Эту опцию можно использовать несколько раз, чтобы заблокировать несколько файлов.

--sync-fd FD

Держите этот файловый дескриптор открытым во время работы песочницы.

Параметры, связанные с файловой системой:

Это все операции, которые изменяют файловую систему напрямую или монтируют что-то в файловой системе. Они применяются в том порядке, в котором они указаны в качестве аргументов.

Любые отсутствующие родительские каталоги, необходимые для создания указанного места назначения, автоматически создаются по мере необходимости. Их разрешения обычно установлены на 0755 (rwxr-xr-x). Однако, если действует параметр --perms и он устанавливает разрешения для группы или других на ноль, то для вновь созданных родительских каталогов соответствующие разрешения также будут установлены на ноль. --size изменяет размер созданного монтирования перед действием --tmpfs; --perms и --size можно комбинировать.

--perms OCTAL

Этот параметр сам по себе ничего не делает, и за ним должен следовать один из параметров, на которые он влияет. Он устанавливает разрешения для следующей операции на ВОСЬМЕРИЧНОЕ. Последующие операции не затрагиваются: например,

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

Эта опция сама по себе ничего не делает, и за ней должен следовать --tmpfs. Он устанавливает размер в байтах для следующего tmpfs. Например,

--size 10485760 --tmpfs /tmp 

создаст tmpfs в /tmp размером 10 МБ. Последующие операции не затрагиваются: например,

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

смонтирует /a с размером 10 МБ, затем вернется к размеру по умолчанию для /b.

Обратите внимание, что --perms и --size можно комбинировать:

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

будут применяться разрешения, а также максимальный размер для созданных файлов tmpfs.

--bind SRC DEST

Привяжите монтирование пути хоста SRC к DEST

--bind-try SRC DEST

Равен --bind, но игнорирует несуществующий SRC

--dev-bind SRC DEST

Привяжите монтирование пути хоста SRC к DEST, разрешив доступ к устройству

--dev-bind-try SRC DEST

Равен --dev-bind, но игнорирует несуществующий SRC

--ro-bind SRC DEST

Привяжите монтирование пути к хосту SRC только для чтения на DEST

--ro-bind-try SRC DEST

Равен --ro-bind, но игнорирует несуществующий SRC

--remount-ro DEST

Перемонтируйте путь DEST только для чтения. Работает только на указанной точке монтирования, без изменения какой-либо другой точки монтирования по указанному пути.

--proc DEST

Смонтировать procfs на DEST

--dev DEST

Смонтируйте новые devtmpfs на DEST

--tmpfs DEST

Смонтируйте новые tmpfs на DEST. Если предыдущая опция была --perms, она устанавливает режим файла tmpfs. В противном случае tmpfs имеет режим 0755. Если предыдущая опция была --size, она устанавливает размер tmpfs в байтах. В противном случае tmpfs имеет размер по умолчанию.

--mqueue DEST

Смонтировать новую очередь mqueue на DEST

--dir DEST

Создайте каталог в DEST. Если каталог уже существует, его разрешения не изменяются, игнорируя --perms (используйте --chmod, если необходимо изменить разрешения существующего каталога). Если каталог только что создан и предыдущий параметр был --perms, он устанавливает режим каталога. В противном случае вновь созданные каталоги имеют режим 0755.

--file FD DEST

Скопируйте из файлового дескриптора FD в DEST. Если предыдущая опция была --perms, она устанавливает режим нового файла. В противном случае файл имеет режим 0666 (обратите внимание, что это не то же самое, что --bind-data).

--bind-data FD DEST

Скопируйте из файлового дескриптора FD в файл, смонтированный с помощью привязки на DEST. Если предыдущая опция была --perms, она устанавливает режим нового файла. В противном случае файл имеет режим 0600 (обратите внимание, что это не то же самое, что --file).

--ro-bind-data FD DEST

Скопируйте из файлового дескриптора FD в файл, который смонтирован только для чтения на DEST. Если предыдущая опция была --perms, она устанавливает режим нового файла. В противном случае файл имеет режим 0600 (обратите внимание, что это не то же самое, что --file).

--symlink SRC DEST

Создайте символическую ссылку в DEST с целевым SRC

--chmod OCTAL PATH

Установите разрешения PATH, которые должны уже существовать, на ВОСЬМЕРИЧНОЕ.

Варианты блокировки:

--seccomp FD

Загрузите и используйте правила seccomp из FD. Правила должны быть в форме скомпилированной программы cBPF, сгенерированной seccomp_export_bpf. Если этот параметр задан более одного раза, используется только последний. Используйте --add-seccomp-fd, если требуется несколько программ seccomp.

--add-seccomp-fd FD

Загрузите и используйте правила seccomp из FD. Правила должны быть в форме скомпилированной программы cBPF, сгенерированной seccomp_export_bpf. Эту опцию можно повторить, и в этом случае все программы seccomp будут загружены в указанном порядке (обратите внимание, что ядро будет оценивать их в обратном порядке, поэтому последняя программа в командной строке bwrap будет оцениваться первой). Все они, за исключением, возможно, последнего, должны разрешать использование PR_SET_SECCOMP prctl. Эту опцию нельзя сочетать с --seccomp.

--exec-label LABEL

Exec Label из песочницы. В системе SELinux вы можете указать контекст SELinux для процессов песочницы.

--file-label LABEL

Метка файла для временного содержимого песочницы. В системе SELinux вы можете указать контекст SELinux для содержимого песочницы.

--block-fd FD

Блокируйте песочницу при чтении из FD, пока не будут доступны некоторые данные.

--userns-block-fd FD

Не инициализируйте пространство имен пользователя, а подождите, пока FD не будет готов. Это позволяет внешним процессам (например, newuidmap/newgidmap) настраивать пространство имен пользователя до того, как оно будет использовано процессом песочницы.

--info-fd FD

Запишите в FD информацию о песочнице в формате JSON.

--json-status-fd FD

Несколько документов JSON записываются в FD, по одному на строку (формат "строки JSON"[1]). Каждая строка представляет собой отдельный объект JSON. После того, как bwrap запустил дочерний процесс внутри песочницы, он записывает объект с дочерним элементом pid в --json-status-fd (это дублирует старый --info-fd). Соответствующее значение — это идентификатор дочернего процесса в пространстве имен pid, из которого был запущен bwrap. Если они доступны, идентификаторы пространств имен также включаются в объект с дочерним идентификатором; опять же, это дублирует старый --info-fd. Когда дочерний процесс внутри песочницы завершается, bwrap записывает объект с элементом кода выхода, а затем закрывает --json-status-fd. Значение, соответствующее коду выхода, является статусом выхода дочернего процесса в обычной кодировке оболочки (n, если он завершился нормально со статусом n, или 128+n, если он был уничтожен сигналом n). Другие элементы могут быть добавлены к этим объектам в будущих версиях bwrap, а другие объекты JSON могут быть добавлены до или после текущих объектов, поэтому читатели должны игнорировать члены и объекты, которые они не понимают.

--new-session

Создайте новую терминальную сессию для песочницы (вызывает setsid()). Это отключает песочницу от управляющего терминала, что означает, что песочница не может, например, вводить данные в терминал.

Примечание. В общей песочнице, если вы не используете --new-session, рекомендуется использовать seccomp, чтобы запретить ioctl TIOCSTI, иначе приложение может передавать ввод с клавиатуры на терминал.

--die-with-parent

Гарантирует, что дочерний процесс (COMMAND) умирает, когда родитель bwraps умирает. Уничтожает (SIGKILL) все процессы песочницы bwrap последовательно от родительского к дочернему, включая процесс COMMAND, когда умирает bwrap или родительский bwraps. См. prctl, PR_SET_PDEATHSIG.

--as-pid-1

Не создавайте в песочнице процесс с PID=1, чтобы пожинать дочерние процессы.

--cap-add CAP

Добавьте указанную возможность при работе от имени привилегированного пользователя. Он принимает специальное значение ALL, чтобы добавить все разрешенные заглавные буквы.

--cap-drop CAP

Удаление указанной возможности при работе от имени привилегированного пользователя. Он принимает специальное значение ALL, чтобы сбросить все заглавные буквы. По умолчанию в изолированном процессе не остается заглавных букв. Параметры --cap-add и --cap-drop обрабатываются в том порядке, в котором они указаны в командной строке. Пожалуйста, будьте внимательны к порядку, в котором они указаны.

СРЕДА

HOME

Используется как cwd в песочнице, если --chdir не указан явно и текущий cwd отсутствует внутри песочницы. Параметр --setenv может быть использован для переопределения значения, которое используется здесь.

ВЫХОД СТАТУС

Команда bwrap возвращает статус выхода начального процесса приложения (pid 2 в песочнице).

ПРИМЕЧАНИЯ

1. Формат «JSON-строки»: https://jsonlines.org/