Песочница
Этот документ объясняет, как запустить Qwen Code внутри песочницы, чтобы уменьшить риски при выполнении инструментами команд оболочки или изменении файлов.
Предварительные требования
Прежде чем использовать изоляцию в песочнице, вам нужно установить и настроить Qwen Code:
npm install -g @qwen-code/qwen-codeДля проверки установки
qwen --versionОбзор песочницы
Песочница изолирует потенциально опасные операции (например, команды оболочки или изменения файлов) от вашей основной системы, обеспечивая барьер безопасности между CLI и вашей средой.
Преимущества песочницы включают:
- Безопасность: предотвращение случайного повреждения системы или потери данных.
- Изоляция: ограничение доступа к файловой системе директорией проекта.
- Согласованность: обеспечение воспроизводимости сред на разных системах.
- Безопасность: снижение рисков при работе с ненадежным кодом или экспериментальными командами.
Примечание по именованию: Некоторые переменные окружения, связанные с песочницей, все еще используют префикс GEMINI_* для обратной совместимости.
Методы песочницы
Ваш идеальный метод песочницы может отличаться в зависимости от вашей платформы и предпочитаемого решения контейнеризации.
1. macOS Seatbelt (только для macOS)
Легкая встроенная песочница с использованием sandbox-exec.
Профиль по умолчанию: permissive-open — ограничивает запись за пределами каталога проекта, но разрешает большинство других операций и исходящий сетевой доступ.
Наилучшее применение: Быстрая работа без использования Docker, надежные ограничения на запись файлов.
2. На основе контейнеров (Docker/Podman)
Кроссплатформенная песочница с полной изоляцией процессов.
По умолчанию Qwen Code использует опубликованный образ песочницы (настроенный в пакете CLI) и будет загружать его при необходимости.
Песочница контейнера монтирует ваше рабочее пространство и каталог ~/.qwen внутрь контейнера, чтобы аутентификация и настройки сохранялись между запусками.
Наилучшее применение: Сильная изоляция на любой ОС, согласованность инструментов внутри известного образа.
Выбор метода
- В macOS:
- Используйте Seatbelt, когда вам нужен легковесный песочник (рекомендуется для большинства пользователей).
- Используйте Docker/Podman, когда вам нужна полная пользовательская среда Linux (например, инструменты, требующие двоичных файлов Linux).
- В Linux/Windows:
- Используйте Docker или Podman.
Быстрый старт
# Включить песочницу с помощью флага команды
qwen -s -p "анализировать структуру кода"
# Или включить песочницу для вашей сессии оболочки (рекомендуется для CI / скриптов)
export GEMINI_SANDBOX=true # true автоматически выбирает поставщика (см. примечания ниже)
qwen -p "запустить тестовый набор"
# Настроить в settings.json
{
"tools": {
"sandbox": true
}
}Примечания по выбору поставщика:
- В macOS,
GEMINI_SANDBOX=trueобычно выбираетsandbox-exec(Seatbelt), если он доступен. - В Linux/Windows,
GEMINI_SANDBOX=trueтребует установкиdockerилиpodman. - Чтобы принудительно выбрать поставщика, установите
GEMINI_SANDBOX=docker|podman|sandbox-exec.
Конфигурация
Включение песочницы (в порядке приоритета)
- Переменная окружения:
GEMINI_SANDBOX=true|false|docker|podman|sandbox-exec - Флаг команды / аргумент:
-s,--sandboxили--sandbox=<provider> - Файл настроек:
tools.sandboxв вашемsettings.json(например,{"tools": {"sandbox": true}}).
Если переменная GEMINI_SANDBOX установлена, она переопределяет флаг CLI и settings.json.
Настройка образа песочницы (Docker/Podman)
- Флаг CLI:
--sandbox-image <image> - Переменная окружения:
GEMINI_SANDBOX_IMAGE=<image>
Если вы не укажете ни один из них, Qwen Code использует образ по умолчанию, настроенный в пакете CLI (например, ghcr.io/qwenlm/qwen-code:<version>).
Профили Seatbelt в macOS
Встроенные профили (устанавливаются через переменную окружения SEATBELT_PROFILE):
permissive-open(по умолчанию): Ограничения на запись, сеть разрешенаpermissive-closed: Ограничения на запись, сеть запрещенаpermissive-proxied: Ограничения на запись, сеть через проксиrestrictive-open: Строгие ограничения, сеть разрешенаrestrictive-closed: Максимальные ограниченияrestrictive-proxied: Строгие ограничения, сеть через прокси
Начните с permissive-open, затем перейдите к restrictive-closed, если ваш рабочий процесс по-прежнему работает.
Пользовательские профили Seatbelt (macOS)
Чтобы использовать пользовательский профиль Seatbelt:
- Создайте файл с именем
.qwen/sandbox-macos-<имя_профиля>.sbв вашем проекте. - Установите
SEATBELT_PROFILE=<имя_профиля>.
Пользовательские флаги песочницы
Для контейнерной изоляции вы можете внедрять пользовательские флаги в команду docker или podman, используя переменную окружения SANDBOX_FLAGS. Это полезно для расширенных конфигураций, например, для отключения функций безопасности в определенных сценариях использования.
Пример (Podman):
Чтобы отключить пометку SELinux для монтируемых томов, можно установить следующее:
export SANDBOX_FLAGS="--security-opt label=disable"Можно указать несколько флагов в виде строки, разделенной пробелами:
export SANDBOX_FLAGS="--flag1 --flag2=value"Проксирование сети (все методы песочницы)
Если вы хотите ограничить исходящий сетевой доступ до белого списка, вы можете запустить локальный прокси-сервер рядом с песочницей:
- Установите
GEMINI_SANDBOX_PROXY_COMMAND=<команда> - Команда должна запускать прокси-сервер, который прослушивает порт
:::8877
Это особенно полезно с профилями Seatbelt *-proxied.
Для рабочего примера прокси-сервера в стиле белого списка см.: Пример скрипта прокси.
Обработка UID/GID в Linux
В Linux Qwen Code по умолчанию включает сопоставление UID/GID, чтобы песочница работала под вашим пользователем (и повторно использовала смонтированный ~/.qwen). Переопределите с помощью:
export SANDBOX_SET_UID_GID=true # Принудительно использовать UID/GID хоста
export SANDBOX_SET_UID_GID=false # Отключить сопоставление UID/GIDУстранение неполадок
Распространенные проблемы
“Operation not permitted”
- Операция требует доступа за пределами песочницы.
- В macOS Seatbelt: попробуйте использовать более разрешающий
SEATBELT_PROFILE. - В Docker/Podman: убедитесь, что рабочая область смонтирована и ваша команда не требует доступа за пределы каталога проекта.
Отсутствующие команды
- Песочница контейнера: добавьте их через
.qwen/sandbox.Dockerfileили.qwen/sandbox.bashrc. - Seatbelt: используются бинарные файлы хоста, но песочница может ограничивать доступ к некоторым путям.
Проблемы с сетью
- Проверьте, разрешает ли профиль песочницы работу в сети.
- Убедитесь в правильности настройки прокси.
Режим отладки
DEBUG=1 qwen -s -p "debug command"Примечание: Если у вас есть DEBUG=true в файле .env проекта, это не повлияет на CLI из-за автоматического исключения. Используйте файлы .qwen/.env для настроек отладки Qwen Code.
Проверка песочницы
# Проверить окружение
qwen -s -p "run shell command: env | grep SANDBOX"
# Список монтирований
qwen -s -p "run shell command: mount | grep workspace"Примечания по безопасности
- Песочница снижает, но не устраняет все риски.
- Используйте наиболее ограниченный профиль, который позволяет выполнять вашу работу.
- Накладные расходы контейнера минимальны после первого скачивания/сборки.
- Графические приложения могут не работать в песочнице.
Связанная документация
- Конфигурация: Полные параметры конфигурации.
- Команды: Доступные команды.
- Устранение неполадок: Общие рекомендации по устранению неполадок.