Изоляция окружения разработки и агентов с помощью Bubblewrap
- title
- Изоляция окружения разработки и агентов с помощью Bubblewrap
- type
- summary
- summary
- Изоляция LLM-агентов на базе Bubblewrap от Ciężarkiewicz с интеграцией в Nix и tmux
- tags
- ai-agents, sandboxing, linux, bubblewrap, nix
- sources
- bubblewrap-dev-env
- 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 - дополняющий подход на уровне системных вызовов
- Charlie Labs Daemons
- CodeAlmanac
- CrabTrap
- ctx
- flue
- hazmat
- Sandbox Agent SDK
- tilde-run
- dpc.pw (Dawid Ciężarkiewicz)
- Dropping Privileges in Go
- I don't want your PRs anymore
- Codex-maxxing
- Your Container Is Not a Sandbox — MicroVM Isolation in 2026
- Privilege Dropping
- We Reverse-Engineered Docker Sandbox's Undocumented MicroVM API
- Sandboxing AI Agents