Bubblewrap: изоляция приложений
Представьте, что вам нужно запустить некоторый процесс Linux в изолированной среде. Так, чтобы он не смог нанести вред системе, на которой запускается. Какие инструменты мы используем в таких случаях? Первое, что приходит в голову, это технологии виртуализации или контейнеризации. Но что, если нам нужно что-то более легковесное и простое в использовании? На самом деле, такой инструмент есть — это утилита командной строки Bubblewrap, один из проектов сообщества Containers (знаменито авторством таких инструментов, как Podman, Buildah, Skopeo и др.).
Когда может быть полезен:
- Невысокие требования к изоляции процесса и системы.
- Недопустимы накладные расходы как у более сложных средств изоляции.
- Тестирование (поведения) программы в разных условиях эксплуатации.
- Запуск программ/скриптов/кода, полученных из ненадежных источников.
- Лимитирование расхода ресурсов для отдельно взятого процесса.
- Изменение структуры файловой системы для запускаемого процесса.
- Разработка изолированных сред типа Flatpack.
Установка:
Использование:
В приведенном примере команда echo выполнится в изолированной среде, в которой структура файловой системы один к одному повторяет структуру host-машины, однако файлы в ней будут доступны только для чтения ("--ro-bind", read-only bind). Поэтому следующая команда:
выдаст ошибку:
На самом деле bwrap имеет кучу настроек, используя которые можно ограничить очень многие аспекты запускаемого процесса, включая использование ресурсов системы и даже вызов указанных системных функций. Чтобы быстрей сориентироваться, как ей пользоваться, можно посмотреть примеры изоляции некоторых популярных программ.
Основные плюсы:
- Не требуются root-привилегии.
- Изолирует работу только одного процесса.
- Может использоваться для изоляции приложений с графическим UI.
- Предоставляет большой спектр настроек лимитирования.
- Простая установка и использование.
- Низкие накладные расходы на изоляцию.
Основной минус — это то, что ограничение на ресурсы системы устанавливаются только с использованием cgroup. Это значит, что для полноценной работы bwrap в Docker/Kubernetes-контейнере последний придется запустить в privileged-режиме или лучше с указанием в capabilities привилегии SYS_ADMIN.
P.s. Если вам интересна данная тематика, присоединяйтесь к моей новостной ленте в Telegram или здесь. Буду рад поделиться опытом. ;-)