Перейти к основному содержанию
Claude Code поддерживает детальные разрешения, позволяя вам точно указать, что агент может делать и что он не может. Параметры разрешений можно добавить в систему контроля версий и распространить среди всех разработчиков в вашей организации, а также настроить отдельными разработчиками.

Система разрешений

Claude Code использует многоуровневую систему разрешений для баланса между мощностью и безопасностью:
Тип инструментаПримерТребуется одобрениеПоведение “Да, не спрашивать снова”
Только чтениеЧтение файлов, GrepНетН/А
Bash командыВыполнение оболочкиДаПостоянно для каждого каталога проекта и команды
Изменение файловРедактирование/запись файловДаДо конца сеанса

Управление разрешениями

Вы можете просматривать и управлять разрешениями инструментов Claude Code с помощью /permissions. Этот интерфейс отображает все правила разрешений и файлы settings.json, из которых они берутся.
  • Правила Allow позволяют Claude Code использовать указанный инструмент без ручного одобрения.
  • Правила Ask запрашивают подтверждение каждый раз, когда Claude Code пытается использовать указанный инструмент.
  • Правила Deny предотвращают использование Claude Code указанного инструмента.
Правила оцениваются по порядку: deny -> ask -> allow. Первое совпадающее правило побеждает, поэтому правила deny всегда имеют приоритет.

Режимы разрешений

Claude Code поддерживает несколько режимов разрешений, которые контролируют, как инструменты одобряются. Установите defaultMode в ваших файлах параметров:
РежимОписание
defaultСтандартное поведение: запрашивает разрешение при первом использовании каждого инструмента
acceptEditsАвтоматически принимает разрешения на редактирование файлов для сеанса
planPlan Mode: Claude может анализировать, но не может изменять файлы или выполнять команды
dontAskАвтоматически отклоняет инструменты, если они не предварительно одобрены через /permissions или правила permissions.allow
bypassPermissionsПропускает все запросы разрешений (требует безопасной среды, см. предупреждение ниже)
Режим bypassPermissions отключает все проверки разрешений. Используйте это только в изолированных средах, таких как контейнеры или виртуальные машины, где Claude Code не может причинить вред. Администраторы могут предотвратить этот режим, установив disableBypassPermissionsMode на "disable" в управляемых параметрах.

Синтаксис правил разрешений

Правила разрешений следуют формату Tool или Tool(specifier).

Совпадение всех использований инструмента

Чтобы совпадать со всеми использованиями инструмента, используйте только имя инструмента без скобок:
ПравилоЭффект
BashСовпадает со всеми Bash командами
WebFetchСовпадает со всеми запросами веб-выборки
ReadСовпадает со всеми чтениями файлов
Bash(*) эквивалентен Bash и совпадает со всеми Bash командами.

Используйте спецификаторы для детального контроля

Добавьте спецификатор в скобках, чтобы совпадать с конкретными использованиями инструмента:
ПравилоЭффект
Bash(npm run build)Совпадает с точной командой npm run build
Read(./.env)Совпадает с чтением файла .env в текущем каталоге
WebFetch(domain:example.com)Совпадает с запросами выборки на example.com

Шаблоны подстановочных символов

Правила Bash поддерживают glob-шаблоны с *. Подстановочные символы могут появляться в любой позиции команды. Эта конфигурация позволяет npm и git commit команды, блокируя git push:
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(git * main)",
      "Bash(* --version)",
      "Bash(* --help *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}
Пробел перед * имеет значение: Bash(ls *) совпадает с ls -la, но не с lsof, в то время как Bash(ls*) совпадает с обоими. Устаревший синтаксис суффикса :* эквивалентен *, но является устаревшим.

Правила разрешений для конкретных инструментов

Bash

Правила разрешений Bash поддерживают сопоставление подстановочных символов с *. Подстановочные символы могут появляться в любой позиции команды, включая начало, середину или конец:
  • Bash(npm run build) совпадает с точной Bash командой npm run build
  • Bash(npm run test *) совпадает с Bash командами, начинающимися с npm run test
  • Bash(npm *) совпадает с любой командой, начинающейся с npm
  • Bash(* install) совпадает с любой командой, заканчивающейся на install
  • Bash(git * main) совпадает с командами, такими как git checkout main, git merge main
Когда * появляется в конце с пробелом перед ним (например Bash(ls *)), это обеспечивает границу слова, требуя, чтобы префиксу предшествовал пробел или конец строки. Например, Bash(ls *) совпадает с ls -la, но не с lsof. В отличие от этого, Bash(ls*) без пробела совпадает с обоими ls -la и lsof, потому что нет ограничения границы слова.
Claude Code осведомлен об операторах оболочки (например &&), поэтому правило сопоставления префикса, такое как Bash(safe-cmd *), не даст ему разрешение на выполнение команды safe-cmd && other-cmd.
Шаблоны разрешений Bash, которые пытаются ограничить аргументы команды, хрупкие. Например, Bash(curl http://github.com/ *) предназначен для ограничения curl на URL-адреса GitHub, но не будет совпадать с вариациями, такими как:
  • Опции перед URL: curl -X GET http://github.com/...
  • Другой протокол: curl https://github.com/...
  • Перенаправления: curl -L http://bit.ly/xyz (перенаправляет на github)
  • Переменные: URL=http://github.com && curl $URL
  • Дополнительные пробелы: curl http://github.com
Для более надежной фильтрации URL рассмотрите:
  • Ограничение сетевых инструментов Bash: используйте правила deny для блокировки curl, wget и подобных команд, затем используйте инструмент WebFetch с разрешением WebFetch(domain:github.com) для разрешенных доменов
  • Использование PreToolUse hooks: реализуйте hook, который проверяет URL-адреса в Bash командах и блокирует недопустимые домены
  • Инструктирование Claude Code о ваших разрешенных curl шаблонах через CLAUDE.md
Обратите внимание, что использование только WebFetch не предотвращает сетевой доступ. Если Bash разрешен, Claude все еще может использовать curl, wget или другие инструменты для доступа к любому URL-адресу.

Read и Edit

Правила Edit применяются ко всем встроенным инструментам, которые редактируют файлы. Claude прилагает наилучшие усилия для применения правил Read ко всем встроенным инструментам, которые читают файлы, таким как Grep и Glob. Правила Read и Edit следуют спецификации gitignore с четырьмя различными типами шаблонов:
ШаблонЗначениеПримерСовпадает
//pathАбсолютный путь от корня файловой системыRead(//Users/alice/secrets/**)/Users/alice/secrets/**
~/pathПуть от домашнего каталогаRead(~/Documents/*.pdf)/Users/alice/Documents/*.pdf
/pathПуть относительно корня проектаEdit(/src/**/*.ts)<project root>/src/**/*.ts
path или ./pathПуть относительно текущего каталогаRead(*.env)<cwd>/*.env
Шаблон, такой как /Users/alice/file, НЕ является абсолютным путем. Это относительно корня проекта. Используйте //Users/alice/file для абсолютных путей.
Примеры:
  • Edit(/docs/**): редактирование в <project>/docs/ (НЕ /docs/ и НЕ <project>/.claude/docs/)
  • Read(~/.zshrc): чтение .zshrc вашего домашнего каталога
  • Edit(//tmp/scratch.txt): редактирование абсолютного пути /tmp/scratch.txt
  • Read(src/**): чтение из <current-directory>/src/
В шаблонах gitignore * совпадает с файлами в одном каталоге, а ** совпадает рекурсивно по каталогам. Чтобы разрешить весь доступ к файлам, используйте только имя инструмента без скобок: Read, Edit или Write.

WebFetch

  • WebFetch(domain:example.com) совпадает с запросами выборки на example.com

MCP

  • mcp__puppeteer совпадает с любым инструментом, предоставленным сервером puppeteer (имя настроено в Claude Code)
  • mcp__puppeteer__* синтаксис подстановочных символов, который также совпадает со всеми инструментами с сервера puppeteer
  • mcp__puppeteer__puppeteer_navigate совпадает с инструментом puppeteer_navigate, предоставленным сервером puppeteer

Agent (subagents)

Используйте правила Agent(AgentName) для контроля, какие subagents может использовать Claude:
  • Agent(Explore) совпадает с subagent Explore
  • Agent(Plan) совпадает с subagent Plan
  • Agent(my-custom-agent) совпадает с пользовательским subagent с именем my-custom-agent
Добавьте эти правила в массив deny в ваших параметрах или используйте флаг CLI --disallowedTools для отключения конкретных агентов. Чтобы отключить агент Explore:
{
  "permissions": {
    "deny": ["Agent(Explore)"]
  }
}

Расширение разрешений с помощью hooks

Claude Code hooks предоставляют способ регистрации пользовательских команд оболочки для выполнения оценки разрешений во время выполнения. Когда Claude Code выполняет вызов инструмента, PreToolUse hooks запускаются перед системой разрешений, и выход hook может определить, одобрить или отклонить вызов инструмента вместо системы разрешений.

Рабочие каталоги

По умолчанию Claude имеет доступ к файлам в каталоге, где он был запущен. Вы можете расширить этот доступ:
  • При запуске: используйте аргумент CLI --add-dir <path>
  • Во время сеанса: используйте команду /add-dir
  • Постоянная конфигурация: добавьте в additionalDirectories в файлы параметров
Файлы в дополнительных каталогах следуют тем же правилам разрешений, что и исходный рабочий каталог: они становятся читаемыми без запросов, и разрешения на редактирование файлов следуют текущему режиму разрешений.

Как разрешения взаимодействуют с sandboxing

Разрешения и sandboxing являются дополняющими уровнями безопасности:
  • Разрешения контролируют, какие инструменты может использовать Claude Code и какие файлы или домены он может использовать. Они применяются ко всем инструментам (Bash, Read, Edit, WebFetch, MCP и другим).
  • Sandboxing обеспечивает принудительное применение на уровне ОС, которое ограничивает доступ инструмента Bash к файловой системе и сети. Это применяется только к Bash командам и их дочерним процессам.
Используйте оба для защиты в глубину:
  • Правила deny разрешений блокируют Claude от попытки доступа к ограниченным ресурсам
  • Ограничения sandbox предотвращают Bash команды от доступа к ресурсам вне определенных границ, даже если инъекция подсказки обходит принятие решений Claude
  • Ограничения файловой системы в sandbox используют правила Read и Edit deny, а не отдельную конфигурацию sandbox
  • Ограничения сети объединяют правила разрешений WebFetch со списком allowedDomains sandbox

Управляемые параметры

Для организаций, которым требуется централизованный контроль над конфигурацией Claude Code, администраторы могут развернуть управляемые параметры, которые не могут быть переопределены параметрами пользователя или проекта. Эти параметры политики следуют тому же формату, что и обычные файлы параметров, и могут быть доставлены через политики MDM/уровня ОС, управляемые файлы параметров или параметры, управляемые сервером. См. файлы параметров для механизмов доставки и расположения файлов.

Параметры только для управления

Некоторые параметры эффективны только в управляемых параметрах:
ПараметрОписание
disableBypassPermissionsModeУстановите на "disable" для предотвращения режима bypassPermissions и флага --dangerously-skip-permissions
allowManagedPermissionRulesOnlyКогда true, предотвращает определение правил разрешений allow, ask или deny в параметрах пользователя и проекта. Применяются только правила в управляемых параметрах
allowManagedHooksOnlyКогда true, предотвращает загрузку hooks пользователя, проекта и плагина. Разрешены только управляемые hooks и SDK hooks
allowManagedMcpServersOnlyКогда true, только allowedMcpServers из управляемых параметров учитываются. deniedMcpServers все еще объединяется из всех источников. См. Управляемая конфигурация MCP
blockedMarketplacesСписок блокировки источников marketplace. Заблокированные источники проверяются перед загрузкой, поэтому они никогда не касаются файловой системы. См. управляемые ограничения marketplace
sandbox.network.allowManagedDomainsOnlyКогда true, только allowedDomains и правила WebFetch(domain:...) allow из управляемых параметров учитываются. Недопустимые домены блокируются автоматически без запроса пользователю. Запрещенные домены все еще объединяются из всех источников
strictKnownMarketplacesКонтролирует, какие marketplace плагинов могут добавлять пользователи. См. управляемые ограничения marketplace
allow_remote_sessionsКогда true, позволяет пользователям начинать Remote Control и веб-сеансы. По умолчанию true. Установите на false для предотвращения доступа к удаленным сеансам

Приоритет параметров

Правила разрешений следуют тому же приоритету параметров, что и все остальные параметры Claude Code:
  1. Управляемые параметры: не могут быть переопределены никаким другим уровнем, включая аргументы командной строки
  2. Аргументы командной строки: временные переопределения сеанса
  3. Локальные параметры проекта (.claude/settings.local.json)
  4. Общие параметры проекта (.claude/settings.json)
  5. Параметры пользователя (~/.claude/settings.json)
Если инструмент запрещен на любом уровне, никакой другой уровень не может его разрешить. Например, управляемый параметр deny не может быть переопределен --allowedTools, и --disallowedTools может добавить ограничения сверх того, что определяют управляемые параметры. Если разрешение разрешено в параметрах пользователя, но запрещено в параметрах проекта, параметр проекта имеет приоритет и разрешение блокируется.

Примеры конфигураций

Этот репозиторий включает начальные конфигурации параметров для распространенных сценариев развертывания. Используйте их как отправные точки и настройте их в соответствии с вашими потребностями.

См. также

  • Settings: полный справочник конфигурации, включая таблицу параметров разрешений
  • Sandboxing: изоляция файловой системы и сети на уровне ОС для Bash команд
  • Authentication: настройка доступа пользователей к Claude Code
  • Security: гарантии безопасности и лучшие практики
  • Hooks: автоматизация рабочих процессов и расширение оценки разрешений