#Разрешения, области настроек и песочница
Средний уровень · Урок 4 из 8 · около 20 минут · Нужно: Организуйте память проекта и посмотрите, что загрузилось · Сверено с Claude Code v2.1.285 (stable) 06.10.2026
#Цель
К концу урока вы сможете положить правило разрешений в файл настроек с подходящей областью действия, увидеть, какие правила действуют, и включить песочницу, чтобы команды оболочки, которые запускает Claude, не могли писать за пределами проекта, временной папки и добавленных вами папок.
#Что понадобится
- Ваша копия шаблона для практики — для разбора примера — с Node.js LTS: проверка запускается из неё. Один из ваших репозиториев с командой запуска тестов — для задания «Ваша очередь»; или используйте копию шаблона в обеих ролях.
- macOS, Linux или WSL 2. В Linux и WSL 2 песочнице нужны
bubblewrapиsocat(Set up Linux and WSL2); в Codespace на копии шаблона есть и то и другое. - Расход лимита: небольшой.
#Идея
Claude Code читает настройки из четырёх файлов, и от файла, в который попадает правило, зависит, на кого оно действует (Settings):
| Файл | На кого действует | Что сюда класть |
|---|---|---|
~/.claude/settings.json |
На вас, во всех проектах | Ваши личные предпочтения |
.claude/settings.json, закоммиченный |
На всех в проекте | Правила команды: файлы, которые Claude не должен читать никогда, команды, которые запускают все |
.claude/settings.local.json, вне git |
На вас, в этом проекте | Ваши личные исключения. Ответ «Yes, and don't ask again» на Bash-команду сохраняется сюда |
| Управляемые настройки (managed) | На всех, кому их раздаёт ваша организация | Политика, которую ваши настройки не могут переопределить, кроме нескольких ключей безопасности, где побеждает более строгое значение |
Если один и тот же ключ задан в нескольких местах, побеждает более высокий уровень: управляемые настройки, затем командная строка, затем локальные, затем общие проектные, затем пользовательские (Settings precedence). Списки правил вроде permissions.allow, напротив, объединяются по всем файлам. Среди правил сначала проверяется deny, затем ask, затем allow, и решает первое совпадение (Configure permissions).
Правила разрешений управляют инструментами Claude. Песочница добавляет вокруг команд оболочки, которые запускает Claude, границу, которую обеспечивает операционная система: по умолчанию они могут писать только в проект, во временную папку пользователя и в папки, добавленные через --add-dir или /add-dir, а в сеть выходят только через прокси, сверяющий каждый хост со списком разрешённых. Пока вы её не включите, она выключена. В режиме auto-allow команда, выполняемая внутри песочницы, не требует подтверждения.
#Разбор примера
В своей копии для практики:
- Запустите
claudeи выполните/status. СтрокаSetting sourcesперечисляет файлы настроек, которые загрузила эта сессия. - Сохраните правила команды в
.claude/settings.json. Это правила из документации, не пускающие Claude к файлам.env(Exclude sensitive files), плюс команда запуска тестов:
{
"permissions": {
"allow": ["Bash(npm test)"],
"deny": ["Read(./.env)", "Read(./.env.*)"]
}
}
Claude Code перезагружает файл настроек, когда тот меняется (When edits take effect). Выполните /permissions: среди правил allow будет Bash(npm test), а среди правил deny — два правила Read.
3. Попросите Claude: Run npm test. Команда выполнится без запроса разрешения: её покрывает правило allow.
4. Включите песочницу. Выполните /sandbox и на вкладке Mode выберите auto-allow. Claude Code сохранит настройку в .claude/settings.local.json — ваш личный файл (Get started).
5. Попросите Claude попробовать записать что-то за пределами проекта:
Run this exact command and show me its output: touch ~/sandbox-probe
Команда запустится без запроса и завершится ошибкой: Operation not permitted в macOS, Read-only file system в Linux и WSL 2 (Confirm commands run inside the sandbox). Если Claude предложит повторить вне песочницы, откажитесь.
#Ваша очередь
Настройте такое же разделение в своём репозитории.
- Сохраните этот незаконченный файл как
.claude/settings.jsonи замените каждыйTODOправилом. Разрешите только одну команду, запускающую ваши тесты, напримерBash(npm test)илиBash(pytest):
{
"permissions": {
"allow": ["TODO: the command that runs your tests"],
"deny": ["TODO: reading .env", "TODO: reading .env.local and the other .env.* files"]
}
}
- Закоммитьте его: это правила для всех, кто работает в репозитории.
- В сессии там же включите песочницу через
/sandboxв режиме auto-allow и повторите шаг 5 из разбора примера. - Выполните
git status..claude/settings.local.jsonв списке нет: Claude Code при создании исключает его из git (Keep personal settings out of a repository).
#Проверка
Урок пройден, когда выполнено всё это:
- Закоммиченный
.claude/settings.jsonзапрещает читать файлы.envи.env.*и разрешает одну команду тестов:git show HEAD:.claude/settings.json | jq .permissionsих показывает. - Песочница включена, а ваш личный файл не попадает в git:
jq .sandbox .claude/settings.local.jsonпоказывает"enabled": true, аgit ls-files .claude/settings.local.jsonничего не выводит. - Самопроверка (не тестируется): команда Claude
touch ~/sandbox-probeзавершилась ошибкой, не спросив вас.
Запустите npm run check -- i-4 --dir <your repo> из своей копии для практики или npm run check -- i-4 в самой копии.
Если первый пункт не проходит из-за слишком широкого правила, замените его одной конкретной командой: Bash(npm *) позволил бы Claude запускать любую npm-команду без спроса. Если /sandbox показывает только вкладку Dependencies, установите bubblewrap и socat, перезапустите Claude Code и снова выполните /sandbox.
#Осторожно
- Песочница оборачивает только команды оболочки. Файловые и веб-инструменты Claude работают вне её и подчиняются вашим правилам разрешений; хуки и локальные MCP-серверы работают вне её с вашими полными правами (What runs outside the sandbox). Если песочница не может запуститься, Claude Code выполняет команды без неё, если только
sandbox.failIfUnavailableне равенtrue. - Само по себе правило deny для
Readраспространяется на файловые инструменты Claude и на файловые команды в Bash, которые Claude Code распознаёт, напримерcat, но не на скрипт, который сам открывает файлы (Read and Edit). При включённой песочнице Claude Code также добавляет ваши запрещённые дляReadпути вfilesystem.denyReadпесочницы, так что ни команды в песочнице, ни запущенные ими процессы тоже не смогут прочитать эти файлы. - Если в Codespace или другом контейнере команды в песочнице падают с
Can't mount proc on /newroot/proc, смотрите Bubblewrap fails to start inside a container.
#Что дальше
- How we built Claude Code auto mode: Anthropic о том, что ловит классификатор режима auto, а что пропускает.
- Making Claude Code more secure and autonomous with sandboxing: почему у песочницы есть граница файловой системы и граница сети.
- Security: как сочетаются механизмы защиты Claude Code.
Источники: Settings files and precedence · All settings · Configure permissions · Configure the sandboxed Bash tool
← Выбор модели и уровня усилий · Оглавление Среднего уровня · Закрепите правило хуком → · Тема: Разрешения и безопасность · Застряли на уроке?