Настройка изолированного инструмента Bash
Узнайте, как изолированный инструмент Bash в Claude Code обеспечивает изоляцию файловой системы и сети для более безопасного и автономного выполнения агента.
Bash sandbox позволяет Claude выполнять большинство команд оболочки без остановки для запроса разрешения. Вместо одобрения каждой команды вы определяете, какие файлы и сетевые домены могут использовать команды, и операционная система применяет эту границу для каждой команды Bash и её дочерних процессов.
На этой странице рассматривается, как:
- Включить sandbox и выбрать способ одобрения изолированных команд
- Настроить доступные пути и сетевые домены для команд
- Объединить sandboxing с правилами разрешений и режимами разрешений
- Применить sandboxing во всей организации с управляемыми параметрами
Для сравнения других подходов к изоляции, таких как dev containers, пользовательские контейнеры и виртуальные машины, см. Sandbox environments. Чтобы уменьшить количество запросов разрешений для инструментов, отличных от Bash, см. permission modes.
Начало работы
Sandbox встроен в Claude Code и работает на macOS, Linux и WSL2. Нативная Windows не поддерживается. На Windows запустите Claude Code внутри дистрибьютива WSL2.
На macOS нет необходимости в установке: sandboxing использует встроенную платформу Seatbelt. На Linux и WSL2 sandbox зависит от двух пакетов, описанных в разделе Настройка Linux и WSL2. Даже если вы их ещё не установили, вы можете начать с /sandbox, так как его панель показывает, что-либо отсутствует.
Запустите /sandbox
Начните сеанс Claude Code и выполните команду /sandbox:
/sandbox
Это открывает панель sandbox с тремя вкладками:
- Mode: выберите способ одобрения изолированных команд, описанный на следующем шаге
- Overrides: выберите, могут ли команды, которые не работают в sandbox, вернуться к выполнению без изоляции. Это параметр
allowUnsandboxedCommands - Config: просмотрите разрешённые параметры sandbox
Если панель показывает только вкладку Dependencies, отсутствует требуемый пакет. Установите его, как описано в разделе Настройка Linux и WSL2, перезагрузите Claude Code и снова выполните /sandbox.
Выберите режим
На вкладке Mode выберите автоматическое разрешение или обычные разрешения. Автоматическое разрешение выполняет изолированные команды без запроса, а обычные разрешения сохраняют обычные запросы разрешений даже когда команды изолированы. См. Sandbox modes для информации о том, какие команды всё ещё требуют запроса в режиме автоматического разрешения.
Выполните команду Bash
Попросите Claude выполнить команду, например сборку или набор тестов. По умолчанию команды внутри sandbox могут писать только в рабочий каталог и каталог временных файлов сеанса. Первый раз, когда команде требуется новый сетевой домен, Claude Code запрашивает одобрение.
Команды, которые не могут выполняться в sandbox, возвращаются к обычному потоку разрешений. Чтобы расширить или сузить эти границы, см. Настройка sandboxing.
Выбор режима на панели записывает в локальные параметры вашего проекта в .claude/settings.local.json, которые применяются к текущему проекту и не проверяются в git. Чтобы включить sandbox во всех ваших проектах, установите sandbox.enabled в true в ваших пользовательских параметрах в ~/.claude/settings.json. Чтобы применить sandboxing для каждого разработчика в организации, используйте управляемые параметры.
По умолчанию, если sandbox не может запуститься из-за отсутствия зависимостей или неподдерживаемой платформы, Claude Code показывает предупреждение и выполняет команды без sandboxing. Чтобы сделать это жёстким отказом, установите sandbox.failIfUnavailable в true. Это предназначено для управляемых развёртываний, которые требуют sandboxing в качестве шлюза безопасности.
Настройка Linux и WSL2
На Linux и WSL2 sandbox зависит от двух пакетов:
bubblewrap: инструмент непривилегированной изоляции, который применяет изоляцию файловой системыsocat: ретранслятор, используемый для маршрутизации сетевого трафика через прокси sandbox
Установите их с помощью менеджера пакетов вашего дистрибьютива:
sudo apt-get install bubblewrap socat
sudo dnf install bubblewrap socat
После установки вкладка Dependencies в /sandbox показывает, доступны ли ripgrep, bubblewrap, socat и фильтр seccomp на вашей платформе. Ripgrep поставляется в комплекте с нативным двоичным файлом Claude Code. Фильтр seccomp является опциональным и добавляет блокировку Unix domain socket. Установите его с помощью npm install -g @anthropic-ai/sandbox-runtime, если он отсутствует.
Когда отсутствует требуемая зависимость, вкладка Dependencies является единственной показываемой вкладкой до её установки. Проверка зависимостей выполняется при запуске, поэтому перезагрузите Claude Code после установки пакетов, чтобы /sandbox их обнаружил.
Чтобы проверить, применяется ли это ограничение в вашей среде, включая внутри WSL2, выполните `sysctl kernel.apparmor_restrict_unprivileged_userns`. Если ключ не существует или возвращает `0`, пропустите этот шаг. Если он возвращает `1`, добавьте профиль AppArmor, который предоставляет `bwrap` эту возможность:
```bash theme={null}
sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'
abi <abi/4.0>,
include <tunables/global>
profile bwrap /usr/bin/bwrap flags=(unconfined) {
userns,
include if exists <local/bwrap>
}
EOF
```
Профиль применяется только к самому `bwrap`, а не к командам, которые он выполняет внутри sandbox. Перезагрузите AppArmor, чтобы применить его:
```bash theme={null}
sudo systemctl reload apparmor
```
Примечания WSL2
Проверьте версию WSL с помощью wsl -l -v из PowerShell. Если вы видите Sandboxing requires WSL2, ваш дистрибьютив работает на WSL1. Обновите его на WSL2 или запустите Claude Code без sandboxing.
На WSL2 изолированные команды не могут запускать двоичные файлы Windows, такие как cmd.exe, powershell.exe или что-либо под /mnt/c/. WSL передаёт их хосту Windows через Unix socket, который sandbox блокирует. Если команде требуется вызвать двоичный файл Windows, добавьте его в excludedCommands, чтобы он выполнялся вне sandbox.
Sandbox modes
Claude Code предлагает два режима sandbox:
Режим автоматического разрешения: Команды Bash будут пытаться выполняться внутри sandbox и автоматически разрешаются без требования разрешения. Команды, которые не могут быть изолированы, такие как те, которые требуют сетевого доступа к неразрешённым хостам, возвращаются к обычному потоку разрешений, где Claude Code проверяет ваши правила разрешений и запрашивает у вас разрешение для любой команды, которую эти правила не разрешают.
Даже в режиме автоматического разрешения применяется следующее:
- Явные правила отказа всегда соблюдаются
- Команды
rmилиrmdir, которые нацелены на/, ваш домашний каталог или другие критические пути системы, по-прежнему вызывают запрос разрешения - Правила ask с областью действия контента, такие как
Bash(git push *), по-прежнему требуют запроса даже для изолированных команд - Простое правило
Bashask, или эквивалентная формаBash(*), пропускается для команд, которые выполняются в изолированном режиме; оно по-прежнему применяется к командам, которые возвращаются к обычному потоку разрешений
Режим обычных разрешений: Все команды Bash проходят через обычный поток разрешений, даже когда они изолированы. Это обеспечивает больше контроля, но требует больше одобрений.
В обоих режимах sandbox применяет одни и те же ограничения файловой системы и сети. Разница только в том, разрешены ли изолированные команды автоматически или требуют явного разрешения.
Каталог временных файлов сеанса доступен для записи внутри sandbox по умолчанию, наряду с рабочим каталогом. Claude Code устанавливает $TMPDIR в этот каталог для изолированных команд, поэтому инструменты, которые записывают временные файлы, работают без дополнительной конфигурации. Неизолированные команды наследуют $TMPDIR вашей оболочки без изменений, что означает, что изолированные и неизолированные команды разрешают $TMPDIR в разные каталоги. Чтобы передавать временные файлы между ними, записывайте их в рабочий каталог вместо этого.
Некоторые команды вообще не могут выполняться внутри sandbox, такие как инструменты, несовместимые с ним, или те, которые требуют хоста, который вы не разрешили. Вместо того чтобы не выполнить задачу или потребовать отключения sandboxing, Claude Code включает механизм выхода: когда команда не выполняется из-за ограничений sandbox, Claude анализирует сбой и может повторить команду с параметром dangerouslyDisableSandbox. Повторная команда выполняется вне sandbox, поэтому она проходит через обычный поток разрешений и требует вашего одобрения.
Вы можете отключить этот механизм выхода, установив "allowUnsandboxedCommands": false в ваши параметры sandbox. При отключении, что панель Overrides в /sandbox показывает как Strict sandbox mode, параметр dangerouslyDisableSandbox полностью игнорируется и все команды должны выполняться в sandbox или быть явно указаны в excludedCommands.
Режим автоматического разрешения работает независимо от вашего параметра режима разрешений. Даже если вы не находитесь в режиме "принять правки", изолированные команды Bash будут выполняться автоматически при включении автоматического разрешения. Это означает, что команды Bash, которые изменяют файлы в границах sandbox, будут выполняться без запроса, даже когда инструменты редактирования файлов обычно требуют одобрения.
Настройка sandboxing
Настройте поведение sandbox через ваш файл settings.json. Полную справку по конфигурации см. в разделе Settings.
По умолчанию изолированные команды могут писать только в текущий рабочий каталог и временный каталог сеанса. Если команды подпроцесса, такие как kubectl, terraform или npm, должны писать вне этих каталогов, используйте sandbox.filesystem.allowWrite для предоставления доступа к определённым путям:
{
"sandbox": {
"enabled": true,
"filesystem": {
"allowWrite": ["~/.kube", "/tmp/build"]
}
}
}
Эти пути применяются на уровне ОС, поэтому все команды, работающие внутри sandbox, включая их дочерние процессы, соблюдают их. Это рекомендуемый подход, когда инструменту требуется доступ на запись к определённому местоположению, вместо полного исключения инструмента из sandbox с помощью excludedCommands.
Когда один и тот же массив файловой системы определён в нескольких областях параметров, массивы объединяются: пути из каждой области объединяются, а не заменяются.
Префиксы пути контролируют способ разрешения путей:
| Префикс | Значение | Пример |
|---|---|---|
/ |
Абсолютный путь от корня файловой системы | /tmp/build остаётся /tmp/build |
~/ |
Относительно домашнего каталога | ~/.kube становится $HOME/.kube |
./ или без префикса |
Относительно корня проекта для параметров проекта или к ~/.claude для параметров пользователя |
./output в .claude/settings.json разрешается в <project-root>/output |
Этот синтаксис отличается от правил разрешений Read и Edit, которые используют //path для абсолютных и /path для относительных к проекту. Пути файловой системы sandbox используют стандартные соглашения: /tmp/build — это абсолютный путь.
Вы также можете запретить доступ на запись или чтение, используя sandbox.filesystem.denyWrite и sandbox.filesystem.denyRead, и повторно разрешить определённые пути в запрещённой области, используя sandbox.filesystem.allowRead.
Пример ниже блокирует чтение из всего домашнего каталога, но при этом разрешает чтение из текущего проекта. Поместите его в .claude/settings.json вашего проекта, потому что относительный путь . разрешается в корень проекта только когда конфигурация находится в параметрах проекта:
{
"sandbox": {
"enabled": true,
"filesystem": {
"denyRead": ["~/"],
"allowRead": ["."]
}
}
}
. в allowRead разрешается в корень проекта, потому что эта конфигурация находится в параметрах проекта. Если вы поместили ту же конфигурацию в ~/.claude/settings.json, . разрешился бы в ~/.claude вместо этого, и файлы проекта остались бы заблокированы правилом denyRead.
Как работает sandboxing
Изоляция файловой системы
Изолированный инструмент Bash ограничивает доступ к файловой системе определёнными каталогами:
- Поведение записи по умолчанию: доступ на чтение и запись к текущему рабочему каталогу и его подкаталогам, а также к временному каталогу сеанса, на который указывает
$TMPDIR - Поведение чтения по умолчанию: доступ на чтение ко всему компьютеру, кроме определённых запрещённых каталогов. Обратите внимание, что эта политика по умолчанию всё ещё разрешает чтение файлов учётных данных, таких как
~/.aws/credentialsи~/.ssh/. Добавьте их вdenyRead, чтобы заблокировать их. - Заблокированный доступ: невозможно изменять файлы вне текущего рабочего каталога и временного каталога сеанса без явного разрешения, включая файлы конфигурации оболочки, такие как
~/.bashrc, и системные двоичные файлы в/bin/ - Git worktrees: когда рабочий каталог является связанным git worktree, sandbox также разрешает запись в общий каталог
.gitосновного репозитория, чтобы команды, такие какgit commit, могли обновлять ссылки и индекс. Запись вhooks/иconfigвнутри этого каталога остаётся запрещённой. - Настраиваемо: определите пользовательские разрешённые и запрещённые пути через параметры
Вы можете предоставить доступ на запись к дополнительным путям, используя sandbox.filesystem.allowWrite в ваших параметрах. Эти ограничения применяются на уровне ОС, поэтому они применяются ко всем командам подпроцесса, включая инструменты, такие как kubectl, terraform и npm, а не только к инструментам файлов Claude.
Сетевая изоляция
Доступ в сеть контролируется через прокси-сервер, работающий вне sandbox:
- Ограничения домена: домены не предварительно разрешены. Первый раз, когда команде требуется новый домен, Claude Code запрашивает одобрение. Предварительно разрешите домены с помощью
allowedDomains, чтобы избежать запроса. - Управляемая блокировка: если
allowManagedDomainsOnlyустановлен в управляемых параметрах, неразрешённые домены автоматически блокируются вместо запроса, и толькоallowedDomainsиз управляемых параметров учитываются. - Поддержка пользовательского прокси: продвинутые пользователи могут реализовать пользовательские правила для исходящего трафика
- Полное покрытие: ограничения применяются ко всем скриптам, программам и подпроцессам, порожденным командами
Встроенный прокси применяет список разрешений на основе запрошенного имени хоста и не завершает и не проверяет трафик TLS. См. Security limitations для понимания последствий этого дизайна и Custom proxy configuration, если ваша модель угроз требует проверки TLS.
Применение на уровне ОС
Изолированный инструмент Bash использует примитивы безопасности операционной системы:
- macOS: использует Seatbelt для применения sandbox
- Linux: использует bubblewrap для изоляции
- WSL2: использует bubblewrap, как и Linux
WSL1 не поддерживается, потому что bubblewrap требует функций ядра, доступных только в WSL2. Эти ограничения на уровне ОС гарантируют, что все дочерние процессы, порожденные командами Claude Code, наследуют одни и те же границы безопасности.
Эти же примитивы доступны как отдельный пакет @anthropic-ai/sandbox-runtime, который страница Sandbox environments описывает как отдельный подход для обёртывания всего процесса Claude Code.
Как sandboxing связан с разрешениями и режимами разрешений
Sandboxing, правила разрешений и режимы разрешений являются дополняющими друг друга слоями. Разделы ниже описывают, как sandbox взаимодействует с каждым.
Правила разрешений
Правила разрешений и sandboxing контролируют разные вещи:
- Правила разрешений контролируют, какие инструменты может использовать Claude Code, и оцениваются перед запуском любого инструмента. Они применяются ко всем инструментам: Bash, Read, Edit, WebFetch, MCP и другим.
- Sandboxing обеспечивает применение на уровне ОС, которое ограничивает, к чему могут получить доступ команды Bash на уровне файловой системы и сети. Это применяется только к командам Bash и их дочерним процессам.
Два слоя также отличаются способом их применения. Claude Code оценивает решения разрешений перед запуском команды на основе строки команды и, в режиме auto, отдельного классификатора, который судит о безопасности команды. Операционная система применяет границу sandbox к работающему процессу, поэтому она действует независимо от того, что выбрала модель для запуска, и даже если разрешённая команда делает больше, чем предполагает её имя.
Ограничения файловой системы и сети настраиваются как через параметры sandbox, так и через правила разрешений:
| Параметр или правило | Что оно делает |
|---|---|
sandbox.filesystem.allowWrite |
Предоставляет доступ на запись подпроцесса к путям вне рабочего каталога |
sandbox.filesystem.denyWrite и sandbox.filesystem.denyRead |
Блокируют доступ подпроцесса к определённым путям |
sandbox.filesystem.allowRead |
Повторно разрешают чтение определённых путей в области denyRead |
Правила разрешения Edit |
Предоставляют доступ на запись к определённым путям, так же как sandbox.filesystem.allowWrite |
Правила отказа Read и Edit |
Блокируют доступ к определённым файлам или каталогам |
Правила разрешения и отказа WebFetch |
Контролируют доступ к доменам |
Sandbox allowedDomains |
Контролирует, к каким доменам могут получить доступ команды Bash |
Sandbox deniedDomains |
Блокирует определённые домены даже когда более широкий подстановочный знак allowedDomains иначе разрешил бы их |
Пути из обоих параметров sandbox.filesystem и правил разрешений объединяются в окончательную конфигурацию sandbox.
Репозиторий claude-code, каталог примеров включает начальные конфигурации параметров для распространённых сценариев развёртывания, включая примеры, специфичные для sandbox. Используйте их как отправные точки и адаптируйте их в соответствии с вашими потребностями.
Режимы разрешений
/sandbox не является режимом разрешений. Режимы разрешений решают, выполняется ли вызов инструмента и запрашивается ли вас сначала, в то время как sandbox ограничивает, к чему может получить доступ команда Bash после её запуска. Они отличаются в том, что они контролируют и что заменяет запрос для каждого действия:
| Что контролирует | Что заменяет запрос | |
|---|---|---|
/sandbox |
К чему может получить доступ команда Bash после её запуска | Сама граница sandbox в режиме автоматического разрешения |
| Auto mode | Выполняется ли каждый вызов инструмента | Классификатор, который проверяет действия |
--dangerously-skip-permissions |
Выполняется ли каждый вызов инструмента | Ничего. Проверки защищённого пути также пропускаются; только удаление / или вашего домашнего каталога по-прежнему запрашивает |
Режим автоматического разрешения sandbox отличается от режима auto: автоматическое разрешение одобряет команды Bash, потому что граница sandbox их содержит, в то время как режим auto использует классификатор для проверки действий. Два работают независимо и могут быть объединены. Чтобы выбрать границу изоляции для автоматических запусков, см. Sandbox environments.
Настройка sandbox для вашей организации
Администраторы могут требовать sandboxing для каждого пользователя, препятствовать разработчикам расширять политику и маршрутизировать трафик sandbox через корпоративный прокси.
Применение sandboxing с управляемыми параметрами
Чтобы требовать sandbox для каждого разработчика, доставьте ключи sandbox через управляемые параметры, либо как файл, управляемый вашей MDM, либо через управляемые параметры сервера на Claude.ai.
Следующая конфигурация управляемых параметров включает sandbox, отказывает запустить Claude Code, если sandbox не может инициализироваться, и препятствует модели повторять команды вне sandbox:
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false
}
}
Два ключа помимо enabled контролируют, что происходит, когда sandbox не может выполнить команду:
failIfUnavailable: отсутствующая зависимость, такая как bubblewrap на Linux, блокирует запуск Claude Code вместо показа предупреждения и возврата к выполнению без изоляцииallowUnsandboxedCommands: false: механизм выходаdangerouslyDisableSandboxигнорируется, поэтому команды, которые не выполняются в sandbox, не могут быть повторены вне него
Два дополнения стоит рассмотреть вместе с ними. Добавьте excludedCommands для любых одобренных организацией инструментов, которые должны выполняться без изоляции. Добавьте записи denyRead для каталогов учётных данных, таких как ~/.aws и ~/.ssh, которые политика чтения по умолчанию всё ещё разрешает.
Sandbox не работает на нативной Windows, поэтому если ваш парк включает хосты Windows, ограничьте эту конфигурацию macOS и Linux или попросите этих пользователей запустить Claude Code внутри WSL2 или контейнера.
Препятствование разработчикам расширять политику
Для логических ключей, таких как enabled и failIfUnavailable, Claude Code использует управляемое значение и игнорирует всё, что разработчик устанавливает локально. Для ключей массива, таких как excludedCommands и allowRead, Claude Code объединяет записи из каждой области, поэтому разработчик может добавлять записи, которые расширяют политику.
Установите allowManagedReadPathsOnly в true в управляемых параметрах, чтобы только записи allowRead из управляемых параметров учитывались. Записи allowRead пользователя, проекта и локальные игнорируются. Это препятствует разработчикам расширять доступ на чтение за пределы одобренных организацией путей. Чтобы заблокировать сетевые домены таким же образом, установите allowManagedDomainsOnly.
excludedCommands не имеет эквивалентной блокировки только для управляемых, поэтому разработчик всегда может добавлять записи, которые выполняют дополнительные команды вне sandbox. Держите управляемый список узким.
Конфигурация пользовательского прокси
Для организаций, требующих продвинутой сетевой безопасности, вы можете реализовать пользовательский прокси для:
- Расшифровки и проверки трафика HTTPS
- Применения пользовательских правил фильтрации
- Логирования всех сетевых запросов
- Интеграции с существующей инфраструктурой безопасности
Чтобы указать Claude Code на ваш прокси, установите порты прокси в параметрах sandbox:
{
"sandbox": {
"network": {
"httpProxyPort": 8080,
"socksProxyPort": 8081
}
}
}
Troubleshooting
Некоторые команды не выполняются внутри sandbox, хотя они работают вне его. Исправления ниже охватывают наиболее распространённые случаи.
- Команды не выполняются с ошибкой host-not-allowed: многие инструменты CLI должны достичь определённых хостов. Предоставление разрешения при запросе добавляет хост в ваш список разрешённых, поэтому инструмент выполняется внутри sandbox в будущем.
jestзависает или не выполняется:watchmanнесовместим с sandbox. Вместо этого запуститеjest --no-watchman.- Go-based CLIs не выполняют проверку TLS на macOS: инструменты, такие как
gh,gcloudиterraform, могут не выполнять проверку TLS под Seatbelt. Перечислите эти инструменты вexcludedCommands, чтобы запустить их вне sandbox. Если вы используетеhttpProxyPortс MITM прокси и пользовательским CA, установитеenableWeakerNetworkIsolationвtrueвместо этого. - Команды
dockerне выполняются:dockerнесовместим с sandbox. Добавьтеdocker *вexcludedCommands, чтобы запустить его вне sandbox. - Bubblewrap не запускается внутри контейнера: в непривилегированном контейнере bubblewrap не может смонтировать свежую файловую систему
/proc. УстановитеenableWeakerNestedSandboxвtrue, чтобы внутренний sandbox привязал существующий/procконтейнера вместо этого. Используйте этот параметр только когда внешний контейнер уже обеспечивает границу изоляции, которая вам требуется, так как это раскрывает информацию о процессе для изолированных команд, которую свежее монтирование/procскрыло бы. - Фильтр seccomp на Linux: фильтр seccomp требуется для блокировки Unix domain sockets. Вкладка Dependencies в
/sandboxпоказывает, доступен ли он. Если он отсутствует, запуститеnpm install -g @anthropic-ai/sandbox-runtimeдля установки помощника. --dangerously-skip-permissionsне выполняется как root: этот флаг блокируется при запуске как root или через sudo на Linux и macOS, потому что доступ root в сочетании с отсутствием запросов разрешений может изменять любой файл или сервис в системе. Проверка автоматически пропускается внутри признанного sandbox. Чтобы запустить автономно в контейнере, используйте конфигурацию dev container, которая запускает Claude Code как непривилегированного пользователя.
Ограничения
Sandboxing снижает риск, но не является полной границей изоляции. Просмотрите ограничения ниже перед тем, как полагаться на него как на жёсткий контроль безопасности.
Ограничения безопасности
- Фильтрация сети: система фильтрации сети работает путём ограничения доменов, к которым процессы могут подключаться. Встроенный прокси не завершает и не выполняет проверку TLS исходящего трафика, поэтому содержимое зашифрованных соединений не проверяется. Вы несёте ответственность за обеспечение того, чтобы в вашей политике разрешались только доверенные домены.
Разрешение широких доменов, таких как github.com, может создать пути для экспортирования данных. Потому что прокси принимает решение о разрешении на основе предоставленного клиентом имени хоста без проверки TLS, код, работающий внутри sandbox, потенциально может использовать domain fronting или аналогичные методы для достижения хостов вне списка разрешений. Если ваша модель угроз требует более сильных гарантий, настройте пользовательский прокси, который завершает TLS и проверяет трафик, и установите его сертификат CA внутри sandbox. Более сильная изоляция сети, осведомлённая о TLS, является активной областью разработки.
- Повышение привилегий через Unix sockets: конфигурация
allowUnixSocketsможет случайно предоставить доступ к мощным системным сервисам, которые могут привести к обходам sandbox. Например, разрешение доступа к/var/run/docker.sockфактически предоставляет доступ к хост-системе через сокет Docker. Тщательно рассмотрите любые Unix sockets, которые вы разрешаете через sandbox. - Повышение привилегий разрешений файловой системы: чрезмерно широкие разрешения на запись в файловую систему могут включить атаки повышения привилегий. Разрешение записи в каталоги, содержащие исполняемые файлы в
$PATH, каталоги конфигурации системы или файлы конфигурации оболочки пользователя, такие как.bashrcили.zshrc, может привести к выполнению кода в разных контекстах безопасности, когда другие пользователи или системные процессы получают доступ к этим файлам. - Сила Linux sandbox: реализация Linux обеспечивает сильную изоляцию файловой системы и сети, но включает режим
enableWeakerNestedSandbox, который позволяет ему работать внутри окружений Docker без привилегированных пространств имён или на хостах Linux, где непривилегированные пользовательские пространства имён отключены sysctl. Эта опция значительно ослабляет безопасность и должна использоваться только когда дополнительная изоляция иным образом применяется. - Файлы параметров защищены: sandbox автоматически запрещает доступ на запись к файлам
settings.jsonClaude Code в каждой области и к каталогу управляемых параметров, поэтому изолированная команда не может изменять свою собственную политику.
Совместимость платформ и инструментов
- Поддержка платформ: поддерживает macOS, Linux и WSL2. WSL1 и нативная Windows не поддерживаются.
- Накладные расходы производительности: минимальные, но некоторые операции файловой системы могут быть немного медленнее.
- Совместимость инструментов: некоторые инструменты, требующие определённых шаблонов доступа к системе, могут потребовать корректировки конфигурации или могут потребовать запуска вне sandbox.
Область
Sandbox изолирует подпроцессы Bash. Другие инструменты работают в разных границах:
- Встроенные инструменты файлов: Read, Edit и Write используют систему разрешений напрямую, а не работают через sandbox. См. permissions.
- Использование компьютера: когда Claude открывает приложения и управляет вашим экраном, он работает на вашем фактическом рабочем столе, а не в изолированной среде. Запросы разрешений для каждого приложения контролируют каждое приложение. См. computer use in the CLI или computer use in Desktop.
- Переменные окружения: изолированные команды Bash наследуют окружение родительского процесса по умолчанию, включая любые учётные данные, установленные там. Чтобы удалить учётные данные Anthropic и поставщика облака из подпроцессов, установите
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB. - Subagents: subagents работают в том же процессе, что и родительский сеанс, и используют ту же конфигурацию sandbox. Команды Bash внутри subagent изолированы, когда sandboxing включен в родительском сеансе.
Эффективный sandboxing требует как изоляции файловой системы, так и сетевой изоляции. Без сетевой изоляции скомпрометированный агент может экспортировать конфиденциальные файлы, такие как ключи SSH. Без изоляции файловой системы скомпрометированный агент может установить бэкдор в системные ресурсы для получения сетевого доступа. Когда вы расширяете значения по умолчанию, проверьте, что путь allowWrite, широкая запись allowedDomains или исключение excludedCommands не отменяет ограничение на другой стороне.
См. также
- Sandbox environments: сравните встроенный sandbox с dev containers, контейнерами и ВМ
- Security: комплексные функции безопасности и лучшие практики
- Permissions: конфигурация разрешений и контроль доступа
- Settings: полная справка по конфигурации
- CLI reference: параметры командной строки