2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.
4 4
5# Настройка изолированного инструмента Bash5# Настройка инструмента Bash в песочнице
6 6
7> Узнайте, как изолированный инструмент Bash в Claude Code обеспечивает изоляцию файловой системы и сети для более безопасного и автономного выполнения агента.7> Ограничьте файлы и сетевые хосты, к которым могут обращаться shell-команды Claude Code, с помощью встроенной песочницы. Включите её, задайте границы и исправьте то, что она нарушает.
8 8
9Bash sandbox позволяет Claude выполнять большинство команд оболочки без остановки для запроса разрешения. Вместо одобрения каждой команды вы определяете, какие файлы и сетевые домены могут использовать команды, и операционная система применяет эту границу для каждой команды Bash, PowerShell или Monitor и её дочерних процессов.9Песочница Bash — это граница, которую операционная система устанавливает вокруг shell-команд, запускаемых Claude на вашем компьютере. Вы задаёте, к каким файлам и сетевым доменам могут обращаться эти команды, и ограничения применяются к командам Bash, PowerShell и Monitor, а также к запускаемым ими процессам. Поскольку операционная система применяет ограничения во время выполнения команды, Claude Code может [запускать команды в песочнице, не спрашивая вас](#sandbox-modes) о подтверждении каждой из них.
10
11Песочница охватывает только shell-команды. Файловые инструменты Claude, MCP-серверы и хуки [работают вне её](#what-runs-outside-the-sandbox).
12
13Песочница работает в macOS, Linux и WSL2. В нативной Windows Claude Code запускает команды без песочницы. Чтобы использовать песочницу на компьютере с Windows, запускайте Claude Code внутри дистрибутива WSL2.
10 14
11<Note>15<Note>
12 Для сравнения других подходов к изоляции, таких как dev containers, пользовательские контейнеры и виртуальные машины, см. [Sandbox environments](/docs/ru/sandbox-environments). Чтобы уменьшить количество запросов разрешений для инструментов, отличных от Bash, см. [permission modes](/docs/ru/permission-modes).16 На этой странице описана песочница вокруг shell-команд на вашем собственном компьютере. Смежные вопросы рассматриваются на других страницах:
17
18 * О том, как изолируется облачная сессия, см. [Безопасность и изоляция](/docs/ru/claude-code-on-the-web#security-and-isolation)
19 * Чтобы сравнить другие подходы к изоляции, такие как dev-контейнеры, пользовательские контейнеры и виртуальные машины, см. [Среды песочницы](/docs/ru/sandbox-environments)
20 * Чтобы сократить количество запросов разрешений для инструментов, отличных от Bash, см. [режимы разрешений](/docs/ru/permission-modes)
13</Note>21</Note>
14 22
23<h2 id="what-the-sandbox-restricts">
24 Что ограничивает песочница
25</h2>
26
27Пока песочница включена, shell-команды, которые запускает Claude, выполняются внутри её границ, как и процессы, которые эти команды запускают. По умолчанию песочница отключена. Чтобы включить её, выполните `/sandbox` в сессии, как показано в разделе [Начало работы](#get-started), или установите для [`sandbox.enabled`](/docs/ru/settings-reference#sandbox-enabled) значение `true` в [файле настроек](/docs/ru/settings), например `~/.claude/settings.json`.
28
29В таблице показано, к чему изолированная в песочнице команда имеет доступ по умолчанию, и настройки, которые изменяют каждое значение по умолчанию.
30
31| Доступ | По умолчанию | Как изменить |
32| :- | :- | :- |
33| Запись | Рабочий каталог, временный каталог пользователя и [добавленные вами каталоги](/docs/ru/permissions#additional-directories-grant-file-access-not-configuration). [Защищённые пути](#protected-paths) остаются запрещёнными для записи | [`filesystem.allowWrite`](/docs/ru/settings-reference#sandbox-filesystem-allowwrite), [`filesystem.denyWrite`](/docs/ru/settings-reference#sandbox-filesystem-denywrite) |
34| Чтение | Большая часть машины, включая файлы с учётными данными, такие как `~/.ssh` и `~/.aws/credentials` | [`filesystem.denyRead`](/docs/ru/settings-reference#sandbox-filesystem-denyread), [`credentials`](#protect-credentials) |
35| Сеть | Прямого выхода нет. Соединения проходят через прокси на вашей машине, который проверяет каждый хост по списку разрешённых доменов, изначально пустому. Ваш режим разрешений определяет, [что происходит с другими хостами](#hosts-outside-your-allowed-domains) | [`network.allowedDomains`](/docs/ru/settings-reference#sandbox-network-alloweddomains), [`network.deniedDomains`](/docs/ru/settings-reference#sandbox-network-denieddomains) |
36| Переменные окружения | Наследуются от Claude Code, включая любые секреты в его окружении | [`credentials`](#protect-credentials), [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars) |
37
38Claude Code создаёт песочницу на основе пакета с открытым исходным кодом [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime).
39
40<h3 id="what-runs-outside-the-sandbox">
41 Что выполняется вне песочницы
42</h3>
43
44Песочница оборачивает shell-команды. Следующие инструменты и процессы выполняются вне её:
45
46* **Встроенные инструменты для работы с файлами и веб-ресурсами**: такие инструменты, как Read, Edit, Write, WebFetch и WebSearch, вместо этого подчиняются [правилам разрешений](/docs/ru/permissions). Запись в `denyRead` не останавливает инструмент Read, а `allowedDomains` не ограничивает WebFetch
47* **Другие процессы, которые запускает Claude Code**: командные [хуки](/docs/ru/hooks), локальные [MCP-серверы](/docs/ru/mcp), [мониторы плагинов](/docs/ru/plugins/components#monitors), [LSP-серверы](/docs/ru/tools-reference#lsp-tool-behavior) и вспомогательные команды, такие как команда вашей [строки состояния](/docs/ru/statusline) и `apiKeyHelper`, выполняются с вашим полным доступом
48
49Некоторые shell-команды также выполняются вне песочницы, в зависимости от ваших настроек:
50
51* **Команды, которые вы вводите сами**: команда, введённая в [промпте режима оболочки `!`](/docs/ru/interactive-mode#shell-mode-with-prefix), в большинстве сессий выполняется без песочницы. В разделе [Строгий режим песочницы](#turn-off-the-retry-with-strict-sandbox-mode) перечислены сессии, в которых введённая вами команда выполняется в песочнице
52* **Исключённые команды**: команды, соответствующие [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands), выполняются без песочницы
53* **Повторные попытки без песочницы**: Claude может [запросить выполнение команды без песочницы](#the-unsandboxed-retry-escape-hatch), обычно после того, как она завершилась с ошибкой в песочнице
54
55Чтобы поместить инструменты, процессы и команды из этого раздела за единую границу, запустите сам процесс Claude Code в [контейнере, виртуальной машине или среде выполнения песочницы](/docs/ru/sandbox-environments).
56
15<h2 id="get-started">57<h2 id="get-started">
16 Начало работы58 Начало работы
17</h2>59</h2>
18 60
19Sandbox встроен в Claude Code и работает на macOS, Linux и WSL2. Нативная Windows не поддерживается. На Windows запустите Claude Code внутри дистрибьютива WSL2.61Песочница встроена в Claude Code. Что нужно установить, зависит от вашей платформы:
20 62
21На macOS нет необходимости в установке: sandboxing использует встроенную платформу Seatbelt. На Linux и WSL2 sandbox зависит от двух пакетов, описанных в разделе [Настройка Linux и WSL2](#set-up-linux-and-wsl2). Даже если вы их ещё не установили, вы можете начать с `/sandbox`, так как его панель показывает, что-либо отсутствует.63* **macOS**: изоляция в песочнице использует встроенный фреймворк Seatbelt, поэтому можно сразу переходить к шагам
64* **Linux и WSL2**: песочница использует `bubblewrap` и `socat`, об этом рассказано в разделе [Настройка Linux и WSL2](#set-up-linux-and-wsl2). Даже если вы их ещё не установили, можно начать с `/sandbox`, потому что его панель показывает, чего не хватает
22 65
23<Steps>66<Steps>
24 <Step title="Запустите /sandbox">67 <Step title="Запустите /sandbox">
25 Начните сеанс Claude Code и выполните команду `/sandbox`:68 Начните сессию Claude Code и выполните команду `/sandbox`:
26 69
27 ```text theme={null}70 ```text theme={null}
28 /sandbox71 /sandbox
29 ```72 ```
30 73
31 Это открывает панель sandbox с тремя вкладками, плюс вкладка Dependencies на Linux, когда отсутствует опциональный фильтр seccomp:74 Откроется панель песочницы с тремя вкладками, а также вкладкой Dependencies в Linux, если отсутствует необязательный фильтр seccomp:
32 75
33 * **Mode**: выберите способ одобрения изолированных команд, описанный на следующем шаге76 * **Mode**: выберите, как подтверждаются команды в песочнице; об этом рассказано на следующем шаге
34 * **Overrides**: выберите, могут ли команды, которые не работают в sandbox, вернуться к выполнению без изоляции. Это параметр [`allowUnsandboxedCommands`](/docs/ru/settings-reference#sandbox-allowunsandboxedcommands)77 * **Overrides**: выберите, могут ли команды, которые завершаются ошибкой в песочнице, в качестве запасного варианта выполняться вне песочницы. Это настройка [`allowUnsandboxedCommands`](/docs/ru/settings-reference#sandbox-allowunsandboxedcommands)
35 * **Config**: просмотрите разрешённые параметры sandbox78 * **Config**: просмотр итоговых настроек песочницы
36 79
37 Если панель показывает только вкладку Dependencies, отсутствует требуемый пакет. Установите его, как описано в разделе [Настройка Linux и WSL2](#set-up-linux-and-wsl2), перезагрузите Claude Code и снова выполните `/sandbox`.80 Если на панели отображается только вкладка Dependencies, значит, отсутствует обязательный пакет. Установите его, как описано в разделе [Настройка Linux и WSL2](#set-up-linux-and-wsl2), перезапустите Claude Code и снова выполните `/sandbox`.
38 </Step>81 </Step>
39 82
40 <Step title="Выберите режим">83 <Step title="Выберите режим">
41 На вкладке Mode выберите автоматическое разрешение или обычные разрешения. Автоматическое разрешение выполняет изолированные команды без запроса, а обычные разрешения сохраняют обычные запросы разрешений даже когда команды изолированы. См. [Режимы sandbox](#sandbox-modes) для информации о том, какие команды всё ещё требуют запроса в режиме автоматического разрешения.84 На вкладке Mode выберите auto-allow или обычные разрешения. Режим auto-allow выполняет команды в песочнице без запросов, а режим обычных разрешений сохраняет обычные запросы разрешений, даже когда команды выполняются в песочнице. О том, какие команды всё равно вызывают запрос в режиме auto-allow, см. в разделе [Режимы песочницы](#sandbox-modes).
42 </Step>85 </Step>
43 86
44 <Step title="Выполните команду Bash">87 <Step title="Выполните команду Bash">
45 Попросите Claude выполнить команду, например сборку или набор тестов. По умолчанию команды внутри sandbox могут писать в рабочий каталог, [каталог временных файлов сеанса](/docs/ru/env-vars) и любые [каталоги, которые вы добавили](/docs/ru/permissions#additional-directories-grant-file-access-not-configuration) с помощью `--add-dir`, `/add-dir` или `permissions.additionalDirectories`.88 Попросите Claude выполнить команду, например сборку или набор тестов. По умолчанию команды в песочнице могут записывать в рабочий каталог, [временный каталог пользователя](/docs/ru/env-vars) и любые [каталоги, которые вы добавили](/docs/ru/permissions#additional-directories-grant-file-access-not-configuration) с помощью `--add-dir`, `/add-dir` или `permissions.additionalDirectories`.
46 89
47 Первый раз, когда команде требуется новый сетевой домен, Claude Code запрашивает одобрение; в [режиме auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) Claude вместо этого называет хосты, которые требует команда, [в самой команде](#per-command-allowed-domains-in-auto-mode) для проверки классификатором вместе с ней.90 Когда команде впервые нужен новый сетевой домен, Claude Code запрашивает подтверждение; в [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) Claude вместо этого указывает нужные команде хосты [в самой команде](#per-command-allowed-domains-in-auto-mode), чтобы классификатор проверил их вместе с ней.
48 91
49 Команды, которые не могут выполняться в sandbox, возвращаются к обычному потоку разрешений. Claude Code озаглавливает их запрос разрешения как "Bash command (unsandboxed)" вместо "Bash command", чтобы вы могли определить, какие команды выполнялись вне sandbox. Чтобы расширить или сузить эти границы, см. [Настройка sandboxing](#configure-sandboxing).92 Чтобы расширить или сузить то, что разрешает песочница, см. раздел [Настройка изоляции в песочнице](#configure-sandboxing).
50 93
51 Если изолированные команды не работают с ошибкой `Operation not permitted` внутри контейнера, см. запись Bubblewrap в разделе [Troubleshooting](#troubleshooting).94 Если команды в песочнице внутри контейнера завершаются ошибкой `Operation not permitted`, см. раздел [Bubblewrap не запускается внутри контейнера](#bubblewrap-fails-to-start-inside-a-container).
52 </Step>95 </Step>
53</Steps>96</Steps>
54 97
55Выбор режима на панели записывает в локальные параметры вашего проекта в `.claude/settings.local.json`, которые применяются к текущему проекту. Claude Code добавляет этот файл в вашу глобальную gitignore при сохранении параметра там. Чтобы включить sandbox во всех ваших проектах, установите [`sandbox.enabled`](/docs/ru/settings-reference#sandbox-enabled) в `true` в ваших пользовательских параметрах в `~/.claude/settings.json`. Чтобы применить sandboxing для каждого разработчика в организации, используйте [управляемые параметры](#enforce-sandboxing-with-managed-settings).98Когда вы выбираете режим на панели, Claude Code сохраняет его в локальных настройках проекта в `.claude/settings.local.json`, которые применяются к текущему проекту. Claude Code добавляет этот файл в ваш глобальный gitignore, когда сохраняет туда настройку. Чтобы включить песочницу во всех ваших проектах, задайте для [`sandbox.enabled`](/docs/ru/settings-reference#sandbox-enabled) значение `true` в пользовательских настройках в `~/.claude/settings.json`. Чтобы обязать использовать песочницу всех разработчиков в организации, используйте [управляемые настройки](#enforce-sandboxing-with-managed-settings).
56 99
57Чтобы изменить sandbox для одного сеанса без записи в файл параметров, запустите Claude Code с [`--settings`](/docs/ru/settings#change-a-setting-for-one-session). Например, эта команда запускает изолированный сеанс, в котором Claude не может повторить заблокированную команду вне sandbox:100Чтобы изменить песочницу для одной сессии без записи в файл настроек, запустите Claude Code с [`--settings`](/docs/ru/settings#change-a-setting-for-one-session). Например, эта команда запускает сессию в песочнице, в которой Claude не может повторить попытку выполнения заблокированной команды вне песочницы:
58 101
59```bash theme={null}102```bash theme={null}
60claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'103claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'
61```104```
62 105
63<Warning>106<Warning>
64 По умолчанию, если sandbox не может запуститься из-за отсутствия зависимостей или неподдерживаемой платформы, Claude Code показывает предупреждение и выполняет команды без sandboxing. Чтобы сделать это жёстким отказом, установите [`sandbox.failIfUnavailable`](/docs/ru/settings-reference#sandbox-failifunavailable) в `true`. Это предназначено для управляемых развёртываний, которые требуют sandboxing в качестве шлюза безопасности.107 По умолчанию, если песочница не может запуститься из-за отсутствующей зависимости или неподдерживаемой платформы, Claude Code выполняет команды без изоляции в песочнице. Чтобы вместо этого Claude Code завершал работу при запуске, задайте для [`sandbox.failIfUnavailable`](/docs/ru/settings-reference#sandbox-failifunavailable) значение `true`. Эту настройку могут использовать управляемые развёртывания, в которых песочница является обязательным механизмом безопасности.
65</Warning>108</Warning>
66 109
110<h3 id="confirm-commands-run-inside-the-sandbox">
111 Проверка того, что команды выполняются в песочнице
112</h3>
113
114Чтобы убедиться, что песочница работает, попросите Claude выполнить каждую строку из таблицы. То, что вы вводите в [промпте `!`](#what-runs-outside-the-sandbox), обычно выполняется вне песочницы, поэтому ввод строки вручную её не проверяет.
115
116| Команда | Результат в песочнице |
117| :- | :- |
118| `touch ~/sandbox-probe` | Завершается ошибкой `Operation not permitted` в macOS или `Read-only file system` в Linux и WSL2 |
119| `curl --noproxy '*' https://example.com` | Завершается ошибкой `Could not resolve host`, потому что у команды нет пути в обход прокси песочницы |
120
121Если Claude предлагает повторить попытку выполнения неудавшейся команды вне песочницы, отклоните повторную попытку. Если `touch` выполняется успешно, а ваш домашний каталог не входит в число каталогов, в которые песочница разрешает командам записывать, удалите `~/sandbox-probe`. Затем выполните `/sandbox`, чтобы проверить, что песочница включена и её зависимости установлены.
122
67<h3 id="set-up-linux-and-wsl2">123<h3 id="set-up-linux-and-wsl2">
68 Настройка Linux и WSL2124 Настройка Linux и WSL2
69</h3>125</h3>
70 126
71На Linux и WSL2 sandbox зависит от двух пакетов:127В Linux и WSL2 песочница использует следующие пакеты:
72 128
73* [`bubblewrap`](https://github.com/containers/bubblewrap): инструмент непривилегированной изоляции, который применяет изоляцию файловой системы129* [`bubblewrap`](https://github.com/containers/bubblewrap): непривилегированный инструмент изоляции, обеспечивающий изоляцию файловой системы
74* [`socat`](http://www.dest-unreach.org/socat/): ретранслятор, используемый для маршрутизации сетевого трафика через прокси sandbox130* [`socat`](http://www.dest-unreach.org/socat/): ретранслятор, используемый для направления сетевого трафика через прокси песочницы
75 131
76Установите их с помощью менеджера пакетов вашего дистрибьютива:132Установите их с помощью менеджера пакетов вашего дистрибутива:
77 133
78<Tabs>134<Tabs>
79 <Tab title="Ubuntu/Debian">135 <Tab title="Ubuntu/Debian">
89 </Tab>145 </Tab>
90</Tabs>146</Tabs>
91 147
92Когда зависимость отсутствует, вкладка Dependencies в `/sandbox` показывает, какие из `ripgrep`, `bubblewrap`, `socat` и фильтра seccomp отсутствуют на вашей платформе. Если вы не видите вкладку после установки и перезагрузки Claude Code, все зависимости присутствуют.148Когда зависимость отсутствует, вкладка Dependencies в `/sandbox` показывает, чего из `ripgrep`, `bubblewrap`, `socat` и фильтра seccomp не хватает на вашей платформе. Если после установки и перезапуска Claude Code вы не видите эту вкладку, все зависимости на месте.
93 149
94Ripgrep поставляется в комплекте с нативным двоичным файлом Claude Code. Фильтр seccomp является опциональным и добавляет блокировку Unix domain socket. Установите его с помощью `npm install -g @anthropic-ai/sandbox-runtime`, если он отсутствует.150Ripgrep входит в состав нативного бинарного файла Claude Code. Фильтр seccomp необязателен и добавляет блокировку доменных сокетов Unix. Если он отсутствует, установите его с помощью `npm install -g @anthropic-ai/sandbox-runtime`.
95 151
96Когда отсутствует требуемая зависимость, вкладка Dependencies является единственной показываемой вкладкой до её установки. Когда отсутствует только опциональный фильтр seccomp, вкладка Dependencies появляется наряду с другими вкладками. Проверка зависимостей выполняется при запуске, поэтому перезагрузите Claude Code после установки пакетов, чтобы `/sandbox` их обнаружил.152Когда отсутствует обязательная зависимость, вкладка Dependencies остаётся единственной отображаемой вкладкой, пока вы её не установите. Когда отсутствует только необязательный фильтр seccomp, вкладка Dependencies отображается вместе с остальными вкладками. Проверка зависимостей выполняется при запуске, поэтому после установки пакетов перезапустите Claude Code, чтобы `/sandbox` их обнаружил.
97 153
98<AccordionGroup>154<AccordionGroup>
99 <Accordion title="Ubuntu 24.04 и позже: разрешить bubblewrap создавать пользовательские пространства имён">155 <Accordion title="Ubuntu 24.04 и новее: разрешите bubblewrap создавать пространства имён пользователей">
100 На Ubuntu 24.04 и позже политика AppArmor по умолчанию предотвращает создание bubblewrap пользовательских пространств имён, необходимых для изоляции.156 В Ubuntu 24.04 и новее политика AppArmor по умолчанию не позволяет bubblewrap создавать пространства имён пользователей, необходимые ему для изоляции.
101 157
102 Чтобы проверить, применяется ли это ограничение в вашей среде, включая внутри WSL2, выполните `sysctl kernel.apparmor_restrict_unprivileged_userns`. Если команда возвращает `0`, пропустите этот шаг. Если она выводит ошибку `No such file or directory`, ключ не существует и вы можете пропустить этот шаг. Если она возвращает `1`, добавьте профиль AppArmor, который предоставляет `bwrap` эту возможность:158 Чтобы проверить, действует ли это ограничение в вашей среде, в том числе в WSL2, выполните `sysctl kernel.apparmor_restrict_unprivileged_userns`. Если команда возвращает `0`, пропустите этот шаг. Если она выводит ошибку `No such file or directory`, ключ не существует, и этот шаг можно пропустить. Если она возвращает `1`, добавьте профиль AppArmor, предоставляющий `bwrap` эту возможность:
103 159
104 ```bash theme={null}160 ```bash theme={null}
105 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'161 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'
113 EOF169 EOF
114 ```170 ```
115 171
116 Профиль применяется только к самому `bwrap`, а не к командам, которые он выполняет внутри sandbox. Перезагрузите AppArmor, чтобы применить его:172 Профиль применяется только к самому `bwrap`, а не к командам, которые он выполняет в песочнице. Перезагрузите AppArmor, чтобы применить его:
117 173
118 ```bash theme={null}174 ```bash theme={null}
119 sudo systemctl reload apparmor175 sudo systemctl reload apparmor
120 ```176 ```
121 </Accordion>177 </Accordion>
122 178
123 <Accordion title="Примечания WSL2">179 <Accordion title="Примечания для WSL2">
124 Проверьте версию WSL с помощью `wsl -l -v` из PowerShell. Если вы видите `Sandboxing requires WSL2`, ваш дистрибьютив работает на WSL1. Обновите его на WSL2 или запустите Claude Code без sandboxing.180 Проверьте версию WSL с помощью `wsl -l -v` в PowerShell. Если вы видите `Sandboxing requires WSL2`, ваш дистрибутив работает на WSL1. Обновите его до WSL2 или запускайте Claude Code без изоляции в песочнице.
125 181
126 На WSL2 WSL передаёт запуск двоичного файла Windows, такого как `cmd.exe`, `powershell.exe` или что-либо под `/mnt/c/`, хосту Windows через Unix socket, поэтому то, может ли изолированная команда запустить один из них, следует параметрам sandbox для [Unix-socket](/docs/ru/settings-reference#sandbox-network-allowunixsockets): опциональный фильтр seccomp должен быть установлен, чтобы в первую очередь заблокировать socket. Чтобы разрешить эти запуски, установите `allowAllUnixSockets`; чтобы полностью исключить их из sandbox, добавьте команду в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands).182 В WSL2 запуск бинарного файла Windows, например `cmd.exe`, `powershell.exe` или чего-либо в `/mnt/c/`, WSL передаёт хосту Windows через сокет Unix, поэтому возможность запустить такой файл из команды в песочнице определяется [настройками сокетов Unix](/docs/ru/settings-reference#sandbox-network-allowunixsockets) песочницы: чтобы сокет вообще блокировался, должен быть установлен необязательный фильтр seccomp. Чтобы разрешить такие запуски, задайте `allowAllUnixSockets`, что открывает все сокеты Unix для команд в песочнице.
127 </Accordion>183 </Accordion>
128</AccordionGroup>184</AccordionGroup>
129 185
130<h3 id="sandbox-modes">186<h3 id="sandbox-modes">
131 Режимы sandbox187 Режимы песочницы
132</h3>188</h3>
133 189
134Claude Code предлагает два режима sandbox. В обоих sandbox применяет одни и те же ограничения файловой системы и сети; разница только в том, разрешены ли изолированные команды автоматически или требуют явного разрешения.190Claude Code предлагает два режима песочницы. В обоих песочница применяет одинаковые ограничения файловой системы и сети; различие лишь в том, подтверждаются ли команды в песочнице автоматически или требуют явного разрешения.
135 191
136<h4 id="auto-allow-mode">192<h4 id="auto-allow-mode">
137 Режим автоматического разрешения193 Режим auto-allow
138</h4>194</h4>
139 195
140Когда команда может быть изолирована, Claude Code выполняет её внутри sandbox и автоматически разрешает её без запроса вашего разрешения. Команды, которые не могут быть изолированы, такие как те, которые требуют сетевого доступа к неразрешённым хостам, возвращаются к обычному потоку разрешений, где Claude Code проверяет ваши [правила разрешений](/docs/ru/permissions) и запрашивает у вас разрешение для любой команды, которую эти правила не разрешают, с запросом в режиме Manual.196Claude Code автоматически, без запроса, подтверждает команду, если она выполняется в песочнице. Команда проходит обычный [процесс получения разрешений](/docs/ru/permissions), если она выполняется вне песочницы, потому что соответствует [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) или потому что Claude [повторяет попытку её выполнения вне песочницы](#the-unsandboxed-retry-escape-hatch).
197
198Команда в песочнице, которая подключается к хосту, который вы не разрешили, остаётся в песочнице. О том, кто решает, будет ли установлено соединение, рассказано в разделе [Хосты вне разрешённых доменов](#hosts-outside-your-allowed-domains).
141 199
142Даже в режиме автоматического разрешения применяется следующее:200Даже в режиме auto-allow по-прежнему действует следующее:
143 201
144* Явные [правила отказа](/docs/ru/permissions) всегда соблюдаются202* Явные [правила запрета](/docs/ru/permissions) всегда соблюдаются
145* Команды `rm` или `rmdir`, которые нацелены на [критический путь](/docs/ru/permission-modes#critical-paths), по-прежнему вызывают обычный поток разрешений203* Команды `rm` или `rmdir`, нацеленные на [критический путь](/docs/ru/permission-modes#critical-paths), по-прежнему проходят обычный процесс получения разрешений
146* [Правила ask](/docs/ru/permissions) с областью действия контента, такие как `Bash(git push *)`, по-прежнему требуют запроса даже для изолированных команд204* [Правила запроса](/docs/ru/permissions) с ограничением по содержимому, например `Bash(git push *)`, по-прежнему вызывают запрос даже для команд в песочнице
147* Простое правило `Bash` ask, или эквивалентная форма `Bash(*)`, пропускается для команд, которые выполняются в изолированном режиме; оно по-прежнему применяется к командам, которые возвращаются к обычному потоку разрешений. В [режиме plan](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode) правило не пропускается: оно запрашивает разрешение для изолированных команд, включая команды только для чтения. До версии 2.1.212 пропуск применялся и в режиме plan205* Голое правило запроса `Bash` или эквивалентная форма `Bash(*)` пропускается для команд, выполняемых в песочнице; оно по-прежнему применяется к командам, которые переходят к обычному процессу получения разрешений. В [режиме планирования](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode) правило не пропускается: оно вызывает запрос и для команд в песочнице, включая команды только для чтения
148 206
149<Info>207<Info>
150 Режим автоматического разрешения работает независимо от вашего параметра режима разрешений, за исключением [режима plan](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode), команды, которая несёт [разрешённые домены для каждой команды](#per-command-allowed-domains-in-auto-mode), и [проверки классификатором на стороне сервера](/docs/ru/permission-modes#how-the-classifier-evaluates-actions) изолированных команд в режиме auto. Даже если вы не находитесь в режиме "принять правки", изолированные команды Bash выполняются автоматически при включении автоматического разрешения. Это означает, что команды Bash, которые изменяют файлы в границах sandbox, выполняются без запроса, даже в режиме Manual, где инструменты редактирования файлов запрашивали бы разрешение.208 Режим auto-allow работает независимо от настройки режима разрешений, за тремя исключениями: [режим планирования](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode), команда авторежима с [разрешёнными доменами для отдельной команды](#per-command-allowed-domains-in-auto-mode) и [проверка классификатором на стороне сервера](/docs/ru/permission-modes#how-the-classifier-evaluates-actions) команд в песочнице в авторежиме. Даже если вы не находитесь в режиме «accept edits», команды Bash в песочнице выполняются автоматически, когда включён auto-allow. Это означает, что команды Bash, изменяющие файлы в пределах границ песочницы, выполняются без запроса даже в режиме Manual, где инструменты редактирования файлов запросили бы разрешение.
151 209
152 В режиме plan автоматическое разрешение не расширяет одобрения; см. [режим plan](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode) для информации о том, как Claude Code управляет командами во время планирования. До версии 2.1.212 автоматическое разрешение выполняло изолированные команды без запроса и в режиме plan.210 В режиме планирования auto-allow не расширяет подтверждения; о том, как Claude Code контролирует команды во время планирования, см. в разделе [режим планирования](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode).
153</Info>211</Info>
154 212
155<h4 id="regular-permissions-mode">213<h4 id="regular-permissions-mode">
156 Режим обычных разрешений214 Режим обычных разрешений
157</h4>215</h4>
158 216
159Все команды Bash проходят через обычный поток разрешений, даже когда они изолированы. Это обеспечивает больше контроля, но требует больше одобрений.217Все команды Bash проходят обычный процесс получения разрешений, даже в песочнице. Это даёт больше контроля, но требует больше подтверждений.
160 218
161<h4 id="the-unsandboxed-retry-escape-hatch">219<h4 id="the-unsandboxed-retry-escape-hatch">
162 Механизм выхода для неизолированного повтора220 Запасной выход: повторная попытка вне песочницы
221</h4>
222
223Повторная попытка вне песочницы — это запасной выход для команд, которые завершаются ошибкой в песочнице, например для инструментов, несовместимых с ней. Когда песочница блокирует сетевое соединение, Claude Code указывает запрещённый хост в результате команды, чтобы Claude видел, что было заблокировано. Claude анализирует ошибку и может повторить попытку выполнения команды с параметром `dangerouslyDisableSandbox`.
224
225Повторная команда выполняется вне песочницы. В интерактивной сессии терминала то, кто её подтверждает, зависит от вашего режима разрешений:
226
227* **Режим `bypassPermissions`**: повторная попытка выполняется без запроса
228* **Режим Manual и режим `acceptEdits`**: вы получаете запрос с заголовком «Bash command (unsandboxed)»
229* **[Авторежим](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode)**: отдельная модель-классификатор оценивает исходную команду
230* **Режим `dontAsk`**: Claude Code отклоняет повторную попытку
231* **Режим планирования**: см. [как Claude Code контролирует команды во время планирования](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode)
232
233Следующие правила и настройки меняют то, кто подтверждает повторную попытку:
234
235* **Соответствующее правило разрешения**: если правило разрешения, например `Bash(curl *)`, соответствует команде, оно также подтверждает повторную попытку, поэтому команда выполняется вне песочницы без запроса
236* **Правило запроса для параметра**: добавьте [правило запроса](/docs/ru/permissions#match-by-input-parameter) для `Bash(dangerouslyDisableSandbox:true)`, чтобы получать запрос при повторных попытках Bash. Вы получите запрос и в авторежиме, и в режиме `bypassPermissions`, а правило имеет приоритет над соответствующим правилом разрешения
237* **[`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories)**: о повторных попытках, вызывающих запрос, когда эта настройка включена, рассказано в разделе [Действия, которые не подтверждаются автоматически ни в одном режиме](/docs/ru/permission-modes#actions-no-mode-auto-approves)
238
239<h4 id="turn-off-the-retry-with-strict-sandbox-mode">
240 Отключение повторной попытки с помощью строгого режима песочницы
163</h4>241</h4>
164 242
165Некоторые команды вообще не могут выполняться внутри sandbox, такие как инструменты, несовместимые с ним, или те, которые требуют хоста, который вы не разрешили. Claude Code сообщает о нарушениях sandbox в результате заблокированной команды, называя путь или хост, который sandbox отклонил, чтобы Claude видел, что sandbox заблокировал. Вместо того чтобы не выполнить задачу или потребовать отключения sandboxing, Claude Code включает механизм выхода: Claude анализирует нарушение и может повторить команду с параметром `dangerouslyDisableSandbox`.243Вы можете отключить повторную попытку вне песочницы, задав `"allowUnsandboxedCommands": false` в [настройках песочницы](/docs/ru/settings-reference#sandbox-settings). Когда повторная попытка отключена, Claude Code игнорирует параметр `dangerouslyDisableSandbox`. Пока песочница работает, команды, которые выполняет Claude, в этом случае выполняются в песочнице, если они не соответствуют записи `excludedCommands`. Чтобы Claude Code не выполнял команды вне песочницы, когда песочница не может запуститься, задайте также [`failIfUnavailable`](/docs/ru/settings-reference#sandbox-failifunavailable). Вкладка **Overrides** в `/sandbox` показывает эту настройку как **Strict sandbox mode**.
166 244
167Повторная команда выполняется вне sandbox, поэтому она проходит через обычный поток разрешений. В режиме Manual вы получаете запрос подтверждения. В [режиме auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) классификатор оценивает базовую команду. Пока [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) включен, повтор, который требует одобрения для выполнения вне sandbox, запрашивает у вас разрешение вместо этого. Чтобы получить запрос на каждый неизолированный повтор даже в режиме auto, добавьте [правило ask](/docs/ru/permissions#match-by-input-parameter) для `Bash(dangerouslyDisableSandbox:true)`.245Значение `false` в ваших пользовательских настройках, `--settings` или управляемых настройках сохраняет силу, даже когда настройки проекта задают `true`. Значение `false` в ваших пользовательских настройках не делает песочницу обязательной по требованию администратора, поэтому остальные настройки песочницы проекта по-прежнему применяются. До v2.1.285 значение `true` проекта переопределяло `false` в ваших пользовательских настройках.
168 246
169Вы можете отключить этот механизм выхода, установив `"allowUnsandboxedCommands": false` в ваши [параметры sandbox](/docs/ru/settings-reference#sandbox-settings). При отключении механизма выхода Claude Code игнорирует параметр `dangerouslyDisableSandbox`, и каждая команда, которую выполняет Claude, должна выполняться в sandbox, если только вы не указали её в `excludedCommands`. Вкладка **Overrides** в `/sandbox` показывает этот параметр как **Strict sandbox mode**.247Если вы или ваш администратор отключаете повторную попытку в управляемых настройках или с помощью флага `--settings`, песочница становится обязательной по требованию администратора. Тогда Claude Code игнорирует настройки в файлах репозитория, которые ослабляют песочницу, включая записи `excludedCommands`. Их список приведён в разделе [Настройки репозитория при песочнице, обязательной по требованию администратора](#repository-settings-under-an-admin-required-sandbox).
170 248
171Режим strict sandbox применяется к командам, которые выполняет Claude. Команды, которые вы вводите сами в [приглашение shell-mode с префиксом `!`](/docs/ru/interactive-mode#shell-mode-with-prefix), выполняются вне sandbox, если только сеанс не является одним из следующих:249Строгий режим песочницы применяется к командам, которые выполняет Claude. Команды, которые вы вводите сами в [промпте режима оболочки `!`](/docs/ru/interactive-mode#shell-mode-with-prefix), выполняются вне песочницы, если только сессия не относится к одному из следующих типов:
172 250
173* **[Фоновый сеанс](/docs/ru/agent-view)**: режим strict sandbox охватывает и команды shell-mode251* **[Фоновая сессия](/docs/ru/agent-view)**: строгий режим песочницы распространяется и на команды режима оболочки
174* **Сеанс Linux с установленной переменной [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars#variables)**: каждая команда выполняется в sandbox, включая команды shell-mode252* **Сессия в Linux с заданной переменной [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars#variables)**: все команды выполняются в песочнице, включая команды режима оболочки
175 253
176До версии 2.1.260 режим strict sandbox изолировал команды shell-mode в каждом сеансе.254До v2.1.260 строгий режим песочницы помещал команды режима оболочки в песочницу в каждой сессии.
177 255
178<h4 id="temporary-directories">256<h4 id="temporary-directories">
179 Временные каталоги257 Временные каталоги
180</h4>258</h4>
181 259
182Каталог временных файлов сеанса доступен для записи внутри sandbox по умолчанию, наряду с рабочим каталогом. Если вы не [отключите изоляцию файловой системы](#disable-filesystem-isolation), Claude Code устанавливает `$TMPDIR` в этот каталог для изолированных команд, поэтому инструменты, которые записывают временные файлы, работают без дополнительной конфигурации.260По умолчанию в песочнице наряду с рабочим каталогом доступен для записи временный каталог пользователя. Если вы не [отключите изоляцию файловой системы](#disable-filesystem-isolation), Claude Code задаёт `$TMPDIR` равным этому каталогу для команд в песочнице, поэтому инструменты, записывающие временные файлы, работают без дополнительной настройки.
183 261
184Неизолированные команды наследуют `$TMPDIR` вашей оболочки, когда она установлена, поэтому пока изоляция файловой системы включена, изолированные и неизолированные команды разрешают `$TMPDIR` в разные каталоги. Если ваша оболочка оставляет `$TMPDIR` неустановленной или пустой, неизолированная команда, которая ссылается на `$TMPDIR`, получает ваше переопределение [`CLAUDE_CODE_TMPDIR`](/docs/ru/env-vars) или временный каталог операционной системы, когда вы не установили его или переопределение является длинным путём, поэтому переменная не расширяется в пустую строку. Чтобы передавать временные файлы между ними, записывайте их в рабочий каталог вместо этого.262Команды вне песочницы наследуют `$TMPDIR` вашей оболочки, если эта переменная задана, поэтому, пока изоляция файловой системы включена, команды в песочнице и вне её разрешают `$TMPDIR` в разные каталоги. Если ваша оболочка оставляет `$TMPDIR` незаданной или пустой, команда вне песочницы, ссылающаяся на `$TMPDIR`, получает ваше переопределение [`CLAUDE_CODE_TMPDIR`](/docs/ru/env-vars) или временный каталог операционной системы, если вы его не задали или переопределение является длинным путём, поэтому переменная не раскрывается в пустую строку. Чтобы передавать временные файлы между ними, записывайте их вместо этого в рабочий каталог.
185 263
186<h2 id="configure-sandboxing">264<h2 id="configure-sandboxing">
187 Настройка изоляции в песочнице265 Настройка изоляции в песочнице
188</h2>266</h2>
189 267
190Настройте поведение песочницы через файл `settings.json`. Полную справку по конфигурации см. в разделе [Settings](/docs/ru/settings-reference#sandbox-settings).268Настройте поведение песочницы в файле `settings.json`. Полный справочник по конфигурации см. в разделе [Настройки](/docs/ru/settings-reference#sandbox-settings).
191 269
192По умолчанию команды в песочнице могут писать в текущий рабочий каталог, временный каталог для каждого пользователя и любые [каталоги, которые вы добавили](/docs/ru/permissions#additional-directories-grant-file-access-not-configuration) с помощью `--add-dir`, `/add-dir` или `permissions.additionalDirectories`. Если подпроцессы, такие как `kubectl`, `terraform` или `npm`, должны писать вне этих каталогов, используйте `sandbox.filesystem.allowWrite` для предоставления доступа к определённым путям:270По умолчанию команды в песочнице могут записывать в текущий рабочий каталог, во временный каталог пользователя и в любые [каталоги, которые вы добавили](/docs/ru/permissions#additional-directories-grant-file-access-not-configuration) с помощью `--add-dir`, `/add-dir` или `permissions.additionalDirectories`. Если командам подпроцессов, таким как `kubectl`, `terraform` или `npm`, нужно записывать за пределами этих каталогов, используйте `sandbox.filesystem.allowWrite`, чтобы предоставить доступ к определённым путям:
193 271
194```json theme={null}272```json theme={null}
195{273{
202}280}
203```281```
204 282
205Эти пути применяются на уровне операционной системы, поэтому все команды, работающие внутри песочницы, включая их дочерние процессы, их соблюдают. Это рекомендуемый подход, когда инструменту требуется доступ на запись в определённое место, вместо полного исключения инструмента из песочницы с помощью `excludedCommands`.283Эти пути применяются на уровне ОС, поэтому их соблюдают все команды, выполняемые внутри песочницы, включая их дочерние процессы. Это рекомендуемый подход, когда инструменту нужен доступ на запись к определённому расположению, вместо того чтобы полностью исключать инструмент из песочницы с помощью `excludedCommands`.
206 284
207Когда вы определяете один и тот же массив файловой системы в нескольких [областях параметров](/docs/ru/settings#settings-precedence), Claude Code объединяет их, комбинируя пути из каждой области вместо замены массива одной области на массив другой.285Если вы определяете один и тот же массив файловой системы в нескольких [областях действия настроек](/docs/ru/settings#settings-precedence), Claude Code объединяет их, собирая пути из всех областей действия, а не заменяя массив одной области действия массивом другой.
208 286
209Если вы исключаете источник с помощью [`--setting-sources`](/docs/ru/cli-reference) в CLI или [`settingSources`](/docs/ru/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) в Agent SDK, Claude Code игнорирует его записи `sandbox.filesystem`, его правила разрешения `Edit` и его правила отказа `Read` при построении конфигурации песочницы. Требуется Claude Code v2.1.246 или позже.287Если вы исключаете источник с помощью [`--setting-sources`](/docs/ru/cli-reference) в CLI или [`settingSources`](/docs/ru/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) в Agent SDK, Claude Code игнорирует его записи `sandbox.filesystem`, его правила разрешений `Edit` и его запрещающие правила `Read` при построении конфигурации песочницы. Требуется Claude Code v2.1.246 или новее.
210 288
211Когда вы редактируете эти списки файловой системы во время сеанса, Claude Code [применяет изменение к работающему сеансу](/docs/ru/settings#when-edits-take-effect), поэтому следующая команда в песочнице выполняется под новыми путями.289Когда вы редактируете эти списки файловой системы во время сессии, Claude Code [применяет изменение к текущей сессии](/docs/ru/settings#when-edits-take-effect), поэтому следующая команда в песочнице выполняется уже с новыми путями.
212 290
213Префиксы путей контролируют способ разрешения путей:291Пути файловой системы песочницы следуют стандартным соглашениям: `/tmp/build` — абсолютный путь, а `~/.kube` — путь относительно домашнего каталога. Это отличается от [правил разрешений Read и Edit](/docs/ru/permissions#read-and-edit), которые используют `//path` для абсолютных путей и `/path` для путей относительно проекта. Об относительных путях, завершающей косой черте и подстановочных знаках см. [Префиксы путей песочницы](/docs/ru/settings-reference#sandbox-path-prefixes).
214 292
215| Префикс | Значение | Пример |293Вы также можете запретить доступ на запись или чтение с помощью `sandbox.filesystem.denyWrite` и `sandbox.filesystem.denyRead` и снова разрешить определённые пути внутри запрещённой области с помощью `sandbox.filesystem.allowRead`. Когда правила чтения пересекаются, применяется правило с более узким путём:
216| :- | :- | :- |
217| `/` | Абсолютный путь от корня файловой системы | `/tmp/build` остаётся `/tmp/build` |
218| `~/` | Относительно домашнего каталога | `~/.kube` становится `$HOME/.kube` |
219| `./` или без префикса | Относительно корня проекта для параметров проекта или относительно `~/.claude` для параметров пользователя | `./output` в `.claude/settings.json` разрешается в `<project-root>/output` |
220
221Этот синтаксис отличается от [правил разрешения Read и Edit](/docs/ru/permissions#read-and-edit), которые используют `//path` для абсолютного и `/path` для относительного к проекту. Пути файловой системы песочницы используют стандартные соглашения: `/tmp/build` является абсолютным. О том, как Claude Code обрабатывает косую черту в конце или подстановочный знак в этих путях, см. [Префиксы путей песочницы](/docs/ru/settings-reference#sandbox-path-prefixes).
222
223Вы также можете запретить доступ на запись или чтение, используя `sandbox.filesystem.denyWrite` и `sandbox.filesystem.denyRead`, и повторно разрешить определённые пути в запрещённой области, используя `sandbox.filesystem.allowRead`. Когда правила чтения перекрываются, применяется правило с более узким путём:
224 294
225| Примеры правил | Результат |295| Примеры правил | Результат |
226| :- | :- |296| :- | :- |
227| `"denyRead": ["~/"]` с `"allowRead": ["~/projects"]` | `~/projects` доступен для чтения, а остальная часть домашнего каталога остаётся заблокированной. Более узкое разрешение повторно открывает эту часть запрещённой области |297| `"denyRead": ["~/"]` с `"allowRead": ["~/projects"]` | `~/projects` доступен для чтения, а остальная часть домашнего каталога остаётся заблокированной. Более узкое разрешение снова открывает эту часть запрещённой области |
228| `"allowRead": ["~/"]` с `"denyRead": ["~/.env"]` | `~/.env` остаётся заблокированным, а остальная часть домашнего каталога доступна для чтения. Отказ действует внутри более широкого разрешения, поэтому широкое разрешение не может скрытно повторно открыть секрет |298| `"allowRead": ["~/"]` с `"denyRead": ["~/.env"]` | `~/.env` остаётся заблокированным, а остальная часть домашнего каталога доступна для чтения. Запрет действует внутри более широкого разрешения, поэтому широкое разрешение не может незаметно снова открыть секрет |
229| `"allowRead": ["~/"]` с `"denyRead": ["~/**/.env"]` | Каждый `.env` в домашнем каталоге остаётся заблокированным, а остальное доступно для чтения. [Подстановочный отказ](/docs/ru/settings-reference#sandbox-path-prefixes) действует внутри более широкого разрешения так же, как точный путь |299| `"allowRead": ["~/"]` с `"denyRead": ["~/**/.env"]` | Все `.env` в домашнем каталоге остаются заблокированными, а остальное доступно для чтения. [Запрет с подстановочным знаком](/docs/ru/settings-reference#sandbox-path-prefixes) действует внутри более широкого разрешения так же, как и точный путь |
230 300
231Пример ниже блокирует чтение из всего домашнего каталога, но по-прежнему разрешает чтение из текущего проекта. Поместите его в `.claude/settings.json` вашего проекта, потому что относительный путь `.` разрешается в корень проекта только когда конфигурация находится в параметрах проекта:301Пример ниже блокирует чтение всего домашнего каталога, но по-прежнему разрешает чтение текущего проекта. Поместите его в `.claude/settings.json` вашего проекта, потому что относительный путь `.` разрешается в корень проекта, только когда конфигурация находится в настройках проекта:
232 302
233```json theme={null}303```json theme={null}
234{304{
242}312}
243```313```
244 314
245Если бы вы поместили ту же конфигурацию в `~/.claude/settings.json`, `.` разрешился бы в `~/.claude` вместо этого, и файлы проекта остались бы заблокированными правилом `denyRead`.315Если бы вы поместили ту же конфигурацию в `~/.claude/settings.json`, `.` разрешался бы в `~/.claude`, и файлы проекта оставались бы заблокированными правилом `denyRead`.
316
317Чтобы запретить командам в песочнице чтение домашних каталогов и смонтированных томов, сохранив при этом рабочие каталоги доступными для чтения, задайте [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) вместо написания правил для путей.
318
319<h3 id="run-commands-outside-the-sandbox-with-excludedcommands">
320 Запуск команд вне песочницы с помощью `excludedCommands`
321</h3>
322
323Укажите шаблон команды в [`sandbox.excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands), чтобы подходящие команды выполнялись вне песочницы, то есть без ограничений файловой системы и без сетевого прокси. Используйте это для инструмента, который не может работать внутри песочницы и которому вы доверяете полный доступ. Инструмент, которому нужен ещё один каталог или ещё один хост, может заработать с `allowWrite` или `allowedDomains`, которые оставляют команду в песочнице.
324
325Этот пример выводит команды `docker compose` из песочницы. Сохраните его в `~/.claude/settings.json`, чтобы применить ко всем вашим проектам:
326
327```json theme={null}
328{
329 "sandbox": {
330 "enabled": true,
331 "excludedCommands": ["docker compose *"]
332 }
333}
334```
335
336Claude Code проверяет ваши записи для каждого вызова Bash и Monitor. Вызов — это вся командная строка, которую отправляет Claude, и она может объединять несколько команд в цепочку. Следующие правила определяют, покидает ли вызов песочницу:
337
338* **Завершайте шаблон на ` *`**: записи используют тот же синтаксис, что и [правило разрешений](/docs/ru/permissions#permission-rule-syntax) `Bash(...)`, где шаблон без подстановочного знака означает точное совпадение. `docker` соответствует только `docker` без аргументов. `docker *` соответствует `docker` с аргументами или без них
339* **Каждая команда в вызове должна совпадать**: `npm ci && docker compose build` остаётся в песочнице, если другая запись не покрывает `npm ci`
340* **Claude Code сопоставляет текст вызова**: скрипт или цель `make`, которые вызывают `docker` внутри, не совпадают, как и `/usr/local/bin/docker`
341* **Некоторые вызовы остаются в песочнице**: перенаправление в файл, `cd` или подстановка команды, например `$(...)`, оставляют весь вызов в песочнице. В [справочной записи](/docs/ru/settings-reference#sandbox-excludedcommands) перечислены другие вызовы, которые остаются в песочнице
342* **Место сохранения записи может иметь значение**: пока песочница [обязательна по требованию администратора](#repository-settings-under-an-admin-required-sandbox), Claude Code игнорирует записи в `.claude/settings.json` и `.claude/settings.local.json`
343
344Исключённая команда проходит обычный процесс проверки разрешений:
246 345
247Чтобы запретить командам в песочнице доступ на чтение к домашним каталогам и смонтированным томам, сохраняя доступность рабочих каталогов для чтения, установите [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) вместо написания правил путей.346* [Команды только для чтения](/docs/ru/permissions#read-only-commands) и команды, покрытые вашими разрешающими правилами, выполняются без запроса
347* В авторежиме другие исключённые команды проверяет классификатор
348* В режиме `bypassPermissions` исключённая команда выполняется без запроса, если ей не соответствует правило ask
349
350Чтобы убедиться, что запись срабатывает, переключитесь в ручной режим и попросите Claude выполнить подходящую команду, которая что-то изменяет, например `docker compose up -d`. Запрос разрешения будет озаглавлен «Bash command (unsandboxed)».
351
352<Warning>
353 Исключённая команда выполняется с вашим полным доступом. Широкая запись, такая как `docker *`, покрывает всё, что может делать этот инструмент. Если вы напишете шаблон, который покрывает интерпретатор, скрипт внутри вашего рабочего каталога или инструмент, работающий с файлом в нём, как `docker compose` работает со своим compose-файлом, Claude может записать этот файл, а затем запустить его вне песочницы. Чем уже шаблон, тем меньше Claude может запустить вне песочницы.
354</Warning>
248 355
249<h3 id="disable-filesystem-isolation">356<h3 id="disable-filesystem-isolation">
250 Отключение изоляции файловой системы357 Отключение изоляции файловой системы
251</h3>358</h3>
252 359
253Установите `sandbox.filesystem.disabled` в `true`, чтобы пропустить изоляцию файловой системы, сохраняя изоляцию сети. Пример ниже отключает изоляцию файловой системы, сохраняя список разрешённых доменов сети:360Задайте для `sandbox.filesystem.disabled` значение `true`, чтобы пропустить изоляцию файловой системы, сохранив сетевую изоляцию. Пример ниже отключает изоляцию файловой системы, сохраняя список разрешённых сетевых доменов:
254 361
255```json theme={null}362```json theme={null}
256{363{
266}373}
267```374```
268 375
269Песочница имеет два независимых слоя: [изоляция файловой системы](#filesystem-isolation) контролирует, какие пути команды в песочнице могут читать и писать, а [изоляция сети](#network-isolation) контролирует, какие домены они могут достичь. С отключённым слоем файловой системы команды в песочнице получают неограниченный доступ на чтение и запись к файловой системе хоста, в то время как их исходящий трафик сети остаётся ограниченным вашими разрешёнными доменами. Отключите слой, когда вы используете песочницу для контроля того, где команды подключаются, а не того, что они пишут.376Песочница имеет два независимых уровня: [изоляция файловой системы](#filesystem-isolation) определяет, какие пути команды в песочнице могут читать и записывать, а [сетевая изоляция](#network-isolation) определяет, к каким доменам они могут обращаться. При отключённом уровне файловой системы команды в песочнице получают неограниченный доступ на чтение и запись к файловой системе хоста, а их исходящий сетевой трафик по-прежнему ограничен разрешёнными доменами. Отключайте этот уровень, когда вы используете песочницу, чтобы контролировать, куда подключаются команды, а не то, что они записывают.
270 377
271Параметр отключён по умолчанию и применяется на платформах, где работает песочница: macOS, Linux и WSL2. Требуется Claude Code v2.1.216 или позже.378`sandbox.filesystem.disabled` по умолчанию имеет значение `false`. Требуется Claude Code v2.1.216 или новее.
272 379
273<Warning>380<Warning>
274 С отключённой изоляцией файловой системы и автоматически разрешёнными командами команда в песочнице может писать файлы, которые позже выполняют или читают другие команды, такие как файлы инициализации оболочки, исполняемые файлы на `$PATH` или `~/.claude/settings.json`, и использовать их для расширения собственного доступа при следующем запуске. Установите `filesystem.disabled` в `true` только для рабочих нагрузок, которым вы доверяете не расширять собственный доступ. Блокировка доменов сети с помощью [`allowManagedDomainsOnly`](#keep-developers-from-widening-the-policy) сужает риск, но не устраняет его, поскольку эта блокировка применяется только к командам, работающим внутри песочницы.381 При отключённой изоляции файловой системы и автоматически разрешённых командах команда в песочнице может записывать файлы, которые позже запускают или читают другие команды, например файлы запуска оболочки, исполняемые файлы в `$PATH` или `~/.claude/settings.json`, и использовать их, чтобы расширить собственный доступ при следующем запуске. Задавайте для `filesystem.disabled` значение `true` только для рабочих нагрузок, которым вы доверяете в том, что они не будут расширять собственный доступ. Блокировка сетевых доменов с помощью [`allowManagedDomainsOnly`](#keep-developers-from-widening-the-policy) снижает риск, но не устраняет его, поскольку эта блокировка применяется только к командам, выполняемым внутри песочницы.
275</Warning>382</Warning>
276 383
277<h4 id="which-settings-can-disable-it">384<h4 id="which-settings-can-disable-it">
278 Какие параметры могут отключить её385 Какие настройки могут её отключить
279</h4>386</h4>
280 387
281Поскольку отключение изоляции файловой системы расширяет возможности команд в песочнице, Claude Code соблюдает `filesystem.disabled` только из этих источников параметров:388Поскольку отключение изоляции файловой системы расширяет возможности команд в песочнице, Claude Code учитывает `filesystem.disabled` только из следующих источников настроек:
282 389
283* Параметры пользователя, управляемые параметры и флаг CLI `--settings` могут установить его. Параметры проекта в `.claude/settings.json` и `.claude/settings.local.json` не могут, поэтому проверенный проект не может отключить изоляцию файловой системы.390* Пользовательские настройки, управляемые настройки и флаг CLI `--settings` могут её задавать. Настройки проекта в `.claude/settings.json` и `.claude/settings.local.json` не могут, поэтому извлечённый проект не может отключить изоляцию файловой системы.
284* Когда управляемые параметры конфигурируют `sandbox.filesystem` вообще или перечисляют любую запись `sandbox.credentials.files` с `"mode": "deny"`, только управляемые параметры могут установить ключ. Это сохраняет ограничения файловой системы, развёрнутые администратором; чтобы ослабить такое развёртывание, установите `"disabled": true` в управляемых параметрах.391* Если управляемые настройки вообще настраивают `sandbox.filesystem` или содержат какую-либо запись `sandbox.credentials.files` с `"mode": "deny"`, задать этот ключ могут только управляемые настройки. Это сохраняет в силе ограничения файловой системы, развёрнутые администратором; чтобы ослабить такое развёртывание, задайте `"disabled": true` в управляемых настройках.
285* Когда установлена [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars), Claude Code игнорирует `filesystem.disabled` из каждого источника, включая управляемые параметры, и сохраняет изоляцию файловой системы включённой.392* Если задана [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars), Claude Code игнорирует `filesystem.disabled` из любого источника, включая управляемые настройки, и оставляет изоляцию файловой системы включённой.
286 393
287Закрепляет ли управляемая запись `credentials.files` `filesystem.disabled`, блокируя ключ для управляемых параметров, чтобы разработчики не могли отключить изоляцию файловой системы, зависит от режима записи и того, что происходит с записью при запуске песочницы:394[Допустимая](/docs/ru/settings-reference#invalid-credential-entries-in-managed-settings) запись `mask` не закрепляет ключ, даже если Claude Code [переключается для неё на `deny`](#mask-credential-files) при запуске. Путь, который нельзя замаскировать, например каталог учётных данных, укажите в управляемых настройках как явную запись `deny`, которая закрепляет ключ.
288
289| Управляемая запись | Закрепляет `filesystem.disabled` | Что защищает файл при отключённой изоляции |
290| - | - | - |
291| `"mode": "deny"` | Да | Ничего: блок чтения является частью слоя файловой системы |
292| `"mode": "mask"`, применённый как маска | Нет | Сама маскировка: [копия-дозорный и прокси](#mask-credential-files) на Linux и WSL2, собственные правила чтения песочницы на macOS |
293| `"mode": "mask"`, [вернулся к `deny`](#mask-credential-files) при настройке | Нет | Ничего, как `deny`. Перечислите путь, который не может быть замаскирован, такой как каталог, как явную запись `deny`, которая закрепляет ключ |
294| `"mode": "mask"`, [деградирован к `deny` валидацией](/docs/ru/managed-settings#invalid-entries-in-managed-settings) | Да, как явный `deny` | Ничего, как `deny` |
295
296Возврат происходит при запуске песочницы, после того как Claude Code уже прочитал параметры, на которых выполняется проверка закрепления, поэтому вернувшаяся запись никогда не закрепляет. Валидация переписывает недействительную запись в `deny` при загрузке параметров, поэтому деградированная запись закрепляет как та, которую вы написали как `deny`.
297 395
298<h4 id="what-changes-when-filesystem-isolation-is-off">396<h4 id="what-changes-when-filesystem-isolation-is-off">
299 Что изменяется при отключённой изоляции файловой системы397 Что меняется при отключённой изоляции файловой системы
300</h4>398</h4>
301 399
302Установка `filesystem.disabled` снимает защиту, которую сам слой файловой системы применяет. Защиты, которые применяют другие слои, продолжают применяться:400Задание `filesystem.disabled` снимает защиту, которую обеспечивает сам уровень файловой системы. Защита, которую обеспечивают другие уровни, продолжает действовать:
303 401
304| Защита | При отключённой изоляции файловой системы |402| Защита | При отключённой изоляции файловой системы |
305| - | - |403| - | - |
306| `filesystem.denyRead` и [`credentials.files`](#protect-credentials) блоки чтения `deny` | Не применяется. Слой файловой системы применяет оба |404| Блокировки чтения `filesystem.denyRead` и `deny` в [`credentials.files`](#protect-credentials) | Не применяются. Оба механизма обеспечивает уровень файловой системы |
307| `credentials.envVars` записи `deny` и `mask` | Применяется. Очистка переменных окружения независима от слоя файловой системы |405| Записи `deny` и `mask` в `credentials.envVars` | Применяются. Очистка переменных окружения не зависит от уровня файловой системы |
308| [`credentials.files` записи `mask`](#mask-credential-files) применённые как маски | Применяется: маскировка независима от слоя файловой системы. Запись, которая [вернулась к `deny`](#mask-credential-files), не применяется, как любая запись `deny` |406| [Записи `mask` в `credentials.files`](#mask-credential-files), применённые как маски | Применяются: маскирование не зависит от уровня файловой системы. Запись, которая [переключилась на `deny`](#mask-credential-files), не применяется, как и любая запись `deny` |
309 407
310Два других вещи изменяются:408Меняются ещё две вещи:
311 409
312* Команды в песочнице наследуют `$TMPDIR` вашей оболочки вместо временного каталога для каждого пользователя, потому что каждый временный каталог доступен для записи и Claude Code больше не перенаправляет команды в каталог для каждого пользователя.410* Команды в песочнице наследуют `$TMPDIR` вашей оболочки вместо временного каталога пользователя, потому что все временные каталоги доступны для записи и Claude Code больше не перенаправляет команды во временный каталог пользователя.
313 411
314 На Linux переменная часто не установлена в родительской оболочке. Руководство инструмента Bash указывает Claude создавать временные каталоги с помощью `mktemp -d` вместо полагания на `$TMPDIR`.412 В Linux эта переменная часто не задана в родительской оболочке. Руководство по инструменту Bash указывает Claude создавать временные каталоги с помощью `mktemp -d`, а не полагаться на `$TMPDIR`.
315* [`autoAllowBashIfSandboxed`](/docs/ru/settings-reference#sandbox-autoallowbashifsandboxed) по-прежнему по умолчанию `true`, поэтому команды в песочнице продолжают работать без подсказок. Установите его в `false`, чтобы получать подсказки для команд в песочнице.413* [`autoAllowBashIfSandboxed`](/docs/ru/settings-reference#sandbox-autoallowbashifsandboxed) по-прежнему по умолчанию имеет значение `true`, поэтому команды в песочнице продолжают выполняться без запросов. Задайте значение `false`, чтобы запрашивать подтверждение для команд в песочнице.
316 414
317<h3 id="protect-credentials">415<h3 id="protect-credentials">
318 Защита учётных данных416 Защита учётных данных
319</h3>417</h3>
320 418
321Параметр `sandbox.credentials` объявляет файлы учётных данных и переменные окружения для защиты от команд в песочнице. Каждая запись называет путь файла или переменную окружения и `mode`. Выделенный блок `credentials` сохраняет правила учётных данных сгруппированными вместе и отдельно от общих правил файловой системы.419Настройка `sandbox.credentials` объявляет файлы учётных данных и переменные окружения, которые нужно защитить от команд в песочнице. Каждая запись указывает путь к файлу или переменную окружения и `mode`. Отдельный блок `credentials` позволяет держать правила для учётных данных вместе и отдельно от общих правил файловой системы.
322 420
323Для записей с `"mode": "deny"` пути файлов запрещены для чтения внутри песочницы, то же ограничение, которое применяет `filesystem.denyRead`, и переменные окружения не установлены перед каждой командой в песочнице. Защита файла является частью слоя файловой системы, поэтому она не применяется, если вы [отключите изоляцию файловой системы](#disable-filesystem-isolation); защита переменной окружения по-прежнему применяется.421Для записей с `"mode": "deny"` чтение путей к файлам внутри песочницы запрещается, это то же ограничение, которое применяет `filesystem.denyRead`, а переменные окружения удаляются перед выполнением каждой команды в песочнице. Защита файлов является частью уровня файловой системы, поэтому она не действует, если вы [отключите изоляцию файловой системы](#disable-filesystem-isolation); защита переменных окружения продолжает действовать.
324 422
325Пример ниже блокирует чтение файла учётных данных AWS и каталога SSH и удаляет `GITHUB_TOKEN` и `NPM_TOKEN` из окружения команд в песочнице:423Пример ниже блокирует чтение файла учётных данных AWS и каталога SSH и удаляет `GITHUB_TOKEN` и `NPM_TOKEN` из окружения команд в песочнице:
326 424
342}440}
343```441```
344 442
345Записи переменных окружения и записи файлов также принимают `"mode": "mask"`, описанные в разделе [Маскировка учётных данных](#mask-credentials).443Записи переменных окружения и записи файлов также принимают `"mode": "mask"`, описанный в разделе [Маскирование учётных данных](#mask-credentials).
346 444
347Пути файлов следуют тем же [правилам префиксов](/docs/ru/settings-reference#sandbox-path-prefixes), что и параметры `sandbox.filesystem.*`.445Пути к файлам следуют тем же [правилам префиксов](/docs/ru/settings-reference#sandbox-path-prefixes), что и настройки `sandbox.filesystem.*`.
348 446
349Claude Code объединяет записи `deny` из каждой [области параметров](/docs/ru/settings#settings-precedence), которую загружает сеанс. Запись `deny` только когда-либо сужает доступ, поэтому любая область может добавить одну, но ни одна область не может удалить ту, которую добавила другая область.447Claude Code объединяет записи `deny` из всех [областей действия настроек](/docs/ru/settings#settings-precedence), которые загружает сессия. Запись `deny` только сужает доступ, поэтому любая область действия может её добавить, но никакая область действия не может удалить запись, добавленную другой.
350 448
351Когда вы [исключаете источник параметров](#configure-sandboxing):449Когда вы [исключаете источник настроек](#configure-sandboxing):
352 450
353* **Параметры проекта или локальные**: Claude Code не применяет ни одну из их записей `credentials`. Требуется Claude Code v2.1.246 или позже.451* **Настройки проекта или локальные настройки**: Claude Code не применяет ни одну из их записей `credentials`. Требуется Claude Code v2.1.246 или новее.
354* **Параметры пользователя**: Claude Code по-прежнему применяет записи `deny` в `~/.claude/settings.json` и сохраняет свои [записи файла `mask`](#mask-credential-files) как ограничения, но отбрасывает свои [записи переменной окружения `mask`](#mask-environment-variables).452* **Пользовательские настройки**: Claude Code по-прежнему применяет записи `deny` в `~/.claude/settings.json` и сохраняет их [записи `mask` для файлов](#mask-credential-files) как ограничения, которые больше не разрешают прокси подставлять реальное значение, но отбрасывает их [записи `mask` для переменных окружения](#mask-environment-variables).
355 453
356Встроенного списка отказа учётных данных нет, поэтому ограничены только файлы и переменные, которые вы перечислили.454Встроенного списка запрещённых учётных данных нет, поэтому ограничиваются только файлы и переменные, которые вы перечислили.
357 455
358`sandbox.credentials` влияет только на команды Bash в песочнице. Чтобы удалить учётные данные из всех подпроцессов независимо от изоляции, установите [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars).456`sandbox.credentials` влияет только на команды Bash в песочнице. Чтобы удалить учётные данные из всех подпроцессов независимо от изоляции в песочнице, задайте [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars).
359 457
360<h3 id="mask-credentials">458<h3 id="mask-credentials">
361 Маскировка учётных данных459 Маскирование учётных данных
362</h3>460</h3>
363 461
364Маскировка идёт дальше, чем запись `deny` в разделе [Защита учётных данных](#protect-credentials). Вместо блокировки учётных данных Claude Code показывает командам в песочнице заполнитель, дозорный, и [прокси песочницы](#network-isolation) подставляет реальное значение на исходящих запросах к хостам, которые вы разрешаете. Для файлов подстановка является поведением Linux и WSL2; [macOS блокирует файл вместо этого](#mask-credential-files).462Когда вы маскируете учётные данные, Claude Code показывает командам в песочнице заполнитель, уникальный для сессии, — сигнальное значение, а [прокси песочницы](#network-isolation) подставляет реальное значение в исходящие запросы к разрешённым вами хостам. Запись `deny` из раздела [Защита учётных данных](#protect-credentials) вместо этого блокирует учётные данные. Для файлов в macOS Claude Code [вместо маскирования блокирует файл](#mask-credential-files).
365 463
366<h4 id="mask-environment-variables">464Для маскирования переменных окружения требуется Claude Code v2.1.199 или новее. Все поля перечислены в справочнике [`sandbox.credentials`](/docs/ru/settings-reference#sandbox-credentials).
367 Маскировка переменных окружения
368</h4>
369 465
370`"mode": "mask"` защищает учётные данные, сохраняя работающие инструменты, которые аутентифицируются с ними. `deny` полностью удаляет переменную, что также нарушает инструменты, которые её нужны, такие как `gh` или `npm`. Требуется Claude Code v2.1.199 или позже.466Для маскирования необходимо следующее:
371 467
372С `mask` команда в песочнице видит значение дозорного для каждого сеанса вместо реального. Каждая запись `mask` может перечислять `injectHosts`, хосты, которым разрешено достичь реальное значение. Когда запрос покидает песочницу для одного из них, [прокси песочницы](#network-isolation) заменяет дозорный на реальное значение. Команда и всё, что она регистрирует, никогда не содержат реальные учётные данные, но её запросы по-прежнему аутентифицируются.468* **Завершение TLS**: прокси подставляет реальное значение внутрь содержимого запроса, поэтому ему нужно его видеть. Задайте [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate), чтобы прокси сам завершал TLS. Без этого маскирование не срабатывает, но ничего не раскрывает: команда по-прежнему видит только сигнальное значение, но оно доходит до сервера без изменений, и аутентификация завершается ошибкой. Claude Code сообщает об этой ошибке конфигурации при запуске.
469* **Разрешённое назначение**: каждая запись `mask` может содержать `injectHosts` — хосты, которым разрешено получать реальное значение. Прокси выполняет подстановку только в соединениях, которые допускает [список разрешённых доменов](#network-isolation), поэтому каждый хост из `injectHosts` также должен быть доступен через `network.allowedDomains`. Для записи `mask` без `injectHosts` прокси подставляет реальное значение в запросы ко всем хостам из `network.allowedDomains`.
470* **Доверенная область действия настроек**: маскирование разрешает прокси куда-то отправлять ваши реальные учётные данные, поэтому Claude Code учитывает записи `mask`, `network.tlsTerminate`, [`credentials.allowPlaintextInject`](/docs/ru/settings-reference#sandbox-credentials-allowplaintextinject), `awsPairs` и `sigv4` только из пользовательских настроек, управляемых настроек и флага `--settings`. Он игнорирует их в `.claude/settings.json` или `.claude/settings.local.json` репозитория. Когда ваш администратор передаёт записи `mask`, `network.tlsTerminate` или `credentials.allowPlaintextInject` через управляемые настройки на сервере, они считаются [настройками, требующими подтверждения](/docs/ru/server-managed-settings#security-approval-dialogs).
373 471
374Прокси подставляет учётные данные внутри содержимого запроса, поэтому он должен их видеть. Установите [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate), чтобы прокси сам завершал TLS.472<h4 id="mask-environment-variables">
375 473 Маскирование переменных окружения
376Без этого маскировка не срабатывает без раскрытия чего-либо: команда по-прежнему видит только дозорный, но дозорный достигает сервера без изменений и аутентификация не срабатывает. Claude Code сообщает об этой неправильной конфигурации при запуске.474</h4>
377
378Подстановка охватывает заголовки и тела запросов. Запросы, которые аутентифицируются с подписью, полученной из учётных данных, а не самих учётных данных, нуждаются в повторном подписании на прокси; [Повторное подписание запросов AWS](#re-sign-aws-requests) охватывает, как это работает для AWS.
379 475
380Прокси вводит только на соединениях, которые [список разрешённых доменов](#network-isolation) допускает, поэтому каждое назначение `injectHosts` также должно быть достижимо через `network.allowedDomains`.476Чтобы замаскировать переменную окружения, задайте `"mode": "mask"` в её записи `credentials.envVars`. Команда и всё, что она записывает в лог, никогда не содержат реальных учётных данных, но её запросы по-прежнему проходят аутентификацию. Если та же переменная указана с `deny` в любой области действия, `deny` имеет приоритет.
381 477
382Пример ниже маскирует два токена. `GH_TOKEN` подставляется только на запросах к `api.github.com`, в то время как `NPM_TOKEN` не имеет `injectHosts` и подставляется на запросах ко всем хостам в `network.allowedDomains`.478Этот пример маскирует два токена. `GH_TOKEN` подставляется только в запросы к `api.github.com`, а у `NPM_TOKEN` нет `injectHosts`, и он подставляется в запросы ко всем хостам из `network.allowedDomains`:
383 479
384```json theme={null}480```json theme={null}
385{481{
399}495}
400```496```
401 497
402<span id="ipv6-destinations-in-injecthosts" />Напишите назначение IPv6 по-разному в двух списках, потому что каждый список имеет свой собственный сопоставитель:498По умолчанию маскирование заменяет всё значение. Для значения со структурой, например строки подключения `DATABASE_URL` или JWT, используйте [поля `extract`, `decode`, `maskClaims` и `onExtractNoMatch`](/docs/ru/settings-reference#sandbox-credentials-envvars), чтобы инструменты, которые разбирают значение, продолжали работать.
403
404* **`network.allowedDomains`**: [форма в скобках, которую используют списки доменов](#ipv6-addresses-in-domain-lists), такая как `"[::1]"`. Прокси проверяет этот список, чтобы допустить соединение.
405* **`injectHosts`**: голый адрес в его канонической сжатой форме, такой как `"::1"` или `"2001:db8::1"`. Прокси сопоставляет каждую запись с голым адресом назначения соединения, игнорируя порты, поэтому скобочная, зональная или иначе сжатая орфография никогда не совпадает и прокси никогда не вводит учётные данные там.
406
407`claude doctor` помечает записи `injectHosts`, которые никогда не могут совпадать, предупреждением `Sandbox credential injectHosts entries can never match their destination`. Эта проверка требует Claude Code v2.1.229 или позже.
408
409В отличие от `deny`, маскировка уполномочивает прокси отправлять ваши реальные учётные данные на перечисленные хосты, поэтому Claude Code соблюдает её только из параметров, которые вы или ваш администратор контролируете: параметры пользователя, управляемые параметры и флаг CLI `--settings`. Claude Code игнорирует записи `mask` в `.claude/settings.json` или `.claude/settings.local.json` репозитория. В этих файлах он также игнорирует `network.tlsTerminate` и [`credentials.allowPlaintextInject`](/docs/ru/settings-reference#sandbox-credentials-allowplaintextinject), параметр, который позволяет прокси вводить учётные данные в незашифрованные запросы. Если вы [исключаете параметры пользователя](#configure-sandboxing), Claude Code отбрасывает записи переменной окружения `mask` в `~/.claude/settings.json` тоже.
410 499
411Когда ваш администратор доставляет записи `mask`, `network.tlsTerminate` или `credentials.allowPlaintextInject` через управляемые параметры сервера, они считаются [параметрами, которые нуждаются в одобрении](/docs/ru/server-managed-settings#security-approval-dialogs).500<span id="ipv6-destinations-in-injecthosts" />Для IPv6-адреса назначения записывайте адрес в двух списках по-разному:
412 501
413Когда одна и та же переменная указана с `deny` в любой области, `deny` имеет приоритет.502* **`network.allowedDomains`**: форма в квадратных скобках, например `"[::1]"`
503* **`injectHosts`**: адрес без скобок в канонической сокращённой форме, например `"::1"`
414 504
415Маскировка заменяет всё значение переменной по умолчанию, что подходит для голого токена. Дополнительные поля записи, которые требуют Claude Code v2.1.224 или позже, обрабатывают значения со структурой:505Прокси сопоставляет каждую запись `injectHosts` с адресом назначения соединения без скобок, игнорируя порты, поэтому запись в квадратных скобках, с идентификатором зоны или в иной сокращённой форме никогда не совпадёт. `claude doctor` помечает записи, которые никогда не могут совпасть, предупреждением `Sandbox credential injectHosts entries can never match their destination`. Эта проверка требует Claude Code v2.1.229 или новее.
416
417* `extract`: регулярное выражение, которое Claude Code применяет по всему значению, заменяя только текст, захваченный группой 1 каждого совпадения, поэтому инструмент, который анализирует значение, такой как строка подключения `DATABASE_URL`, по-прежнему работает внутри песочницы. Шаблон должен содержать по крайней мере одну захватывающую группу.
418* `onExtractNoMatch` контролирует, что происходит, когда шаблон ничего не совпадает:
419 * `warn`, по умолчанию, предупреждает и передаёт переменную без маскировки
420 * `deny` не устанавливает переменную внутри песочницы
421 * `error` останавливает настройку песочницы, пока вы не исправите конфигурацию
422* `decode: "jwt"`: для переменной, содержащей JSON Web Token (JWT). Claude Code проверяет, что значение является JWT, и заменяет его структурно действительным поддельным токеном, поэтому код внутри песочницы, который декодирует токен, продолжает работать. Добавьте `maskClaims` для перечисления утверждений полезной нагрузки верхнего уровня для маскировки отдельно вместо замены всего токена; другие утверждения остаются читаемыми. Когда значение не проверяется как JWT или ни одно перечисленное утверждение не совпадает, Claude Code передаёт переменную без маскировки с предупреждением. `decode` не может быть объединён с `extract`.
423
424Полный список полей см. в [строках `credentials.envVars[]` в справке параметров](/docs/ru/settings-reference#sandbox-settings).
425 506
426<h4 id="re-sign-aws-requests">507<h4 id="re-sign-aws-requests">
427 Повторное подписание запросов AWS508 Повторная подпись запросов AWS
428</h4>509</h4>
429 510
430Запросы AWS содержат подписи SigV4 по содержимому запроса, поэтому маскируйте `AWS_ACCESS_KEY_ID` и `AWS_SECRET_ACCESS_KEY` вместе. Прокси обнаруживает запрос SigV4 по дозорному ключа доступа и повторно подписывает его после подстановки реальных значений. Маскировка только секрета оставляет запросы подписанными заполнителем, который прокси не может обнаружить, поэтому они не срабатывают в AWS; Claude Code предупреждает об этом случае при запуске, но не когда маскирован только ID ключа доступа. Обнаруженный запрос, который прокси не может повторно подписать, такой как запрос без заголовка `x-amz-date`, не срабатывает с ошибкой прокси вместо достижения сервера с нарушенной подписью.511Запросы AWS содержат подписи SigV4, вычисленные по содержимому запроса, поэтому маскируйте `AWS_ACCESS_KEY_ID` и `AWS_SECRET_ACCESS_KEY` вместе. Прокси распознаёт запрос SigV4 по [сигнальному значению](#mask-credentials) ключа доступа и повторно подписывает запрос реальными значениями, для чего требуется Claude Code v2.1.221 или новее. Если замаскирован только секретный ключ, запросы подписываются заполнителем, который прокси не может распознать, поэтому они отклоняются на стороне AWS.
431
432Claude Code связывает обычные переменные `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` и `AWS_SESSION_TOKEN` в одно учётное данные автоматически, когда вы маскируете их целые значения. Если ваши учётные данные AWS находятся в переменных с другими именами, сгруппируйте их сами с помощью [`credentials.awsPairs`](/docs/ru/settings-reference#sandbox-credentials-awspairs), что требует Claude Code v2.1.224 или позже. Этот пример добавляет спаривание к конфигурации, которая уже маскирует `MY_KEY_ID`, `MY_SECRET_KEY` и `MY_SESSION_TOKEN` целое значение, как в [конфигурации маскировки выше](#mask-environment-variables):
433
434```json theme={null}
435{
436 "sandbox": {
437 "credentials": {
438 "awsPairs": [
439 {
440 "accessKeyIdVar": "MY_KEY_ID",
441 "secretAccessKeyVar": "MY_SECRET_KEY",
442 "sessionTokenVar": "MY_SESSION_TOKEN"
443 }
444 ]
445 }
446 }
447}
448```
449
450Каждая запись следует этим правилам:
451
452* `accessKeyIdVar` и `secretAccessKeyVar` называют записи `envVars` с маскировкой, содержащие ID ключа доступа и секретный ключ. Дополнительный `sessionTokenVar` называет запись, содержащую токен сеанса для временных учётных данных; когда установлен, прокси отправляет реальный токен как `x-amz-security-token` на повторно подписанных запросах.
453* Каждая названная переменная должна быть записью `mask`, которая маскирует своё целое значение, без `extract` или `decode`.
454* Прокси повторно подписывает запросы на хостах, перечисленных в записи ID ключа доступа `injectHosts`.
455* Именование любой из обычных переменных в паре заменяет автоматическое спаривание.
456 512
457Как записи `mask`, `awsPairs` соблюдается только из параметров пользователя, управляемых параметров и флага CLI `--settings`.513Claude Code автоматически связывает стандартные переменные `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` и `AWS_SESSION_TOKEN` в один набор учётных данных, если вы маскируете их значения целиком. Если ваши учётные данные AWS хранятся в переменных с другими именами, сгруппируйте их с помощью [`credentials.awsPairs`](/docs/ru/settings-reference#sandbox-credentials-awspairs), для чего требуется Claude Code v2.1.224 или новее.
458 514
459Три формы запросов AWS содержат подписи, которые прокси не может пересчитать. Когда такой запрос подписан дозорным маскированной пары, прокси не срабатывает вместо пересылки нарушенной подписи; запросы, подписанные немаскированными учётными данными, никогда не затрагиваются. Параметр [`credentials.sigv4`](/docs/ru/settings-reference#sandbox-credentials-sigv4), который требует Claude Code v2.1.224 или позже, ослабляет это для каждой формы: установка ключа формы в `passthrough` пересылает запрос с его подписью, полученной из дозорного, поэтому вызывающий инструмент получает собственный ответ отказа AWS вместо ошибки прокси. Как `awsPairs`, `sigv4` соблюдается только из параметров пользователя, управляемых параметров и флага CLI `--settings`.515Потоковые загрузки, предварительно подписанные URL и запросы SigV4A содержат подписи, которые прокси не может пересчитать. Если такой запрос подписан заполнителем замаскированной пары, прокси завершает его ошибкой, а не пересылает с неверной подписью. Запросы, подписанные незамаскированными учётными данными, это не затрагивает. Чтобы вместо этого пересылать одну из этих форм запросов, используйте [`credentials.sigv4`](/docs/ru/settings-reference#sandbox-credentials-sigv4), для чего требуется Claude Code v2.1.224 или новее. AWS всё равно отклоняет запрос, поэтому вызывающий инструмент получает собственный ответ AWS об отказе вместо ошибки прокси.
460
461| Форма запроса | Ключ `sigv4` | Почему прокси не может повторно подписать её |
462| :- | :- | :- |
463| потоковые загрузки aws-chunked | `streaming` | Подписи для каждого блока связаны с подписью семени, поэтому повторное подписание потребовало бы переписания тела |
464| Предподписанные URL | `presigned` | Подпись находится в самом URL, без заголовка `Authorization` |
465| Асимметричные подписи SigV4A | `sigv4a` | Нет общего ключа HMAC для пересчёта |
466 516
467<h4 id="mask-credential-files">517<h4 id="mask-credential-files">
468 Маскировка файлов учётных данных518 Маскирование файлов учётных данных
469</h4>519</h4>
470 520
471Записи файлов также принимают `"mode": "mask"`, что требует Claude Code v2.1.221 или позже. То, что видит команда в песочнице, зависит от платформы:521Чтобы замаскировать файл учётных данных, задайте `"mode": "mask"` в его записи `credentials.files`. Для маскирования файлов требуется Claude Code v2.1.221 или новее. То, что видит команда в песочнице, зависит от платформы:
472 522
473* **Linux и WSL2**: команды в песочнице читают копию-дозорный файла, заменитель, чей секрет заменён значением заполнителя, и [прокси песочницы](#network-isolation) подставляет реальное значение на исходящем трафике.523* **Linux и WSL2**: команды в песочнице читают копию файла с [сигнальным значением](#mask-credentials), а прокси подставляет реальное значение в исходящие запросы.
474* **macOS**: команды в песочнице не могут читать перечисленный файл вообще. Claude Code не строит копию-дозорный и не подставляет ничего на исходящем трафике, поэтому инструменты, которые аутентифицируются с файлом, не работают внутри песочницы, тот же эффект, что и `deny`. В отличие от записи `deny`, блок чтения держится даже когда вы [отключаете изоляцию файловой системы](#disable-filesystem-isolation).524* **macOS**: команды в песочнице вообще не могут прочитать файл. Claude Code не создаёт копию с сигнальным значением, поэтому инструменты, которые проходят аутентификацию с помощью этого файла, не работают внутри песочницы — эффект тот же, что и у `deny`. Блокировка чтения сохраняется, даже если вы [отключите изоляцию файловой системы](#disable-filesystem-isolation).
475 525
476На каждой платформе Claude Code применяет требование [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate) и `injectHosts` так же, как для [маскированных переменных окружения](#mask-environment-variables), и игнорирует параметры репозитория так же. Если вы [исключаете параметры пользователя](#configure-sandboxing), Claude Code сохраняет записи файла `mask` в `~/.claude/settings.json` как ограничения, но записи больше не уполномочивают прокси подставлять реальное значение.526Этот пример маскирует токен GitHub, хранящийся в `~/.config/gh/hosts.yml`. Шаблон `extract` отмечает, какая часть файла является секретом, поэтому в Linux и WSL2 `gh` по-прежнему разбирает остальную часть своей конфигурации:
477
478Пример ниже маскирует токен GitHub, хранящийся в `~/.config/gh/hosts.yml`; шаблон `extract`, описанный ниже, говорит Claude Code, какая часть файла является секретом. На Linux и WSL2 команды в песочнице, которые читают файл, получают дозорный вместо токена, и прокси подставляет реальный токен на запросах к `api.github.com`:
479 527
480```json theme={null}528```json theme={null}
481{529{
499}547}
500```548```
501 549
502Чтобы подтвердить, что маска активна, попросите Claude запустить `cat ~/.config/gh/hosts.yml` в команде в песочнице: на Linux и WSL2 вывод показывает значение дозорного вместо токена, а на macOS чтение не срабатывает вместо этого.550Чтобы убедиться, что маска активна, попросите Claude выполнить `cat ~/.config/gh/hosts.yml` в команде в песочнице. В Linux и WSL2 вывод покажет сигнальное значение вместо токена, а в macOS чтение завершится ошибкой.
503
504На Linux и WSL2 шаблон `extract` — это то, что сохраняет остальную часть `hosts.yml` читаемой. Claude Code применяет регулярное выражение по всему файлу и заменяет только текст, захваченный группой 1 каждого совпадения, поэтому `gh` по-прежнему анализирует свою конфигурацию и только токен является заполнителем. Используйте `extract` для любого структурированного файла, который инструменты анализируют, такого как `.netrc`, JSON или YAML; шаблон должен содержать по крайней мере одну захватывающую группу. Без `extract` Claude Code заменяет всё содержимое файла одним значением дозорного, что подходит для файла, который содержит один голый секрет и ничего больше.
505
506Для файла, который содержит JSON Web Token (JWT), установите `decode: "jwt"` вместо или вместе с `extract`. `decode` требует Claude Code v2.1.224 или позже. Claude Code находит кандидатов JWT с встроенным шаблоном или с вашим шаблоном `extract`, когда установлен, проверяет каждого кандидата как JWT и заменяет его структурно действительным поддельным токеном, поэтому код, который декодирует токен внутри песочницы, продолжает работать. Добавьте `maskClaims` для маскировки только названных утверждений полезной нагрузки верхнего уровня внутри каждого проверенного токена и оставьте другие утверждения читаемыми. Когда ни один кандидат не проверяется или ни одно названное утверждение не совпадает, поле `onExtractNoMatch` ниже управляет результатом, как оно делает для шаблона, который ничего не совпадает.
507
508Два дополнительных поля уточняют, как ведёт себя сопоставление. Оба применяются только когда `mode` — это `mask` и `extract` или `decode` установлены. На macOS Claude Code применяет записи `mask` как `deny` перед запуском шаблона, когда изоляция файловой системы включена, поэтому эти поля и результаты отсутствия совпадения ниже вступают в силу там только когда [изоляция файловой системы отключена](#disable-filesystem-isolation):
509 551
510* `onExtractNoMatch` контролирует, что происходит, когда сопоставление находит ничего для маскировки в файле:552Без `extract` или `decode` Claude Code заменяет весь файл одним сигнальным значением, что подходит для файла, содержащего только один секрет. Используйте [поля `extract`, `decode`, `maskClaims`, `onExtractNoMatch` и `maskDuplicates`](/docs/ru/settings-reference#sandbox-credentials-files), чтобы управлять частичным маскированием и тем, что происходит, если шаблон ничего не находит.
511 553
512 * `warn`, по умолчанию, предупреждает и пропускает запись, поэтому команды в песочнице могут читать реальный файл без маскировки. По умолчанию подходит для учётных данных, которые могут быть законно отсутствующими; если секрет может быть присутствующим, но шаблон может его пропустить, используйте `deny`554<Warning>
513 * `deny` делает файл нечитаемым вместо этого555 Если сопоставление не находит ничего для маскирования, значение `onExtractNoMatch` по умолчанию, `warn`, пропускает запись, поэтому команды в песочнице могут прочитать реальный файл без маскирования. В macOS Claude Code применяет записи `mask` как `deny` до выполнения шаблона всякий раз, когда изоляция файловой системы включена, поэтому результаты при отсутствии совпадений действуют там только при [отключённой изоляции файловой системы](#disable-filesystem-isolation). Значение по умолчанию подходит для учётных данных, которые могут обоснованно отсутствовать. Если секрет может присутствовать, но шаблон может его пропустить, используйте [`deny`](/docs/ru/settings-reference#mask-fields-for-files).
514 * `error` останавливает настройку песочницы, пока вы не исправите конфигурацию556</Warning>
515
516 Claude Code обрабатывает `deny` как `error` всякий раз, когда блок чтения не будет применён: когда вы [отключаете изоляцию файловой системы](#disable-filesystem-isolation), и когда запись `filesystem.allowRead` из любого источника параметров повторно открывает путь файла.
517* `maskDuplicates` также заменяет дословные копии каждого маскированного значения учётных данных, захвата `extract` или проверенного токена `decode`, найденные вне совпадённых диапазонов, для секрета, повторённого где сопоставление не достигает. Он совпадает с сырыми подстроками, поэтому короткое или обычное значение было бы заменено везде, где оно появляется; зарезервируйте его для длинных, высокоэнтропийных секретов. По умолчанию: false.
518 557
519`mask` применяется к одному файлу, поэтому перечислите каждый файл учётных данных отдельно. Claude Code возвращается к `deny` для записи `mask`, которую он не может безопасно маскировать: путь каталога, шаблон glob, файл больше 8 МиБ или файл, который не является текстом UTF-8. Напишите каталоги как явные записи `deny` вместо этого; таблица в разделе [Какие параметры могут отключить её](#which-settings-can-disable-it) охватывает, закрепляет ли каждая форма `filesystem.disabled` и как она ведёт себя с отключённой изоляцией файловой системы.558`mask` применяется к одному файлу, поэтому перечисляйте каждый файл учётных данных по отдельности. Claude Code переключается на `deny` для записи `mask`, которую не может безопасно замаскировать: путь к каталогу, glob-шаблон, файл размером больше 8 МиБ или файл, не являющийся текстом в UTF-8.
520 559
521<h2 id="how-sandboxing-works">560<h2 id="how-sandboxing-works">
522 Как работает sandboxing561 Как работает изоляция в песочнице
523</h2>562</h2>
524 563
525<h3 id="filesystem-isolation">564<h3 id="filesystem-isolation">
526 Изоляция файловой системы565 Изоляция файловой системы
527</h3>566</h3>
528 567
529Изолированный инструмент Bash ограничивает доступ к файловой системе определёнными каталогами:568Инструмент Bash в песочнице ограничивает доступ к файловой системе определёнными каталогами:
530 569
531* **Поведение записи по умолчанию**: доступ на чтение и запись к текущему рабочему каталогу и его подкаталогам, любым каталогам, которые вы добавили с помощью `--add-dir`, `/add-dir` или [`permissions.additionalDirectories`](/docs/ru/settings-reference#permissions-additionaldirectories), плюс временный каталог сеанса, на который указывает `$TMPDIR`570* **Поведение записи по умолчанию**: доступ на чтение и запись к текущему рабочему каталогу и его подкаталогам, ко всем каталогам, добавленным через `--add-dir`, `/add-dir` или [`permissions.additionalDirectories`](/docs/ru/settings-reference#permissions-additionaldirectories), а также к пользовательскому временному каталогу, на который указывает `$TMPDIR`
532* **Поведение чтения по умолчанию**: доступ на чтение ко всему компьютеру, кроме определённых запрещённых каталогов. Обратите внимание, что эта политика по умолчанию всё ещё разрешает чтение файлов учётных данных, таких как `~/.aws/credentials` и `~/.ssh/`. Используйте [`sandbox.credentials`](#protect-credentials) для блокировки чтения этих файлов и отмены установки переменных окружения с секретами, или добавьте пути в `denyRead`.571* **Поведение чтения по умолчанию**: доступ на чтение ко всему компьютеру, за исключением некоторых запрещённых каталогов. Это поведение по умолчанию всё равно позволяет читать файлы с учётными данными, поэтому [защитите учётные данные](#protect-credentials), которые команды не должны читать.
533* **Блокировка чтения**: с включённым [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) изолированные команды также теряют доступ на чтение к вашему домашнему каталогу и другим каталогам, которые содержат файлы пользователя, кроме путей, которые [Sandboxed commands under the block](/docs/ru/settings-reference#sandboxed-commands-under-the-block) перечисляет. Этот раздел также указывает, когда эта часть блокировки не применяется.572* **Блокировка чтения**: при включённом [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) команды в песочнице также теряют доступ на чтение к вашему домашнему каталогу и другим каталогам с пользовательскими файлами, за исключением путей, перечисленных в разделе [Команды в песочнице при блокировке](/docs/ru/settings-reference#sandboxed-commands-under-the-block). В этом же разделе указано, когда эта часть блокировки не применяется.
534* **Заблокированный доступ**: невозможно изменять файлы вне текущего рабочего каталога, добавленных каталогов и временного каталога сеанса без явного разрешения, включая файлы конфигурации оболочки, такие как `~/.bashrc`, и системные двоичные файлы в `/bin/`573* **Git worktree**: когда рабочий каталог является [связанным git worktree](/docs/ru/worktrees), песочница также разрешает запись в общий каталог `.git` основного репозитория, чтобы такие команды, как `git commit`, могли обновлять ссылки и индекс. Запись в `hooks/` и `config` внутри этого каталога по-прежнему запрещена.
535* **Git worktrees**: когда рабочий каталог является [связанным git worktree](/docs/ru/worktrees), sandbox также разрешает запись в общий каталог `.git` основного репозитория, чтобы команды, такие как `git commit`, могли обновлять ссылки и индекс. Запись в `hooks/` и `config` внутри этого каталога остаётся запрещённой.
536* **Настраиваемо**: определите пользовательские разрешённые и запрещённые пути через параметры
537 574
538Чтобы полностью пропустить изоляцию файловой системы, сохраняя при этом изоляцию сети, установите [`sandbox.filesystem.disabled`](#disable-filesystem-isolation).575Чтобы полностью отключить изоляцию файловой системы, сохранив сетевую изоляцию, задайте [`sandbox.filesystem.disabled`](#disable-filesystem-isolation).
539 576
540<h3 id="protected-paths">577<h3 id="protected-paths">
541 Защищённые пути578 Защищённые пути
542</h3>579</h3>
543 580
544Внутри каталогов, в которые изолированные команды могут записывать данные, sandbox всё ещё запрещает запись в файлы, из которых Claude Code загружает конфигурацию и код. Команда, которая могла бы редактировать эти файлы, могла бы предоставить себе разрешения или добавить hook или MCP сервер, который Claude Code запускает вне sandbox. Система разрешений имеет свои собственные [защищённые пути](/docs/ru/permission-modes#protected-paths), которые контролируют, что Claude Code одобряет перед запуском инструмента; список sandbox применяется к команде, которая уже запущена. Он охватывает четыре группы путей:581Внутри каталогов, в которые могут записывать команды в песочнице, песочница всё равно запрещает запись в файлы, из которых Claude Code загружает конфигурацию и код. Команда, способная редактировать эти файлы, могла бы выдать себе разрешения или добавить хук или MCP-сервер, который Claude Code запускает вне песочницы. У системы разрешений есть собственные [защищённые пути](/docs/ru/permission-modes#protected-paths), которые определяют, что Claude Code одобряет до запуска инструмента; список песочницы применяется к уже запущенной команде. Он охватывает четыре группы путей:
545 582
546* **В вашем рабочем каталоге и каталогах выше него**: файлы параметров `.claude`, каталоги `.claude/skills`, `.claude/agents`, `.claude/commands` и `.claude/hooks`, `.mcp.json`, а также файлы, которые Claude Code запускает самостоятельно, такие как `.claude/workflows` и `.claude/scheduled_tasks.json`583* **В рабочем каталоге и каталогах выше него**: файлы настроек `.claude`, каталоги `.claude/skills`, `.claude/agents`, `.claude/commands` и `.claude/hooks`, `.mcp.json`, а также файлы, которые Claude Code запускает самостоятельно, например `.claude/workflows` и `.claude/scheduled_tasks.json`
547* **Только в вашем рабочем каталоге**: файлы запуска оболочки, такие как `.bashrc` и `.zshrc`, `.gitconfig`, каталоги `.vscode` и `.idea`, а также `hooks` и `config` внутри `.git`584* **Только в рабочем каталоге**: файлы запуска оболочки, такие как `.bashrc` и `.zshrc`, `.gitconfig`, каталоги `.vscode` и `.idea`, а также `hooks` и `config` внутри `.git`
548* **Файлы, которые превратили бы ваш рабочий каталог в голый git репозиторий**: `HEAD`, `objects` и `refs` на верхнем уровне, плюс `config` и `hooks` там, когда `HEAD` находится рядом с ними. Файл с именем `config` запрещён даже без `HEAD`. На Linux и WSL2 sandbox удаляет файл `HEAD` верхнего уровня или каталог `objects` или `refs`, который появляется во время выполнения изолированной команды585* **Файлы, которые превратили бы рабочий каталог в bare-репозиторий git**: `HEAD`, `objects` и `refs` на верхнем уровне, а также существующие там записи `config` и `hooks`, когда рядом с ними находится `HEAD`. Файл с именем `config` запрещён даже при отсутствии `HEAD`. В Linux и WSL2 песочница удаляет файл `HEAD` или каталог `objects` или `refs` верхнего уровня, появившийся во время выполнения команды в песочнице
549* **В `~/.claude` или в каталоге, на который указывает `CLAUDE_CONFIG_DIR`**: большая часть его содержимого, плюс `~/.claude.json` и хранилище учётных данных `.credentials.json`586* **В `~/.claude` или каталоге, на который указывает `CLAUDE_CONFIG_DIR`**: большая часть его содержимого, а также `~/.claude.json` и хранилище учётных данных `.credentials.json`
550 587
551Если симлинк появляется в пути защищённого файла параметров во время сеанса, sandbox также запрещает запись в файл, на который он указывает, начиная со следующей команды.588Если во время сессии по пути защищённого файла настроек появляется символическая ссылка, песочница, начиная со следующей команды, также запрещает запись в файл, на который она указывает.
552 589
553Нет способа исключить один из этих путей: запись `allowWrite` или правило разрешения `Edit`, которое охватывает путь, не снимает защиту. Единственный способ отключить защиту — это [`filesystem.disabled`](#disable-filesystem-isolation), который отключает изоляцию файловой системы для каждого пути. Чтобы увидеть большинство этих путей, разрешённых для вашей машины, запустите `/sandbox` и откройте вкладку **Config**, которая перечисляет их в разделе **Denied within allowed**, смешанные с вашими собственными записями `denyWrite`.590Исключить какой-либо из этих путей невозможно: запись `allowWrite` или разрешающее правило `Edit`, охватывающее путь, не снимает защиту. Единственный способ отключить защиту — [`filesystem.disabled`](#disable-filesystem-isolation), который отключает изоляцию файловой системы для всех путей. Чтобы увидеть большинство этих путей в том виде, в каком они разрешаются на вашей машине, выполните `/sandbox` и откройте вкладку **Config**, где они перечислены в разделе **Denied within allowed** вместе с вашими собственными записями `denyWrite`.
554 591
555Если `git merge` или `git checkout` не удаётся с ошибкой `unable to unlink old` на одном из этих путей, см. [Troubleshooting](#troubleshooting).592Если `git merge` или `git checkout` завершается ошибкой `unable to unlink old` на одном из этих путей, см. раздел [Команда git завершается ошибкой `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).
556 593
557<h3 id="network-isolation">594<h3 id="network-isolation">
558 Сетевая изоляция595 Сетевая изоляция
559</h3>596</h3>
560 597
561Доступ в сеть контролируется через прокси-сервер, работающий вне sandbox:598У команды в песочнице нет прямого доступа к сети:
562 599
563* **Ограничения домена**: Claude Code не предварительно разрешает никакие домены по умолчанию. Первый раз, когда команде требуется новый домен, Claude Code запрашивает одобрение; в [режиме автоматизации](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) Claude вместо этого называет хосты, которые требуются команде, на самой команде, согласно [Per-command allowed domains](#per-command-allowed-domains-in-auto-mode).600* **Linux и WSL2**: команда выполняется в отдельном сетевом пространстве имён, не подключённом к вашей сети
564* **Варианты одобрения**: если вы выберете «Да» при запросе, Claude Code разрешит хост для остальной части текущего сеанса и больше не будет запрашивать подтверждение для более поздних подключений к тому же хосту. Если вы выберете «Да, и больше не спрашивать», Claude Code сохранит правило разрешения `WebFetch(domain:...)` в ваши [локальные параметры](/docs/ru/permissions#permission-system), чтобы хост оставался разрешённым в будущих сеансах.601* **macOS**: фреймворк песочницы Seatbelt по умолчанию блокирует все подключения, кроме подключения к прокси песочницы
565* **Предварительно разрешённые домены**: предварительно разрешите домены с помощью [`allowedDomains`](/docs/ru/settings-reference#sandbox-network-alloweddomains), чтобы полностью избежать запроса. Claude Code также предварительно разрешает домены из правил разрешения `WebFetch(domain:...)`, как описано в [Permission rules](#permission-rules).
566* **Строгий список разрешений**: если вы установите [`strictAllowlist`](/docs/ru/settings-reference#sandbox-network-strictallowlist) в значение `true` в пользовательских, управляемых или CLI параметрах `--settings`, Claude Code запретит изолированным командам доступ к любому хосту вне списка разрешений вместо запроса. Список разрешений — это тот же, против которого sandbox иначе запрашивает: `allowedDomains` плюс домены из правил разрешения `WebFetch(domain:...)`, или только записи управляемых параметров, когда установлен `allowManagedDomainsOnly`. Claude Code применяет это только для изолированных команд; встроенные инструменты, такие как `WebFetch`, всё ещё следуют своим [правилам разрешения](#permission-rules). Установка этого в `.claude/settings.json` или `.claude/settings.local.json` репозитория не имеет эффекта. Требуется Claude Code версии 2.1.219 или позже.
567* **Управляемая блокировка**: если [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly) установлен в управляемых параметрах, неразрешённые домены автоматически блокируются вместо запроса, и только `allowedDomains` и правила разрешения `WebFetch(domain:...)` из управляемых параметров учитываются.
568* **Корпоративный прокси**: когда ваша сеть требует, чтобы исходящий трафик проходил через корпоративный прокси, установите `HTTPS_PROXY`, `HTTP_PROXY` и `NO_PROXY` как описано в [proxy configuration](/docs/ru/network-config#proxy-configuration), в блоке `env` ваших параметров, чтобы [фоновые агенты](/docs/ru/network-config#set-network-variables-in-settings-not-the-shell) их получили, или в окружении, из которого вы запускаете Claude Code. Claude Code применяет список разрешений домена и затем туннелирует разрешённые подключения через этот вышестоящий прокси.
569* **Поддержка пользовательского прокси**: продвинутые пользователи могут реализовать пользовательские правила для исходящего трафика
570* **Полное покрытие**: ограничения применяются ко всем скриптам, программам и подпроцессам, порожденным командами
571 602
572В правиле `WebFetch(domain:...)` sandbox поддерживает две формы подстановочных символов: ведущий `*.`, такой как `*.example.com`, и простой `*`. Простая форма `*` требует Claude Code версии 2.1.186 или позже. Подстановочный символ в любой другой позиции, такой как `WebFetch(domain:example.*)`, всё ещё соответствует выборкам, но не влияет на изолированные команды.603Claude Code запускает прокси песочницы на вашей машине вне песочницы и направляет к нему команды с помощью `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` и связанных переменных окружения. Прокси проверяет имя хоста каждого подключения по вашим разрешённым и запрещённым доменам.
604
605То, к чему может подключиться инструмент, зависит от того, использует ли он прокси:
606
607* **Инструменты, читающие переменные прокси**: `curl`, `npm`, `git` по HTTPS и аналогичные инструменты подключаются, как только их хост разрешён. Запись `allowedDomains` без порта разрешает все порты на этом хосте
608* **Инструменты, игнорирующие переменные прокси**: обычный `ssh`, большинство драйверов баз данных и аналогичные инструменты не могут подключиться даже к разрешённому хосту. См. [Клиент базы данных или другой не-HTTP инструмент не может подключиться к разрешённому хосту](#a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host)
609* **Всё, что не является TCP**: UDP, HTTP/3 поверх QUIC и инструменты ICMP, такие как `ping`, не могут выйти за пределы песочницы
610
611Следующие настройки и поведение определяют, какие хосты разрешает прокси:
612
613* **Ограничения доменов**: изначально список разрешённых доменов пуст. В разделе [Хосты вне списка разрешённых доменов](#hosts-outside-your-allowed-domains) описано, что происходит, когда команде впервые нужен новый домен.
614* **Варианты подтверждения**: если при запросе вы выберете Yes, Claude Code разрешит хост до конца текущей сессии. Если вы выберете "Yes, and don't ask again", Claude Code сохранит разрешающее правило `WebFetch(domain:...)` в ваших [локальных настройках](/docs/ru/permissions#permission-system), и хост останется разрешённым в будущих сессиях. Пока песочница [обязательна по требованию администратора](#repository-settings-under-an-admin-required-sandbox), Claude Code сохраняет правило в ваших пользовательских настройках, где оно применяется во всех проектах.
615* **Заранее разрешённые домены**: заранее разрешите домены с помощью [`allowedDomains`](/docs/ru/settings-reference#sandbox-network-alloweddomains), чтобы полностью избежать запроса. Claude Code также заранее разрешает домены из разрешающих правил `WebFetch(domain:...)`, как описано в разделе [Правила разрешений](#permission-rules).
616* **Строгий список разрешённых доменов**: если вы зададите [`strictAllowlist`](/docs/ru/settings-reference#sandbox-network-strictallowlist) значение `true` в пользовательских, управляемых настройках или настройках CLI `--settings`, Claude Code будет запрещать командам в песочнице доступ к любому хосту вне списка разрешённых вместо запроса. Список разрешённых состоит из `allowedDomains` и доменов из разрешающих правил `WebFetch(domain:...)` либо только из записей управляемых настроек, если задан `allowManagedDomainsOnly`. Записи репозитория описаны в разделе [Блокировки, действующие без обязательной песочницы](#locks-that-apply-without-an-admin-required-sandbox). Claude Code применяет это только к командам в песочнице; внутрипроцессные инструменты, такие как `WebFetch`, по-прежнему следуют своим [правилам разрешений](#permission-rules). Задание этой настройки в `.claude/settings.json` или `.claude/settings.local.json` репозитория ни на что не влияет. Требуется Claude Code v2.1.219 или новее.
617* **Управляемая блокировка**: если в управляемых настройках задан [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly), неразрешённые домены блокируются автоматически без запроса, и учитываются только `allowedDomains` и разрешающие правила `WebFetch(domain:...)` из управляемых настроек.
618* **Корпоративный прокси**: если ваша сеть требует, чтобы исходящий трафик проходил через корпоративный прокси, задайте `HTTPS_PROXY`, `HTTP_PROXY` и `NO_PROXY`, как описано в разделе [Конфигурация прокси](/docs/ru/network-config#proxy-configuration), в блоке `env` ваших настроек, чтобы их также получали [фоновые агенты](/docs/ru/network-config#set-network-variables-in-settings-not-the-shell), или в окружении, из которого вы запускаете Claude Code. Claude Code применяет список разрешённых доменов, а затем туннелирует разрешённые подключения через этот вышестоящий прокси. Поддерживаются URL прокси `http://` и `https://`, при необходимости с базовой аутентификацией в URL.
619
620В правиле `WebFetch(domain:...)` песочница учитывает две формы подстановочных знаков: ведущий `*.`, например `*.example.com`, и одиночный `*`. Форма с одиночным `*` требует Claude Code v2.1.186 или новее. Подстановочный знак в любой другой позиции, например `WebFetch(domain:example.*)`, по-прежнему сопоставляется с запросами, но не влияет на команды в песочнице.
573 621
574<Note>622<Note>
575 Встроенный прокси применяет список разрешений на основе запрошенного имени хоста и, по умолчанию, не завершает и не проверяет трафик TLS. Экспериментальный параметр [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate), доступный в Claude Code версии 2.1.199 и позже, заставляет встроенный прокси самостоятельно завершать TLS, что требуется для [`mask` записей учётных данных](#mask-credentials). См. [Security limitations](#security-limitations) для понимания последствий поведения по умолчанию и [Custom proxy configuration](#custom-proxy-configuration), если ваша модель угроз требует проверки TLS.623 Встроенный прокси применяет список разрешённых доменов на основе запрошенного имени хоста и по умолчанию не терминирует и не инспектирует трафик TLS. Экспериментальная настройка [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate), доступная в Claude Code v2.1.199 и новее, заставляет встроенный прокси самостоятельно терминировать TLS, что требуется для [записей учётных данных `mask`](#mask-credentials). Последствия поведения по умолчанию описаны в разделе [Ограничения безопасности](#security-limitations), а если ваша модель угроз требует инспекции TLS, см. [Пользовательская конфигурация прокси](#custom-proxy-configuration).
576</Note>624</Note>
577 625
626<h4 id="hosts-outside-your-allowed-domains">
627 Хосты вне списка разрешённых доменов
628</h4>
629
630Когда команда в песочнице подключается к хосту, которого нет в ваших разрешённых доменах, команда остаётся в песочнице и ожидает решения. В интерактивной сессии терминала решение зависит от вашего режима разрешений:
631
632| Режим разрешений | Что происходит с подключением |
633| :- | :- |
634| Режим `bypassPermissions`, а также режим планирования при [доступном обходе разрешений](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) | Разрешается без запроса |
635| Ручной режим, режим `acceptEdits` и режим планирования в остальных случаях | Вы получаете запрос |
636| Авторежим | Отклоняется, если команда не [указала хост](#per-command-allowed-domains-in-auto-mode) и классификатор не одобрил список |
637| Режим `dontAsk` | Отклоняется |
638
639При включённом [`strictAllowlist`](/docs/ru/settings-reference#sandbox-network-strictallowlist) или [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly) встроенный прокси песочницы отклоняет подключение в любом режиме разрешений. В режиме `bypassPermissions` хосты вне ваших разрешённых доменов разрешаются, если не включена ни одна из этих настроек. В разделе [Запасной выход через повторную попытку вне песочницы](#the-unsandboxed-retry-escape-hatch) описано, когда команда может покинуть песочницу в этом режиме. Подключение к хосту из [`deniedDomains`](/docs/ru/settings-reference#sandbox-network-denieddomains) также отклоняется в любом режиме разрешений.
640
641<h4 id="hostnames-that-resolve-to-local-addresses">
642 Имена хостов, разрешающиеся в локальные адреса
643</h4>
644
645После того как имя хоста прошло проверку по списку разрешённых, прокси песочницы разрешает его и отклоняет подключение, если имя разрешается только в локальные адреса. К локальным адресам относятся loopback-адреса, такие как `127.0.0.1`, link-local адреса, такие как эндпоинт облачных метаданных `169.254.169.254`, и адреса, назначенные вашей собственной машине. Именам `localhost` и `*.localhost` разрешено разрешаться в loopback.
646
647Разрешённое имя хоста интрасети, которое разрешается в частный диапазон, такой как `10.0.0.0/8`, подключается. Чтобы разрешить имени разрешаться в отклоняемый адрес, добавьте этот IP-адрес в `allowedDomains`, например `"127.0.0.1:8080"`.
648
649Проверка применяется к именам хостов. Подключение к IP-адресу определяется вашими разрешёнными доменами и режимом разрешений. Прокси также пропускает проверку для подключений, которые он отправляет через вышестоящий корпоративный прокси, поскольку имя разрешает этот прокси.
650
578<h4 id="per-command-allowed-domains-in-auto-mode">651<h4 id="per-command-allowed-domains-in-auto-mode">
579 Разрешённые домены для каждой команды в режиме автоматизации652 Разрешённые домены для отдельных команд в авторежиме
580</h4>653</h4>
581 654
582В [режиме автоматизации](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) с включённым sandboxing Claude называет хосты, которые требуются команде, на самой команде вместо того, чтобы вызывать одобрение сети для каждого подключения. Каждая команда Bash, PowerShell или [Monitor](/docs/ru/tools-reference#monitor-tool), которая запускается в sandbox, может содержать список хостов, выходящих за пределы списка разрешений sandbox: домен, такой как `registry.npmjs.org`, подстановочный символ, такой как `*.pythonhosted.org`, или IP-адрес, каждый с необязательным `:port`. Классификатор проверяет хосты вместе с командой. Требуется Claude Code версии 2.1.271 или позже.655В [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) с включённой изоляцией в песочнице Claude указывает хосты, необходимые команде, в самой команде, вместо того чтобы запрашивать сетевое подтверждение для каждого подключения. Каждая команда Bash, PowerShell или [Monitor](/docs/ru/tools-reference#monitor-tool), выполняемая в песочнице, может содержать список хостов сверх списка разрешённых песочницы: домен, например `registry.npmjs.org`, подстановочный шаблон, например `*.pythonhosted.org`, или IP-адрес, каждый с необязательным `:port`. Классификатор проверяет хосты вместе с командой. Требуется Claude Code v2.1.271 или новее.
583 656
584Одобренный список открывает эти хосты только для этой одной команды, пока она выполняется. Ничего не добавляется в разрешённые хосты вашего сеанса или в ваши параметры; следующая команда называет свои собственные хосты.657Одобренный список открывает эти хосты только для одной этой команды и только на время её выполнения. Ничего не добавляется ни в разрешённые хосты вашей сессии, ни в ваши настройки; следующая команда указывает собственные хосты.
585 658
586Команда, которая содержит хосты, переходит к классификатору вместо того, чтобы быть одобренной правилом разрешения или [режимом автоматического одобрения](#sandbox-modes) sandbox. Если [правило ask](/docs/ru/permissions#manage-permissions) вынуждает запрос для команды, диалог разрешения в вашем терминале перечисляет хосты рядом с ней, и одобрение там охватывает оба.659Команда, содержащая хосты, передаётся классификатору, а не одобряется правилом разрешений или [режимом автоматического разрешения](#sandbox-modes) песочницы. Если [правило ask](/docs/ru/permissions#manage-permissions) принудительно вызывает запрос для команды, диалог разрешения в вашем терминале показывает хосты рядом с ней, и подтверждение там распространяется на то и другое.
587 660
588Список для каждой команды расширяет только то, что sandbox запрещает по умолчанию. Записи [`deniedDomains`](/docs/ru/settings-reference#sandbox-network-denieddomains) всё ещё блокируют. Когда [`strictAllowlist`](/docs/ru/settings-reference#sandbox-network-strictallowlist) или [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly) блокирует список разрешений, Claude Code отказывает в списках для каждой команды.661Список для отдельной команды расширяет только то, что песочница запрещает по умолчанию. Записи [`deniedDomains`](/docs/ru/settings-reference#sandbox-network-denieddomains) по-прежнему блокируют подключения. Когда [`strictAllowlist`](/docs/ru/settings-reference#sandbox-network-strictallowlist) или [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly) блокирует список разрешённых, Claude Code отклоняет списки для отдельных команд.
589 662
590Пока применяются списки для каждой команды, Claude Code отказывает в подключении к хосту, который ни одна одобренная команда не указала, без запроса или проверки классификатора. Отказ называет хост в результате команды, и Claude повторно запускает команду с добавленным хостом.663Пока действуют списки для отдельных команд, Claude Code отклоняет подключение к хосту, который не указала ни одна одобренная команда, без запроса и без проверки классификатором. Отказ называет хост в результате команды, и Claude повторно запускает команду с добавленным хостом.
591 664
592<h4 id="ipv6-addresses-in-domain-lists">665<h4 id="ipv6-addresses-in-domain-lists">
593 IPv6 адреса в списках доменов666 IPv6-адреса в списках доменов
594</h4>667</h4>
595 668
596Списки доменов sandbox — это `allowedDomains`, `deniedDomains` и правила `WebFetch(domain:...)`, которые их питают. Чтобы соответствовать IPv6 адресу в любом из них, напишите литерал в скобках: `"[::1]"` соответствует этому адресу на каждом порту, и `"[::1]:443"` соответствует ему только на порту 443. Напишите порт как число от 1 до 65535 без ведущих нулей. Форма в скобках требует Claude Code версии 2.1.229 или позже. До версии 2.1.229, когда текст после последнего двоеточия записи без скобок был номером порта, Claude Code читал его как один, поэтому `::1:443` назывался адресом `::1` на порту 443.669Чтобы указать IPv6-адрес в `allowedDomains`, `deniedDomains` или правиле `WebFetch(domain:...)`, запишите адрес в квадратных скобках: `"[::1]"` соответствует этому адресу на любом порту, а `"[::1]:443"` — только на порту 443. Форма в квадратных скобках требует Claude Code v2.1.229 или новее.
597
598Когда вы выбираете «Да, и больше не спрашивать» при запросе одобрения сети для IPv6 адреса, Claude Code сохраняет правило `WebFetch(domain:...)` с адресом в скобках, чтобы правило продолжало соответствовать адресу в будущих сеансах.
599 670
600Запись без скобок с двумя или более двоеточиями неоднозначна: `::1:443` — это одновременно полный IPv6 адрес и адрес, за которым следует порт. Claude Code применяет неоднозначные написания консервативно вместо угадывания, какое прочтение вы имели в виду:671Запись без скобок, например `::1:443`, неоднозначна: её можно прочитать и как адрес, и как адрес с портом:
601 672
602* **Списки запретов**: Claude Code запрещает каждое прочтение, которое запись анализирует как, поэтому какое бы прочтение вы ни имели в виду, оно блокируется. Для записи без анализируемого прочтения Claude Code ничего не блокирует.673* **Списки запрещённых**: Claude Code запрещает все варианты прочтения записи, поэтому блокируется любой вариант, который вы могли иметь в виду. Для записи, не имеющей ни одного допустимого прочтения, Claude Code ничего не блокирует
603* **Списки разрешений**: Claude Code никогда не разрешает больше, чем вы написали. Он переписывает неоднозначную запись в её прочтение хоста и порта, когда это прочтение анализируется чисто, и может полностью отбросить запись, а не расширять список разрешений.674* **Списки разрешённых**: Claude Code никогда не разрешает больше, чем вы написали. Он переписывает неоднозначную запись в прочтение «хост и порт», если оно корректно разбирается, и может полностью отбросить запись, чтобы не расширять список разрешённых
604 675
605Запустите `claude doctor` в вашем терминале, чтобы найти затронутые записи: предупреждение `Sandbox network domain entries have unreliable spellings` называет до трёх из них и считает остальные. Переписьте каждую в форме в скобках, чтобы очистить предупреждение. Предупреждение также называет записи, чьё написание ненадёжно по другим причинам, таким как `@`, символы пути или запроса, или подстановочные символы внутри скобок.676Чтобы найти неоднозначные записи, выполните `claude doctor` в терминале и найдите предупреждение `Sandbox network domain entries have unreliable spellings`. Перепишите каждую неоднозначную запись в форме с квадратными скобками.
606 677
607<h3 id="os-level-enforcement">678<h3 id="os-level-enforcement">
608 Применение на уровне ОС679 Применение на уровне ОС
609</h3>680</h3>
610 681
611Изолированный инструмент Bash использует примитивы безопасности операционной системы:682Инструмент Bash в песочнице использует примитивы безопасности операционной системы:
612 683
613* **macOS**: использует Seatbelt для применения sandbox684* **macOS**: использует Seatbelt для применения песочницы
614* **Linux**: использует [bubblewrap](https://github.com/containers/bubblewrap) для изоляции685* **Linux**: использует [bubblewrap](https://github.com/containers/bubblewrap) для изоляции
615* **WSL2**: использует bubblewrap, как и Linux686* **WSL2**: использует bubblewrap, как и Linux
616 687
617WSL1 не поддерживается, потому что bubblewrap требует функций ядра, доступных только в WSL2.688Вы также можете запустить пакет [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime) отдельно, чтобы обернуть им процесс Claude Code. См. [Среда выполнения песочницы](/docs/ru/sandbox-environments#sandbox-runtime).
618
619Эти же примитивы доступны как отдельный пакет [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropic-experimental/sandbox-runtime), который страница [Sandbox environments](/docs/ru/sandbox-environments#sandbox-runtime) описывает как отдельный подход для обёртывания всего процесса Claude Code.
620 689
621<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">690<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">
622 Как sandboxing связан с разрешениями и режимами разрешений691 Как sandboxing связан с разрешениями и режимами разрешений
668Режим [автоматического разрешения](#sandbox-modes) sandbox отличается от [режима auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode): автоматическое разрешение одобряет команды Bash, потому что граница sandbox их содержит, в то время как режим auto использует классификатор для проверки действий. Два работают независимо и могут быть объединены, с исключениями, перечисленными в разделе [Sandbox modes](#sandbox-modes). Чтобы выбрать границу изоляции для автоматических запусков, см. [Sandbox environments](/docs/ru/sandbox-environments#how-isolation-relates-to-permission-modes). Для таблицы распространённых пар режимов разрешений и sandbox с флагами, которые запускают каждый из них, см. [Common setups](/docs/ru/permission-modes#common-setups).737Режим [автоматического разрешения](#sandbox-modes) sandbox отличается от [режима auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode): автоматическое разрешение одобряет команды Bash, потому что граница sandbox их содержит, в то время как режим auto использует классификатор для проверки действий. Два работают независимо и могут быть объединены, с исключениями, перечисленными в разделе [Sandbox modes](#sandbox-modes). Чтобы выбрать границу изоляции для автоматических запусков, см. [Sandbox environments](/docs/ru/sandbox-environments#how-isolation-relates-to-permission-modes). Для таблицы распространённых пар режимов разрешений и sandbox с флагами, которые запускают каждый из них, см. [Common setups](/docs/ru/permission-modes#common-setups).
669 738
670<h2 id="configure-the-sandbox-for-your-organization">739<h2 id="configure-the-sandbox-for-your-organization">
671 Настройка sandbox для вашей организации740 Настройка песочницы для вашей организации
672</h2>741</h2>
673 742
674Администраторы могут требовать sandboxing для каждого пользователя, препятствовать разработчикам расширять политику и маршрутизировать трафик sandbox через корпоративный прокси.743Администраторы могут требовать изоляцию в песочнице для каждого пользователя, не давать разработчикам расширять политику и направлять трафик песочницы через корпоративный прокси.
675 744
676<h3 id="enforce-sandboxing-with-managed-settings">745<h3 id="enforce-sandboxing-with-managed-settings">
677 Применение sandboxing с управляемыми параметрами746 Принудительная изоляция в песочнице с помощью управляемых настроек
678</h3>747</h3>
679 748
680Чтобы требовать sandbox для каждого разработчика, доставьте ключи `sandbox` через [управляемые параметры](/docs/ru/managed-settings#delivery-mechanisms), либо как файл, управляемый вашей MDM, либо через [управляемые параметры сервера](/docs/ru/server-managed-settings) на claude.ai.749Чтобы требовать песочницу для каждого разработчика, доставьте ключи `sandbox` через [управляемые настройки](/docs/ru/managed-settings#delivery-mechanisms): либо как файл, управляемый вашей MDM, либо через [серверные управляемые настройки](/docs/ru/server-managed-settings) на claude.ai.
681 750
682Следующая конфигурация управляемых параметров включает sandbox, отказывает запустить Claude Code, если sandbox не может инициализироваться, и препятствует модели повторять команды вне sandbox:751Следующая конфигурация управляемых настроек включает песочницу, запрещает запуск Claude Code, если платформа не поддерживается или отсутствует зависимость, и не позволяет модели повторять команды вне песочницы:
683 752
684```json theme={null}753```json theme={null}
685{754{
691}760}
692```761```
693 762
694Два ключа помимо `enabled` контролируют, что происходит, когда sandbox не может выполнить команду:763Два ключа помимо `enabled` определяют, что происходит, когда песочница не может выполнить команду:
764
765* **`failIfUnavailable`**: отсутствующая зависимость, такая как bubblewrap на Linux, блокирует запуск Claude Code вместо возврата к выполнению без изоляции
766* **`allowUnsandboxedCommands: false`**: Claude Code игнорирует механизм выхода `dangerouslyDisableSandbox`, поэтому, когда команда завершается ошибкой в песочнице, Claude не может повторить её вне песочницы
695 767
696* **`failIfUnavailable`**: отсутствующая зависимость, такая как bubblewrap на Linux, блокирует запуск Claude Code вместо показа предупреждения и возврата к выполнению без изоляции768Рассмотрите также следующие дополнения:
697* **`allowUnsandboxedCommands: false`**: Claude Code игнорирует механизм выхода `dangerouslyDisableSandbox`, поэтому когда команда не выполняется в sandbox, Claude не может повторить её вне sandbox
698 769
699Два дополнения стоит рассмотреть вместе с ними. Добавьте `excludedCommands` для любых одобренных организацией инструментов, которые должны выполняться без изоляции. Добавьте записи [`sandbox.credentials`](#protect-credentials) для каталогов учётных данных, таких как `~/.aws` и `~/.ssh`, и для переменных окружения с секретами, поскольку политика чтения по умолчанию всё ещё разрешает их.770* Добавьте `excludedCommands` для любых одобренных организацией инструментов, которые должны выполняться без изоляции, поскольку эта конфигурация [не позволяет настройкам репозитория выводить команды из песочницы](#repository-settings-under-an-admin-required-sandbox)
771* Добавьте записи [`sandbox.credentials`](#protect-credentials) для каталогов учётных данных, таких как `~/.aws` и `~/.ssh`, и для переменных окружения с секретами, поскольку политика чтения по умолчанию всё ещё разрешает к ним доступ
700 772
701Эта конфигурация изолирует команды, которые выполняет Claude. Разработчик всё ещё может ввести команду в [приглашение shell-режима с префиксом `!`](/docs/ru/interactive-mode#shell-mode-with-prefix) и выполнить её вне sandbox с тем же доступом, который у него уже есть в любом терминале вне Claude Code. Смотрите [Механизм выхода для повторного выполнения без sandbox](#the-unsandboxed-retry-escape-hatch) для сеансов, где введённые команды выполняются в sandbox.773Эта конфигурация изолирует в песочнице команды, которые выполняет Claude. Разработчик по-прежнему может ввести команду в [приглашении shell-режима `!`](/docs/ru/interactive-mode#shell-mode-with-prefix) и выполнить её вне песочницы с тем же доступом, который у него уже есть в любом терминале вне Claude Code. Сессии, в которых введённые команды выполняются в песочнице, описаны в разделе [строгий режим песочницы](#turn-off-the-retry-with-strict-sandbox-mode).
702 774
703Sandbox не работает на нативной Windows, поэтому если ваш парк включает хосты Windows, ограничьте эту конфигурацию macOS и Linux или попросите этих пользователей запустить Claude Code внутри WSL2 или контейнера.775Песочница не работает на нативной Windows, поэтому при установленном `failIfUnavailable` Claude Code завершает работу при запуске на таких машинах. Если ваш парк включает хосты Windows, вы можете:
776
777* **Доставлять конфигурацию в зависимости от операционной системы**: разверните её через MDM или как [файл управляемых настроек](/docs/ru/managed-settings#delivery-mechanisms) только на машинах с macOS и Linux. [Серверные управляемые настройки](/docs/ru/server-managed-settings#current-limitations) применяются ко всем пользователям организации
778* **Перевести пользователей Windows в поддерживаемую среду**: попросите их запускать Claude Code внутри WSL2 или контейнера
704 779
705<h3 id="keep-developers-from-widening-the-policy">780<h3 id="keep-developers-from-widening-the-policy">
706 Препятствование разработчикам расширять политику781 Запрет разработчикам расширять политику
707</h3>782</h3>
708 783
709Для логических ключей, таких как `enabled` и `failIfUnavailable`, Claude Code использует управляемое значение и игнорирует всё, что разработчик устанавливает локально. Для ключей массива, таких как `excludedCommands` и `allowRead`, Claude Code объединяет записи из каждой области, которую загружает сеанс, поэтому разработчик может добавлять записи, которые расширяют политику.784Когда управляемые настройки задают логический ключ, такой как `enabled` или `failIfUnavailable`, Claude Code использует управляемое значение и игнорирует всё, что разработчик задаёт локально. Для ключей-массивов, таких как `allowRead`, Claude Code объединяет записи из областей действия, которые загружает сессия, поэтому разработчик может добавлять записи, расширяющие политику, если этот ключ не защищён блокировкой.
785
786Если управляемые настройки их не задают, пользовательские настройки разработчика или `--settings` могут включить следующие ключи. Файл `.claude/settings.json` репозитория тоже может это сделать, если только песочница не является [обязательной по требованию администратора](#repository-settings-under-an-admin-required-sandbox). Каждый из них ослабляет песочницу, поэтому установите его в `false` в управляемых настройках, если не хотите, чтобы он использовался:
787
788* [`enableWeakerNestedSandbox`](/docs/ru/settings-reference#sandbox-enableweakernestedsandbox)
789* [`enableWeakerNetworkIsolation`](/docs/ru/settings-reference#sandbox-enableweakernetworkisolation)
790* [`network.allowAllUnixSockets`](/docs/ru/settings-reference#sandbox-network-allowallunixsockets)
791* [`network.allowLocalBinding`](/docs/ru/settings-reference#sandbox-network-allowlocalbinding)
792* [`allowAppleEvents`](/docs/ru/settings-reference#sandbox-allowappleevents), который репозиторий включить не может
793
794Установите `allowManagedReadPathsOnly` в `true` в управляемых настройках, чтобы учитывались только записи `allowRead` из управляемых настроек. Это не позволяет разработчикам расширять доступ на чтение за пределы одобренных организацией путей.
710 795
711Установите `allowManagedReadPathsOnly` в `true` в управляемых параметрах, чтобы только записи `allowRead` из управляемых параметров учитывались. Это препятствует разработчикам расширять доступ на чтение за пределы одобренных организацией путей. Чтобы заблокировать сетевые домены таким же образом, установите [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly).796Чтобы таким же образом закрепить сетевые домены за управляемыми значениями, установите [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly). При включённой блокировке [порт прокси](#custom-proxy-configuration) могут задавать только управляемые настройки.
712 797
713Когда управляемые параметры конфигурируют `sandbox.filesystem` или указывают любую запись `sandbox.credentials.files` с `"mode": "deny"`, только управляемые параметры могут установить [`filesystem.disabled`](#disable-filesystem-isolation), поэтому разработчики не могут отключить развёрнутые администратором ограничения изоляции файловой системы. Закрепляет ли запись `mask` ключ, зависит от того, как она разрешается; таблица в разделе [Какие параметры могут отключить это](#which-settings-can-disable-it) охватывает четыре случая.798Когда управляемые настройки настраивают `sandbox.filesystem` или содержат любую запись `sandbox.credentials.files` с `"mode": "deny"`, только управляемые настройки могут задать [`filesystem.disabled`](#disable-filesystem-isolation), поэтому разработчики не могут отключить ограничения файловой системы, развёрнутые администратором. [Допустимая](/docs/ru/settings-reference#invalid-credential-entries-in-managed-settings) запись `mask` не закрепляет этот ключ. См. раздел [Какие настройки могут её отключить](#which-settings-can-disable-it).
714 799
715`excludedCommands` не имеет эквивалентной блокировки только для управляемых, поэтому разработчик всегда может добавлять записи, которые выполняют дополнительные команды вне sandbox. Держите управляемый список узким.800<h4 id="repository-settings-under-an-admin-required-sandbox">
801 Настройки репозитория при обязательной песочнице
802</h4>
803
804Песочница является обязательной по требованию администратора, пока действует одна из следующих настроек:
805
806* [`allowUnsandboxedCommands`](/docs/ru/settings-reference#sandbox-allowunsandboxedcommands) установлен в `false` в управляемых настройках или через флаг `--settings`, если только управляемые настройки не устанавливают его в `true`
807* [`allowManagedDomainsOnly`](/docs/ru/settings-reference#sandbox-network-allowmanageddomainsonly) установлен в `true` в управляемых настройках
808
809Эти настройки не включают песочницу, поэтому также задайте `enabled`.
810
811Пока песочница обязательна по требованию администратора, Claude Code принимает настройки, ослабляющие её, только из управляемых настроек, флага `--settings` и файла `~/.claude/settings.json` каждого разработчика. Он игнорирует эти настройки в файлах `.claude/settings.json` и `.claude/settings.local.json` репозитория:
812
813| Настройка репозитория | Что игнорирует Claude Code |
814| :- | :- |
815| `excludedCommands`, `ignoreViolations`, `network.allowedDomains`, `network.allowUnixSockets`, `network.allowMachLookup`, `network.httpProxyPort`, `network.socksProxyPort` | Каждую запись |
816| `filesystem.allowWrite`, правила разрешения `Edit(...)`, `permissions.additionalDirectories` | Доступ на запись, который каждая запись даёт командам в песочнице. Файловые инструменты Claude по-прежнему следуют правилам `Edit(...)` и дополнительным каталогам |
817| Правила разрешения `WebFetch(domain:...)` | Хост, который каждое правило добавляет в список разрешённых доменов песочницы. Инструмент WebFetch по-прежнему следует правилу |
818| `enableWeakerNestedSandbox`, `enableWeakerNetworkIsolation`, `network.allowAllUnixSockets`, `network.allowLocalBinding` | `true`. Значение `false` по-прежнему применяется |
819| `enabled`, `failIfUnavailable` | `false`, если `~/.claude/settings.json` разработчика задаёт `true` |
820| `filesystem.allowRead` | Запись, указывающую на путь или путь внутри него, чтение которого запрещают управляемые настройки, `--settings` или пользовательские настройки, либо glob-шаблон, который может ему соответствовать |
821
822Пока песочница обязательна по требованию администратора, по-прежнему применяются следующие настройки:
823
824* **В файлах репозитория**: записи запрета и значение `autoAllowBashIfSandboxed`. Задайте этот ключ в управляемых настройках, чтобы репозиторий не мог его изменить
825* **В собственных настройках разработчика**: настройки из таблицы по-прежнему применяются из `~/.claude/settings.json` или `--settings`, если только их не защищает блокировка только для управляемых настроек, такая как `allowManagedDomainsOnly`. Для большинства из них, например `excludedCommands` и `filesystem.allowWrite`, такой блокировки нет
826
827Конфигурация из раздела [Принудительная изоляция в песочнице с помощью управляемых настроек](#enforce-sandboxing-with-managed-settings) делает песочницу обязательной по требованию администратора. Добавьте в управляемые настройки записи `excludedCommands`, `allowWrite` и записи сокетов, необходимые вашим одобренным инструментам, поскольку репозиторий не может их предоставить.
828
829Требуется Claude Code v2.1.285 или новее. В версиях с v2.1.282 по v2.1.284 те же настройки заставляли Claude Code игнорировать записи `excludedCommands` репозитория.
830
831<h4 id="locks-that-apply-without-an-admin-required-sandbox">
832 Блокировки, действующие без обязательной песочницы
833</h4>
834
835Некоторые настройки заставляют Claude Code игнорировать ключи репозитория, которые напрямую переопределяют одно ограничение, даже если песочница не является обязательной по требованию администратора. Каждая из них действует так, только если задана в файле, указанном в её строке, а остальные настройки песочницы репозитория по-прежнему применяются. Требуется Claude Code v2.1.285 или новее.
836
837| Настройка | Где её задать | Что Claude Code игнорирует в настройках репозитория |
838| :- | :- | :- |
839| `network.deniedDomains` или правило запрета `WebFetch(domain:...)` | Управляемые настройки, `--settings` | `httpProxyPort` и `socksProxyPort` |
840| `network.strictAllowlist` | Управляемые настройки, `--settings`, пользовательские настройки | Порты прокси, `allowedDomains` и правила разрешения `WebFetch(domain:...)` |
841| `filesystem.denyRead`, правило запрета `Read(...)` или запись `credentials.files` | Управляемые настройки, `--settings` | Запись `allowRead`, `allowWrite`, правило разрешения `Edit(...)` или `additionalDirectories`, указывающую на путь или путь внутри него, чтение которого запрещают управляемые настройки, `--settings` или пользовательские настройки, либо glob-шаблон, который может ему соответствовать |
842
843Эти блокировки меняют то, к чему могут обращаться команды в песочнице. Инструмент WebFetch и файловые инструменты Claude по-прежнему следуют правилам и дополнительным каталогам репозитория.
716 844
717<h3 id="custom-proxy-configuration">845<h3 id="custom-proxy-configuration">
718 Конфигурация пользовательского прокси846 Конфигурация пользовательского прокси
719</h3>847</h3>
720 848
721Для организаций, требующих продвинутой сетевой безопасности, вы можете реализовать пользовательский прокси для:849Чтобы проверять, фильтровать или записывать в лог трафик песочницы с помощью собственных инструментов, замените встроенный прокси песочницы прокси-сервером, который вы запускаете на той же машине.
722 850
723* Расшифровки и проверки трафика HTTPS851Чтобы направить трафик песочницы через корпоративный прокси в другом месте вашей сети, вместо этого задайте `HTTPS_PROXY`, как описано в пункте **Корпоративный прокси** в разделе [Сетевая изоляция](#network-isolation). Так список разрешённых доменов Claude Code по-прежнему будет применяться.
724* Применения пользовательских правил фильтрации
725* Логирования всех сетевых запросов
726* Интеграции с существующей инфраструктурой безопасности
727 852
728Чтобы указать Claude Code на ваш прокси, установите порты прокси в [параметрах sandbox](/docs/ru/settings-reference#sandbox-settings):853Чтобы направить команды в песочнице на ваш прокси, задайте порты localhost, которые он прослушивает, в [настройках песочницы](/docs/ru/settings-reference#sandbox-settings):
729 854
730```json theme={null}855```json theme={null}
731{856{
738}863}
739```864```
740 865
866Если вы задаёте порт и одновременно задаёте `HTTPS_PROXY` или `HTTP_PROXY`, Claude Code не пересылает то, что команды в песочнице отправляют вашему прокси, дальше на прокси, указанный в этих переменных. Чтобы обращаться к корпоративному прокси, настройте пересылку на него в собственном прокси.
867
868Какие файлы могут задавать порт, зависит от остальных настроек песочницы:
869
870* **`allowManagedDomainsOnly` включён**: только управляемые настройки
871* **Песочница [обязательна по требованию администратора](#repository-settings-under-an-admin-required-sandbox) или действует [более узкая сетевая блокировка](#locks-that-apply-without-an-admin-required-sandbox)**: управляемые настройки, `--settings` и пользовательские настройки
872* **В остальных случаях**: любой файл настроек
873
874Claude Code игнорирует порт, заданный в любом другом месте. До v2.1.285 порт мог задавать любой файл настроек.
875
876<Warning>
877 Как только применяется любой из портов, ваш прокси отвечает за фильтрацию всего, что ему отправляется. Собственные сетевые средства контроля Claude Code, такие как `allowedDomains`, `deniedDomains`, `strictAllowlist`, запросы подтверждения и [проверка локальных адресов](#hostnames-that-resolve-to-local-addresses), перестают применяться к этому трафику. Команда в песочнице может подключиться к любому из прокси, поэтому если вы задаёте только один порт, списки доменов Claude Code на другом прокси не ограничивают то, к чему команда может обратиться через ваш.
878</Warning>
879
741<h2 id="troubleshooting">880<h2 id="troubleshooting">
742 Устранение неполадок881 Устранение неполадок
743</h2>882</h2>
744 883
745Некоторые команды не выполняются внутри sandbox, хотя они работают вне его. Исправления ниже охватывают наиболее распространённые случаи.884Некоторые команды не выполняются внутри песочницы, хотя они работают вне её. Найдите заголовок, соответствующий вашему симптому или сообщению об ошибке.
885
886Если песочница в вашей организации [обязательна по требованию администратора](#repository-settings-under-an-admin-required-sandbox), Claude Code игнорирует указанные в этих исправлениях настройки в файлах настроек проекта, поэтому сохраняйте их в `~/.claude/settings.json`, где они применяются во всех проектах. Если исправление по-прежнему не действует, возможно, этот ключ задан в управляемых настройках вашей организации.
887
888Исправление, которое добавляет шаблон в `excludedCommands`, выводит из песочницы команды, соответствующие этому шаблону. См. раздел о том, [что может делать исключённая команда](#run-commands-outside-the-sandbox-with-excludedcommands).
889
890<h3 id="commands-fail-with-a-host-not-allowed-error">
891 Команды не выполняются с ошибкой host-not-allowed
892</h3>
893
894Многим инструментам CLI нужен доступ к определённым хостам. Одобрите хост при появлении запроса или добавьте его в [`allowedDomains`](/docs/ru/settings-reference#sandbox-network-alloweddomains). Если ваша организация блокирует список разрешённых доменов с помощью `allowManagedDomainsOnly`, запрос не появляется, поэтому попросите администратора добавить хост.
895
896<h3 id="jest-hangs-or-fails">
897 `jest` зависает или не выполняется
898</h3>
899
900`watchman` несовместим с песочницей. Вместо этого запустите `jest --no-watchman`.
901
902<h3 id="go-based-clis-fail-tls-verification-on-macos">
903 CLI на Go не проходят проверку TLS на macOS
904</h3>
905
906Такие инструменты, как `gh`, `gcloud` и `terraform`, могут не проходить проверку TLS под [Seatbelt](#os-level-enforcement). Чтобы запускать эти инструменты вне песочницы, добавьте шаблон для каждого инструмента, например `gh *`, в [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands). Тогда инструмент выполняется с вашим полным доступом и своими сохранёнными учётными данными. Если вы используете `httpProxyPort` с MITM-прокси и пользовательским CA, вместо этого установите [`enableWeakerNetworkIsolation`](/docs/ru/settings-reference#sandbox-enableweakernetworkisolation) в `true`.
907
908<h3 id="open-osascript-or-browser-based-auth-flows-fail-with-error-600-on-macos">
909 `open`, `osascript` или потоки аутентификации через браузер не выполняются с ошибкой `-600` на macOS
910</h3>
911
912Песочница по умолчанию блокирует Apple Events. Установите [`allowAppleEvents`](/docs/ru/settings-reference#sandbox-allowappleevents) в `true` в пользовательских, управляемых или CLI-настройках, чтобы разрешить их. Claude Code игнорирует этот ключ в настройках проекта.
913
914Включение `allowAppleEvents` снимает изоляцию выполнения кода, так как изолированные команды смогут запускать другие приложения вне песочницы без запроса пользователю и отправлять команды AppleScript запущенным приложениям с учётом запроса согласия на автоматизацию macOS (TCC). В качестве альтернативы добавьте шаблон, например `open *`, в [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands). Тогда каждый вызов `open` проходит через процедуру запроса разрешения, а `open` может запустить любой файл или приложение, включая созданное Claude.
915
916<h3 id="docker-commands-fail">
917 Команды `docker` не выполняются
918</h3>
919
920`docker` несовместим с песочницей. Выведите нужные вам команды `docker` из песочницы с помощью шаблона `excludedCommands`, например `docker compose *`. В разделе [Запуск команд вне песочницы с помощью `excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) объясняется, к чему может получить доступ исключённая команда `docker`. Более узкий шаблон выводит из песочницы меньше команд.
921
922<h3 id="pbcopy-xclip-or-wl-copy-doesn’t-update-the-clipboard">
923 `pbcopy`, `xclip` или `wl-copy` не обновляют буфер обмена
924</h3>
925
926Утилиты буфера обмена `pbcopy`, `xclip` и `wl-copy` могут не получить доступ к системному буферу обмена изнутри песочницы, и в этом случае переданный им текст не поступает.
927
928Чтобы поместить вывод Claude в ваш буфер обмена, попросите Claude напечатать его в своём ответе, затем запустите [`/copy`](/docs/ru/commands). `/copy` записывает в буфер обмена из процесса Claude Code, а не из изолированной команды.
929
930Когда Claude передаёт текст одному из этих инструментов, добавление инструмента в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands) само по себе не выводит этот вызов из песочницы.
931
932<h3 id="a-git-command-fails-with-unable-to-unlink-old">
933 Команда git не выполняется с ошибкой `unable to unlink old`
934</h3>
935
936`git merge`, `git checkout` и подобные команды завершаются ошибкой `unable to unlink old`, когда им нужно заменить файл, запись в который запрещена песочницей. На Linux и WSL2 ошибка заканчивается на `Read-only file system`. Файл может находиться в одном из следующих мест:
937
938* Под [защищённым путём](#protected-paths), таким как `.claude/skills`
939* Под одной из ваших записей `denyWrite`
940* Вообще вне каталогов, в которые песочница позволяет командам писать
941
942После сбоя Claude может [предложить повторно запустить команду вне песочницы](#the-unsandboxed-retry-escape-hatch). Одобрите эту повторную попытку или запустите команду git самостоятельно в другом терминале. Если вы установили `allowUnsandboxedCommands` в `false`, Claude не может предложить повторную попытку, поэтому запустите команду самостоятельно.
943
944<h3 id="bubblewrap-fails-to-start-inside-a-container">
945 Bubblewrap не запускается внутри контейнера
946</h3>
947
948В непривилегированном контейнере [bubblewrap](#os-level-enforcement) не может смонтировать новую файловую систему `/proc`, поэтому изолированные команды завершаются ошибкой `bwrap`, например `Can't mount proc on /newroot/proc: Operation not permitted`. Установите [`enableWeakerNestedSandbox`](/docs/ru/settings-reference#sandbox-enableweakernestedsandbox) в `true`, чтобы песочница вместо этого выполняла bind-монтирование существующего `/proc` контейнера. Используйте эту настройку только тогда, когда внешний контейнер уже обеспечивает нужную вам границу изоляции, так как она раскрывает изолированным командам информацию о процессах, которую скрыло бы новое монтирование `/proc`.
949
950<h3 id="0-byte-read-only-files-appear-at-claude-settings-paths-and-yes-and-don’t-ask-again-doesn’t-save">
951 В путях настроек `.claude` появляются файлы размером 0 байт только для чтения, и «Да, и больше не спрашивать» не сохраняется
952</h3>
953
954На Linux и WSL2 песочница удерживает запрет на запись в ещё не существующий файл, создавая там 0-байтовый заполнитель только для чтения, пока выполняется изолированная команда. После этого песочница удаляет заполнитель. Если сессия принудительно завершается до выполнения этой очистки, например по SIGKILL, заполнители остаются. Последующие сессии при каждом запуске снова монтируют их только для чтения, поэтому запись настроек, например сохранение выбора разрешения, не выполняется там, где остаётся такой заполнитель.
955
956Запустите `claude doctor` в терминале, чтобы перечислить оставшиеся файлы заполнителей. Предупреждение [`Stale sandbox mask files left by a killed session`](/docs/ru/errors#stale-sandbox-mask-files-left-by-a-killed-session) называет некоторые из них и подсчитывает остальные. Удалите каждый файл с помощью `rm`, пока в этом проекте не запущена другая сессия Claude Code. До версии 2.1.257 Claude Code оставлял те же заполнители, не помечая их.
957
958<h3 id="git-over-ssh-fails-with-the-sandbox-on">
959 `git` через SSH не работает при включённой песочнице
960</h3>
961
962На macOS `git fetch`, `git pull` и `git push` для удалённого репозитория по SSH не выполняются внутри песочницы, даже если хост разрешён. На Linux и WSL2 они работают, как только хост разрешён. Claude Code туннелирует SSH-соединение git через [прокси песочницы](#network-isolation), а туннель на macOS не может пройти аутентификацию на этом прокси.
963
964На Linux и WSL2 проверьте следующее, если соединение по-прежнему не устанавливается:
965
966* **Хост разрешён на порту 22**: это покрывает запись `allowedDomains` без порта, например `"git.example.com"`
967* **Ваш корпоративный прокси разрешает порт 22**: если ваша сеть требует вышестоящего прокси, туннель также проходит через него
968* **Ключ доступен для чтения как файл**: песочница может блокировать сокет `ssh-agent`, а запись `denyRead` или `credentials` для `~/.ssh` скрывает ваши файлы ключей
969
970На macOS переключите удалённый репозиторий на HTTPS, для чего нужны учётные данные HTTPS, например персональный токен доступа:
971
972```bash theme={null}
973git remote set-url origin https://git.example.com/example-org/example-repo.git
974```
975
976Если вам нужно сохранить удалённый репозиторий по SSH, выведите сетевые команды git из песочницы с помощью [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands):
977
978```json theme={null}
979{
980 "sandbox": {
981 "excludedCommands": ["git fetch *", "git pull *", "git push *"]
982 }
983}
984```
985
986Эти записи соответствуют `git push origin main`. Вызов, который добавляет `cd`, использует `git -C` или содержит подстановку команды, остаётся в песочнице. Исключённые команды git могут обращаться к любому хосту, а не только к указанным в `allowedDomains`.
987
988Обычные `ssh`, `scp` и `rsync` через SSH не работают по причине, указанной в [пункте о клиентах баз данных](#a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host).
989
990<h3 id="a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host">
991 Клиент базы данных или другой не-HTTP инструмент не может подключиться к разрешённому хосту
992</h3>
993
994Инструмент, который игнорирует переменные окружения прокси, не может подключиться изнутри песочницы даже к хосту из `allowedDomains`. У изолированной команды [нет прямого маршрута в сеть](#network-isolation), поэтому инструмент, открывающий собственное соединение, завершается сбоем. Так ведут себя большинство драйверов баз данных, обычный `ssh` и инструменты, использующие UDP.
995
996Сбой выглядит как ошибка сети или разрешения имён:
997
998* **macOS**: `Operation not permitted` или ошибка разрешения имён, например `Could not resolve host`
999* **Linux и WSL2**: `Network is unreachable` или ошибка разрешения имён, например `Temporary failure in name resolution`
1000
1001Инструмент, который использует прокси, завершается сбоем иначе, если его хост не разрешён. Вы получаете запрос на доступ к сети, или инструмент получает от прокси ответ `403`.
1002
1003Чтобы инструмент мог подключиться, запустите команду, которой он нужен, вне песочницы с помощью [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands). В этом примере исключается один скрипт и добавляется [правило ask](/docs/ru/permissions), чтобы вы одобряли каждый запуск:
1004
1005```json theme={null}
1006{
1007 "sandbox": {
1008 "excludedCommands": ["python scripts/load_orders.py *"]
1009 },
1010 "permissions": {
1011 "ask": ["Bash(python scripts/load_orders.py *)"]
1012 }
1013}
1014```
1015
1016Скрипт выполняется с вашим полным доступом, а Claude может редактировать скрипт, находящийся в вашем рабочем каталоге, поэтому проверяйте его при появлении запроса.
1017
1018<h3 id="a-command-fails-to-reach-a-server-on-localhost">
1019 Команда не может подключиться к серверу на localhost
1020</h3>
1021
1022По умолчанию изолированная команда не может напрямую подключиться к серверу, запущенному на вашем компьютере вне песочницы, например к dev-серверу или базе данных в контейнере. Что можно изменить, зависит от вашей платформы:
746 1023
747* **Команды не выполняются с ошибкой host-not-allowed**: многие инструменты CLI должны достичь определённых хостов. Предоставление разрешения при запросе добавляет хост в ваш список разрешённых, поэтому инструмент выполняется внутри sandbox в будущем.1024* **macOS**: установите [`network.allowLocalBinding`](/docs/ru/settings-reference#sandbox-network-allowlocalbinding) в `true`. Тогда изолированные команды смогут прослушивать сетевые порты и подключаться к любому порту на localhost, включая все остальные сервисы, которые там слушают. Сервис на localhost, не требующий аутентификации, например отладчик, сможет действовать от имени команды вне песочницы, а команда, прослушивающая адрес, отличный от loopback, будет принимать соединения с других машин
748* **`jest` зависает или не выполняется**: `watchman` несовместим с sandbox. Вместо этого запустите `jest --no-watchman`.1025* **Linux и WSL2**: `localhost` изолированной команды является приватным для этой команды. Команда может прослушивать порт и обращаться к серверам, которые она запустила сама. Прямое подключение к `localhost` или `127.0.0.1` не достигает серверов на хосте, а `allowLocalBinding` не действует. Запустите команду, которой нужен сервер хоста, вне песочницы с помощью [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands), где у неё нет ограничений файловой системы и сети. О соединениях, проходящих через прокси песочницы, см. [Имена хостов, разрешающиеся в локальные адреса](#hostnames-that-resolve-to-local-addresses)
749* **Go-based CLIs не выполняют проверку TLS на macOS**: инструменты, такие как `gh`, `gcloud` и `terraform`, могут не выполнять проверку TLS под Seatbelt. Перечислите эти инструменты в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands). Если вы используете `httpProxyPort` с MITM прокси и пользовательским CA, установите [`enableWeakerNetworkIsolation`](/docs/ru/settings-reference#sandbox-enableweakernetworkisolation) в `true` вместо этого.
750* **`open`, `osascript` или потоки аутентификации на основе браузера не выполняются с ошибкой `-600` на macOS**: sandbox по умолчанию блокирует Apple Events. Установите [`allowAppleEvents`](/docs/ru/settings-reference#sandbox-allowappleevents) в `true` в ваших пользовательских, управляемых или CLI параметрах, чтобы разрешить их. Параметры проекта игнорируются для этого ключа. Включение его удаляет изоляцию выполнения кода, так как изолированные команды могут затем запускать другие приложения без изоляции без запроса пользователя и отправлять команды AppleScript запущенным приложениям, подлежащим запросу автоматизации macOS (TCC). Кроме того, добавьте команду в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands).
751* **Команды `docker` не выполняются**: `docker` несовместим с sandbox. Добавьте `docker *` в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands).
752* **`pbcopy`, `xclip` или `wl-copy` не обновляют буфер обмена**: эти утилиты буфера обмена могут не достичь системного буфера обмена изнутри sandbox, в этом случае текст, переданный в них, не поступает.
753 1026
754 Чтобы поместить вывод Claude в ваш буфер обмена, попросите Claude напечатать его в своём ответе, затем запустите [`/copy`](/docs/ru/commands). `/copy` записывает в буфер обмена из процесса Claude Code, а не из изолированной команды.1027В этом примере настройка включается для macOS:
755 1028
756 Когда Claude передаёт текст одному из этих инструментов, добавление инструмента в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands) не выводит этот вызов из sandbox самостоятельно.1029```json theme={null}
757* **Команда git не выполняется с ошибкой `unable to unlink old`**: `git merge`, `git checkout` и подобные команды не выполняются таким образом, когда им нужно заменить файл, в который sandbox запрещает запись, независимо от того, находится ли этот файл под [защищённым путём](#protected-paths), таким как `.claude/skills`, под одной из ваших записей `denyWrite` или вне каталогов, в которые sandbox позволяет командам писать вообще. На Linux и WSL2 ошибка заканчивается на `Read-only file system`.1030{
1031 "sandbox": {
1032 "network": {
1033 "allowLocalBinding": true
1034 }
1035 }
1036}
1037```
1038
1039Запись `allowedDomains` для `localhost` применяется к соединениям, проходящим через прокси, поэтому она не влияет на прямое подключение. Claude Code задаёт `NO_PROXY` для изолированных команд, чтобы они подключались к `localhost` напрямую, а не через прокси. Кроме того, эта запись открывает все порты localhost вашего компьютера для команды, которая всё же использует прокси. Об имени хоста для разработки, указывающем на `127.0.0.1`, см. [Разрешённое имя хоста отклоняется с `resolved to a loopback address`](#an-allowed-hostname-is-refused-with-resolved-to-a-loopback-address).
1040
1041<h3 id="an-allowed-hostname-is-refused-with-resolved-to-a-loopback-address">
1042 Разрешённое имя хоста отклоняется с `resolved to a loopback address`
1043</h3>
1044
1045Прокси песочницы отклоняет разрешённое имя хоста, которое [разрешается в локальный адрес](#hostnames-that-resolve-to-local-addresses); это затрагивает имена для разработки, такие как `myapp.test`, указывающие на `127.0.0.1`. Команда получает ответ `403`, тело которого называет тип адреса, например `Connection to myapp.test blocked: resolved to a loopback address`.
1046
1047Добавьте IP-адрес, в который разрешается имя, рядом с именем хоста в `allowedDomains`, каждый с портом, который прослушивает ваш сервер:
1048
1049```json theme={null}
1050{
1051 "sandbox": {
1052 "network": {
1053 "allowedDomains": ["myapp.test:3000", "127.0.0.1:3000"]
1054 }
1055 }
1056}
1057```
758 1058
759 После сбоя Claude может [предложить повторно запустить команду вне sandbox](#the-unsandboxed-retry-escape-hatch); одобрите этот повтор или запустите команду git самостоятельно в другом терминале. Если вы установили `allowUnsandboxedCommands` в `false`, Claude не может предложить повтор, поэтому запустите команду самостоятельно. Если одна и та же команда git часто не выполняется, добавьте её в [`excludedCommands`](/docs/ru/settings-reference#sandbox-excludedcommands).1059Запись IP-адреса без порта позволяет изолированным командам обращаться ко всем сервисам, прослушивающим этот адрес.
760* **Bubblewrap не запускается внутри контейнера**: в непривилегированном контейнере bubblewrap не может смонтировать свежую файловую систему `/proc`, поэтому изолированные команды не выполняются с ошибкой `bwrap`, такой как `Can't mount proc on /newroot/proc: Operation not permitted`. Установите [`enableWeakerNestedSandbox`](/docs/ru/settings-reference#sandbox-enableweakernestedsandbox) в `true`, чтобы внутренний sandbox привязал существующий `/proc` контейнера вместо этого. Используйте этот параметр только когда внешний контейнер уже обеспечивает границу изоляции, которая вам требуется, так как это раскрывает информацию о процессе для изолированных команд, которую свежее монтирование `/proc` скрыло бы.
761* **Файлы размером 0 байт только для чтения появляются в путях параметров `.claude`, и "Да, и больше не спрашивать" не сохраняется**: на Linux и WSL2 sandbox удерживает запрет на запись в файл, который ещё не существует, создавая 0-байтовый заполнитель только для чтения там, пока выполняется изолированная команда. Sandbox удаляет заполнитель после этого. Если сеанс завершается до выполнения этой очистки, например по SIGKILL, заполнители остаются. Более поздние сеансы привязывают их только для чтения снова при каждом запуске, поэтому запись параметров, такая как сохранение выбора разрешения, не выполняется там, где она находится.
762 1060
763 Запустите `claude doctor`, чтобы перечислить оставшиеся файлы заполнителей. Предупреждение [`Stale sandbox mask files left by a killed session`](/docs/ru/errors#stale-sandbox-mask-files-left-by-a-killed-session) называет до трёх из них и подсчитывает остальные. Удалите каждый файл с помощью `rm`, пока в этом проекте не запущен другой сеанс Claude Code. До версии 2.1.257 Claude Code оставлял те же заполнители без их отмечания.1061До версии 2.1.284 прокси подключался к любому адресу, в который разрешалось разрешённое имя хоста.
764* **`--dangerously-skip-permissions` не выполняется как root**: этот флаг блокируется при запуске как root или через sudo на Linux и macOS, потому что доступ root в сочетании с отсутствием запросов разрешений может изменять любой файл или сервис в системе. Проверка автоматически пропускается внутри признанного sandbox. Чтобы запустить автономно в контейнере, используйте конфигурацию [dev container](/docs/ru/devcontainer), которая запускает Claude Code как непривилегированного пользователя.1062
1063<h3 id="/sandbox-fails-with-sandbox-settings-are-overridden-by-a-higher-priority-configuration">
1064 `/sandbox` завершается ошибкой `Sandbox settings are overridden by a higher-priority configuration`
1065</h3>
1066
1067`/sandbox` выводит `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.` вместо открытия своей панели, когда более высокий [уровень настроек](/docs/ru/settings#settings-precedence) задаёт `sandbox.enabled`, `sandbox.autoAllowBashIfSandboxed` или `sandbox.allowUnsandboxedCommands`. Панель сохраняет ваш выбор в `.claude/settings.local.json`, а сохранённое там значение не может переопределить эти уровни.
1068
1069Управляемые настройки и `--settings` имеют более высокий приоритет, чем локальные настройки. Чтобы узнать, какие из них загружены в этой сессии, запустите `/status` и посмотрите строку `Setting sources`:
1070
1071* **`Command line arguments`**: если вы запустили Claude Code с [`--settings`](/docs/ru/settings#change-a-setting-for-one-session), проверьте, задаёт ли переданный файл или JSON один из этих ключей. Если да, измените значение там или запустите Claude Code заново без этих ключей.
1072* **`Enterprise managed settings`**: загружены управляемые настройки вашей организации. Если они задают один из этих ключей, вы не можете изменить его ни через `/sandbox`, ни через какой-либо файл настроек, которым вы управляете, поэтому обратитесь к администратору.
765 1073
766<h2 id="limitations">1074<h2 id="limitations">
767 Ограничения1075 Ограничения
776* **Фильтрация сети**: sandbox ограничивает домены, к которым процессы могут подключаться. По умолчанию встроенный прокси не завершает и не проверяет TLS исходящего трафика, поэтому содержимое зашифрованных соединений не проверяется. Экспериментальный параметр [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate) завершает TLS на прокси для [подстановки учётных данных `mask`](#mask-credentials), но не добавляет фильтрацию содержимого. Вы несёте ответственность за обеспечение того, чтобы в вашей политике разрешались только доверенные домены.1084* **Фильтрация сети**: sandbox ограничивает домены, к которым процессы могут подключаться. По умолчанию встроенный прокси не завершает и не проверяет TLS исходящего трафика, поэтому содержимое зашифрованных соединений не проверяется. Экспериментальный параметр [`network.tlsTerminate`](/docs/ru/settings-reference#sandbox-network-tlsterminate) завершает TLS на прокси для [подстановки учётных данных `mask`](#mask-credentials), но не добавляет фильтрацию содержимого. Вы несёте ответственность за обеспечение того, чтобы в вашей политике разрешались только доверенные домены.
777 1085
778<Warning>1086<Warning>
779 Разрешение широких доменов, таких как `github.com`, может создать пути для экспортирования данных. Потому что прокси принимает решение о разрешении на основе предоставленного клиентом имени хоста без проверки TLS, код, работающий внутри sandbox, потенциально может использовать [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) или аналогичные методы для достижения хостов вне списка разрешений. Если ваша модель угроз требует более сильных гарантий, настройте [пользовательский прокси](#custom-proxy-configuration), который завершает TLS и проверяет трафик, и установите его сертификат CA внутри sandbox. Более сильная изоляция сети, осведомлённая о TLS, является активной областью разработки.1087 Разрешение широких доменов, таких как `github.com`, может создать пути для экспортирования данных. Потому что прокси принимает решение о разрешении на основе предоставленного клиентом имени хоста без проверки TLS, код, работающий внутри sandbox, потенциально может использовать [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) или аналогичные методы для достижения хостов вне списка разрешённых доменов. Если ваша модель угроз требует более сильных гарантий, настройте [пользовательский прокси](#custom-proxy-configuration), который завершает TLS и проверяет трафик, и установите его сертификат CA внутри sandbox. Более сильная изоляция сети, осведомлённая о TLS, является активной областью разработки.
780</Warning>1088</Warning>
781 1089
782* **Повышение привилегий через Unix sockets**: конфигурация `allowUnixSockets` может случайно предоставить доступ к системным сервисам, которые могут привести к обходам sandbox. Например, разрешение доступа к `/var/run/docker.sock` фактически предоставляет доступ к хост-системе через сокет Docker. Тщательно рассмотрите любые Unix sockets, которые вы разрешаете через sandbox.1090* **Повышение привилегий через Unix sockets**: конфигурация `allowUnixSockets` может случайно предоставить доступ к системным сервисам, которые могут привести к обходам sandbox. Например, разрешение доступа к `/var/run/docker.sock` фактически предоставляет доступ к хост-системе через сокет Docker. Тщательно рассмотрите любые Unix sockets, которые вы разрешаете через sandbox.
783* **Повышение привилегий разрешений файловой системы**: чрезмерно широкие разрешения на запись в файловую систему могут включить атаки повышения привилегий. Разрешение записи в каталоги, содержащие исполняемые файлы в `$PATH`, каталоги конфигурации системы или файлы конфигурации оболочки пользователя, такие как `.bashrc` или `.zshrc`, может привести к выполнению кода в разных контекстах безопасности, когда другие пользователи или системные процессы получают доступ к этим файлам.1091* **Повышение привилегий разрешений файловой системы**: чрезмерно широкие разрешения на запись в файловую систему могут включить атаки повышения привилегий. Разрешение записи в каталоги, содержащие исполняемые файлы в `$PATH`, каталоги конфигурации системы или файлы конфигурации оболочки пользователя, такие как `.bashrc` или `.zshrc`, может привести к выполнению кода в разных контекстах безопасности, когда другие пользователи или системные процессы получают доступ к этим файлам.
784* **Сила Linux sandbox**: реализация Linux обеспечивает сильную изоляцию файловой системы и сети, но включает режим `enableWeakerNestedSandbox`, который позволяет ему работать внутри окружений Docker без привилегированных пространств имён или на хостах Linux, где непривилегированные пользовательские пространства имён отключены sysctl. Эта опция значительно ослабляет безопасность и должна использоваться только когда дополнительная изоляция иным образом применяется.1092* **Сила Linux sandbox**: реализация Linux обеспечивает сильную изоляцию файловой системы и сети, но включает режим `enableWeakerNestedSandbox`, который позволяет ему работать внутри окружений Docker без привилегированных пространств имён. Эта опция значительно ослабляет безопасность и должна использоваться только когда дополнительная изоляция иным образом применяется.
785* **Apple Events на macOS**: sandbox на macOS по умолчанию блокирует Apple Events. Параметр `allowAppleEvents` снимает это ограничение, чтобы инструменты, такие как `open` и `osascript`, работали, но он удаляет изоляцию выполнения кода: изолированные команды могут запускать другие приложения без изоляции без запроса пользователя и могут отправлять команды AppleScript запущенным приложениям, в соответствии с запросом согласия на автоматизацию macOS для каждого приложения (TCC). Это учитывается только из пользовательских, управляемых или CLI параметров. Параметры проекта не могут включить это.1093* **Apple Events на macOS**: sandbox на macOS по умолчанию блокирует Apple Events. Параметр `allowAppleEvents` снимает это ограничение, чтобы инструменты, такие как `open` и `osascript`, работали, но он удаляет изоляцию выполнения кода: изолированные команды могут запускать другие приложения без изоляции без запроса пользователя и могут отправлять команды AppleScript запущенным приложениям, в соответствии с запросом согласия на автоматизацию macOS для каждого приложения (TCC). Это учитывается только из пользовательских, управляемых или CLI параметров. Параметры проекта не могут включить это.
786 1094
787<h3 id="platform-and-tool-compatibility">
788 Совместимость платформ и инструментов
789</h3>
790
791* **Поддержка платформ**: поддерживает macOS, Linux и WSL2. WSL1 и нативная Windows не поддерживаются.
792* **Накладные расходы производительности**: минимальные, но некоторые операции файловой системы могут быть немного медленнее.
793* **Совместимость инструментов**: некоторые инструменты, требующие определённых шаблонов доступа к системе, могут потребовать корректировки конфигурации или могут потребовать запуска вне sandbox.
794
795<h3 id="scope">1095<h3 id="scope">
796 Область1096 Область действия
797</h3>1097</h3>
798 1098
799Sandbox изолирует подпроцессы Bash. Другие инструменты работают в разных границах:1099Песочница изолирует shell-команды и их дочерние процессы. В разделе [Что работает вне песочницы](#what-runs-outside-the-sandbox) перечислены инструменты и вспомогательные процессы, которые она не охватывает. Использование компьютера и субагенты связаны с песочницей следующим образом:
800 1100
801* **Встроенные инструменты файлов**: Read, Edit и Write используют систему разрешений напрямую, а не работают через sandbox. См. [permissions](/docs/ru/permissions).
802* **Использование компьютера**: когда Claude открывает приложения и управляет вашим экраном, он работает на вашем фактическом рабочем столе, а не в изолированной среде. Запросы разрешений для каждого приложения контролируют каждое приложение. См. [computer use in the CLI](/docs/ru/computer-use) или [computer use in Desktop](/docs/ru/desktop#let-claude-use-your-computer).1101* **Использование компьютера**: когда Claude открывает приложения и управляет вашим экраном, он работает на вашем фактическом рабочем столе, а не в изолированной среде. Запросы разрешений для каждого приложения контролируют каждое приложение. См. [computer use in the CLI](/docs/ru/computer-use) или [computer use in Desktop](/docs/ru/desktop#let-claude-use-your-computer).
803* **Переменные окружения**: изолированные команды Bash наследуют окружение родительского процесса по умолчанию, включая любые учётные данные, установленные там. Используйте [`sandbox.credentials`](#protect-credentials) для удаления или маскирования определённых переменных для изолированных команд или установите [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ru/env-vars) для удаления учётных данных из всех подпроцессов.1102* **Субагенты**: [субагенты](/docs/ru/sub-agents) работают в том же процессе, что и родительская сессия, и используют ту же конфигурацию sandbox. Команды Bash внутри субагента изолированы, когда изоляция в песочнице включена в родительской сессии.
804* **Subagents**: [subagents](/docs/ru/sub-agents) работают в том же процессе, что и родительский сеанс, и используют ту же конфигурацию sandbox. Команды Bash внутри subagent изолированы, когда sandboxing включен в родительском сеансе.1103* **Моды**: [мод](/docs/ru/plugins/mods/overview) — это плагин, который запускает собственный код внутри Claude Code, и процесс, запущенный модом, работает вне песочницы. См. [Что доступно моду](/docs/ru/plugins/mods/overview#what-a-mod-can-reach).
805 1104
806<Warning>1105<Warning>
807 Эффективный sandboxing требует как изоляции файловой системы, так и сетевой изоляции. Без сетевой изоляции скомпрометированный агент может экспортировать конфиденциальные файлы, такие как ключи SSH. Без изоляции файловой системы, будь то из-за разрешительной политики или из-за [отключения уровня файловой системы](#disable-filesystem-isolation), скомпрометированный агент может установить бэкдор в системные ресурсы для получения сетевого доступа. Когда вы расширяете значения по умолчанию, проверьте, что путь `allowWrite`, широкая запись `allowedDomains` или исключение `excludedCommands` не отменяет ограничение на другой стороне.1106 Эффективная изоляция в песочнице требует как изоляции файловой системы, так и сетевой изоляции. Без сетевой изоляции скомпрометированный агент может экспортировать конфиденциальные файлы, такие как ключи SSH. Без изоляции файловой системы, будь то из-за разрешительной политики или из-за [отключения уровня файловой системы](#disable-filesystem-isolation), скомпрометированный агент может установить бэкдор в системные ресурсы для получения сетевого доступа. Когда вы расширяете значения по умолчанию, проверьте, что путь `allowWrite`, широкая запись `allowedDomains` или исключение `excludedCommands` не отменяет ограничение на другой стороне.
808</Warning>1107</Warning>
809 1108
810<h2 id="see-also">1109<h2 id="see-also">