EnglishРусский Map

Изоляция окружения разработки и агентов с помощью Bubblewrap

title
Изоляция окружения разработки и агентов с помощью Bubblewrap
type
summary
summary
Изоляция LLM-агентов на базе Bubblewrap от Ciężarkiewicz с интеграцией в Nix и tmux
tags
ai-agents, sandboxing, linux, bubblewrap, nix
created
2026-04-22
updated
2026-04-22
lang
ru
translation_of
bubblewrap-dev-env
source_updated
2026-04-22
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

В посте за апрель 2026 года Dawid Ciężarkiewicz подробно разбирает свою схему изоляции LLM-агентов для написания кода и окружений разработки с помощью Bubblewrap. Цели понятны и прямо сформулированы: защитить хост от вредоносных агентов (он называет их "Slopus"), защитить от вредоносных зависимостей и сохранить привычный UX разработчика. Без отдельной учётной записи пользователя, без VM и без Docker - только изоляция на базе namespace'ов.

Скрипт isolate

Основа - shell-скрипт, запускающий любую команду под bwrap со следующими параметрами:

  • --dev-bind /dev /dev, --proc /proc, --tmpfs /tmp, --tmpfs /run как базовый каркас namespace'ов.
  • --ro-bind для путей хоста, доступных песочнице только для чтения: /bin, /usr/bin, /etc, /nix, $HOME/.config, dotfile'ы, ~/.nix-profile и так далее.
  • --bind (на чтение и запись) для путей, которые должны изменяться: ~/.cargo, ~/.claude, ~/.claude.json, текущая рабочая директория, сокет GPG.
  • --chmod 0700 ~/.gnupg, чтобы GnuPG не спотыкался о права на директорию.
  • --setenv ISOLATE_ENV "$(pwd)", чтобы вложенная командная оболочка понимала, что она изолирована.
  • --setenv PROMPT_ENV_INDICATOR "isolated", чтобы пометить приглашение командной строки.

Скрипт идемпотентен: если переменная ISOLATE_ENV уже задана, он просто выполняет команду без повторного оборачивания. Если /proc/sys/dev/tty/legacy_tiocsti не равен 0, выводится предупреждение - иначе вредоносный процесс мог бы подсовывать символы в родительский терминал.

Специфичные для проекта настройки берутся из файла .isolate, который подключается как bash-скрипт и может дополнять массив аргументов bwrap. Пример из статьи: GUI-проект добавляет монтирование $WAYLAND_DISPLAY, /dev/dri/, /dev/shm, /tmp/.X11-unix/ и /run/opengl-driver/lib/, чтобы cargo run мог открыть окно.

Интеграция с Nix

Оверлей Nix заменяет деривацию claude-code shell-обёрткой, которая запускает настоящий Claude под isolate. В начало PATH добавляется ${not-git}/bin, поэтому git превращается в скрипт-напоминание агенту: "мы используем Jujutsu". Также задаётся CARGO_TERM_QUIET=true, чтобы уменьшить шум при сборке, сжигающий токены.

Итоговый результат: любой запуск claude в этой системе уже изолирован, и нет отдельного шага включения, о котором можно забыть.

Интеграция с tmux

Второй скрипт, auto-isolate, поднимается вверх от $PWD в поисках маркерного файла .isolate. Если файл найден, скрипт перезапускает себя через isolate. В tmux это настроено как default-command:

set-option -g default-command "$HOME/bin/auto-isolate ${SHELL}"
bind E new-window "${SHELL}"

Каждая новая панель tmux запускается под auto-isolate. Поскольку все его проекты разработки лежат внутри ~/lab, достаточно положить .isolate в ~/lab, чтобы любая открытая ниже панель автоматически попадала в песочницу. Сочетание prefix E при необходимости открывает аварийную командную оболочку вне песочницы.

Компромиссы, на которые он идёт

  • Сокеты SSH/GPG проброшены внутрь. Скомпрометированный процесс внутри песочницы может подписывать данные и подключаться по SSH к другим хостам. Автор идёт на это, так как его Yubikey требует физического касания на каждую операцию, поэтому автоматизированную атаку блокирует само железо.
  • Это не строгий рубеж защиты от целенаправленного атакующего. Bubblewrap использует user namespaces, для которых исторически находились CVE. Он называет это "достаточной безопасностью и надёжностью практически без ущерба для DX", а не абсолютной изоляцией.
  • ~/.claude смонтирован на чтение и запись. Агент может писать в свою директорию состояния - это необходимо для нормальной работы, но также означает, что скомпрометированный агент может отравить собственную память или конфигурацию.

Место в общей картине

Изоляция на базе Bubblewrap - это аналог для Linux таких инструментов, как ориентированный на macOS hazmat (Seatbelt + изоляция пользователей + фаервол pf) и работающий на уровне политик HTTP crabtrap (прокси с LLM-судьёй). Вместе они закрывают три основных направления изоляции AI-агентов:

  • Изоляция файловой системы и процессов - bubblewrap, изоляция пользователей в hazmat, Seatbelt.
  • Политики исходящего сетевого трафика - фаервол pf (hazmat), перехват HTTP в CrabTrap.
  • Уровень бинарников и системных вызовов - syscall-binary-rewriting для точечного контроля системных вызовов.

Сравнение и матрицу компромиссов см. в sandboxing-ai-agents.

Связанные страницы

  • dpc-pw - блог автора
  • i-dont-want-your-prs - сопутствующий пост того же автора о совместной работе мейнтейнеров в условиях рабочих процессов с участием LLM
  • sandboxing-ai-agents - общая страница концепции
  • hazmat, crabtrap - соседние инструменты в области изоляции и песочниц
  • syscall-binary-rewriting - дополняющий подход на уровне системных вызовов