메인 콘텐츠로 건너뛰기
Claude Code는 에이전트가 수행할 수 있는 작업과 수행할 수 없는 작업을 정확하게 지정할 수 있도록 세분화된 권한을 지원합니다. 권한 설정은 버전 제어에 체크인할 수 있으며 조직의 모든 개발자에게 배포할 수 있을 뿐만 아니라 개별 개발자가 사용자 정의할 수 있습니다.

권한 시스템

Claude Code는 강력함과 안전성의 균형을 맞추기 위해 계층화된 권한 시스템을 사용합니다:
도구 유형예시승인 필요”예, 다시 묻지 않기” 동작
읽기 전용파일 읽기, Grep아니오해당 없음
Bash 명령셸 실행프로젝트 디렉토리 및 명령당 영구적
파일 수정Edit/Write 파일세션 종료까지

권한 관리

/permissions를 사용하여 Claude Code의 도구 권한을 보고 관리할 수 있습니다. 이 UI는 모든 권한 규칙과 이들이 출처한 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 모드는 모든 권한 검사를 비활성화합니다. 컨테이너나 VM과 같은 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 *)npm run test로 시작하는 Bash 명령과 일치합니다
  • 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 -lalsof 모두와 일치합니다.
Claude Code는 셸 연산자(예: &&)를 인식하므로 Bash(safe-cmd *)와 같은 접두사 일치 규칙은 safe-cmd && other-cmd 명령을 실행할 권한을 부여하지 않습니다.
명령 인수를 제약하려고 시도하는 Bash 권한 패턴은 취약합니다. 예를 들어, Bash(curl http://github.com/ *)는 curl을 GitHub URL로 제한하려고 하지만 다음과 같은 변형과는 일치하지 않습니다:
  • 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(domain:github.com) 권한으로 WebFetch 도구를 사용합니다
  • PreToolUse 훅 사용: Bash 명령의 URL을 검증하고 허용되지 않은 도메인을 차단하는 훅을 구현합니다
  • CLAUDE.md를 통해 Claude Code에 허용된 curl 패턴에 대해 지시합니다
WebFetch만 사용하는 것은 네트워크 액세스를 방지하지 않습니다. Bash가 허용되면 Claude는 여전히 curl, wget 또는 다른 도구를 사용하여 모든 URL에 도달할 수 있습니다.

Read 및 Edit

Edit 규칙은 파일을 편집하는 모든 기본 제공 도구에 적용됩니다. Claude는 Grep 및 Glob과 같이 파일을 읽는 모든 기본 제공 도구에 Read 규칙을 적용하기 위해 최선을 다합니다. Read 및 Edit 규칙은 모두 gitignore 사양을 따르며 4가지 고유한 패턴 유형이 있습니다:
패턴의미예시일치
//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/의 편집 (NOT /docs/ and NOT <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__puppeteerpuppeteer 서버(Claude Code에서 구성된 이름)에서 제공하는 모든 도구와 일치합니다
  • mcp__puppeteer__* 와일드카드 구문은 puppeteer 서버의 모든 도구와도 일치합니다
  • mcp__puppeteer__puppeteer_navigatepuppeteer 서버에서 제공하는 puppeteer_navigate 도구와 일치합니다

Agent (subagents)

Agent(AgentName) 규칙을 사용하여 Claude가 사용할 수 있는 subagents를 제어합니다:
  • Agent(Explore)는 Explore subagent와 일치합니다
  • Agent(Plan)은 Plan subagent와 일치합니다
  • Agent(my-custom-agent)my-custom-agent라는 사용자 정의 subagent와 일치합니다
이러한 규칙을 설정의 deny 배열에 추가하거나 --disallowedTools CLI 플래그를 사용하여 특정 에이전트를 비활성화합니다. Explore 에이전트를 비활성화하려면:
{
  "permissions": {
    "deny": ["Agent(Explore)"]
  }
}

훅으로 권한 확장

Claude Code 훅은 런타임에 권한 평가를 수행하기 위해 사용자 정의 셸 명령을 등록하는 방법을 제공합니다. Claude Code가 도구 호출을 할 때, PreToolUse 훅은 권한 시스템 전에 실행되며, 훅 출력은 권한 시스템 대신 도구 호출을 승인하거나 거부할지 여부를 결정할 수 있습니다.

작업 디렉토리

기본적으로 Claude는 시작된 디렉토리의 파일에 액세스할 수 있습니다. 이 액세스를 확장할 수 있습니다:
  • 시작 중: --add-dir <path> CLI 인수 사용
  • 세션 중: /add-dir 명령 사용
  • 영구 구성: 설정 파일additionalDirectories에 추가
추가 디렉토리의 파일은 원래 작업 디렉토리와 동일한 권한 규칙을 따릅니다: 프롬프트 없이 읽을 수 있게 되며, 파일 편집 권한은 현재 권한 모드를 따릅니다.

권한이 샌드박싱과 상호 작용하는 방식

권한과 샌드박싱은 상호 보완적인 보안 계층입니다:
  • 권한은 Claude Code가 사용할 수 있는 도구와 액세스할 수 있는 파일 또는 도메인을 제어합니다. 모든 도구(Bash, Read, Edit, WebFetch, MCP 등)에 적용됩니다.
  • 샌드박싱은 Bash 도구의 파일 시스템 및 네트워크 액세스를 제한하는 OS 수준 적용을 제공합니다. Bash 명령 및 해당 자식 프로세스에만 적용됩니다.
심층 방어를 위해 둘 다 사용합니다:
  • 권한 deny 규칙은 Claude가 제한된 리소스에 액세스하려고 시도하는 것을 차단합니다
  • 샌드박스 제한은 프롬프트 주입이 Claude의 의사 결정을 우회하더라도 Bash 명령이 정의된 경계 외부의 리소스에 도달하는 것을 방지합니다
  • 샌드박스의 파일 시스템 제한은 Read 및 Edit deny 규칙을 사용하며, 별도의 샌드박스 구성은 사용하지 않습니다
  • 네트워크 제한은 WebFetch 권한 규칙과 샌드박스의 allowedDomains 목록을 결합합니다

관리형 설정

Claude Code 구성에 대한 중앙 집중식 제어가 필요한 조직의 경우, 관리자는 사용자 또는 프로젝트 설정으로 재정의할 수 없는 관리형 설정을 배포할 수 있습니다. 이러한 정책 설정은 일반 설정 파일과 동일한 형식을 따르며 MDM/OS 수준 정책, 관리형 설정 파일 또는 서버 관리형 설정을 통해 전달될 수 있습니다. 전달 메커니즘 및 파일 위치는 설정 파일을 참조합니다.

관리형 전용 설정

일부 설정은 관리형 설정에서만 효과적입니다:
설정설명
disableBypassPermissionsModebypassPermissions 모드 및 --dangerously-skip-permissions 플래그를 방지하려면 "disable"로 설정합니다
allowManagedPermissionRulesOnlytrue일 때, 사용자 및 프로젝트 설정이 allow, ask 또는 deny 권한 규칙을 정의하는 것을 방지합니다. 관리형 설정의 규칙만 적용됩니다
allowManagedHooksOnlytrue일 때, 사용자, 프로젝트 및 플러그인 훅의 로드를 방지합니다. 관리형 훅 및 SDK 훅만 허용됩니다
allowManagedMcpServersOnlytrue일 때, 관리형 설정의 allowedMcpServers만 존중됩니다. deniedMcpServers는 여전히 모든 소스에서 병합됩니다. 관리형 MCP 구성 참조
blockedMarketplaces마켓플레이스 소스의 차단 목록입니다. 차단된 소스는 다운로드 전에 확인되므로 파일 시스템에 닿지 않습니다. 관리형 마켓플레이스 제한 참조
sandbox.network.allowManagedDomainsOnlytrue일 때, 관리형 설정의 allowedDomainsWebFetch(domain:...) allow 규칙만 존중됩니다. 허용되지 않은 도메인은 사용자에게 프롬프트하지 않고 자동으로 차단됩니다. 거부된 도메인은 여전히 모든 소스에서 병합됩니다
strictKnownMarketplaces사용자가 추가할 수 있는 플러그인 마켓플레이스를 제어합니다. 관리형 마켓플레이스 제한 참조
allow_remote_sessionstrue일 때, 사용자가 Remote Control웹 세션을 시작할 수 있습니다. 기본값은 true입니다. 원격 세션 액세스를 방지하려면 false로 설정합니다

설정 우선순위

권한 규칙은 다른 모든 Claude Code 설정과 동일한 설정 우선순위를 따릅니다:
  1. 관리형 설정: 명령줄 인수를 포함한 다른 수준으로 재정의할 수 없습니다
  2. 명령줄 인수: 임시 세션 재정의
  3. 로컬 프로젝트 설정 (.claude/settings.local.json)
  4. 공유 프로젝트 설정 (.claude/settings.json)
  5. 사용자 설정 (~/.claude/settings.json)
도구가 어느 수준에서든 거부되면 다른 수준은 이를 허용할 수 없습니다. 예를 들어, 관리형 설정 deny는 --allowedTools로 재정의할 수 없으며, --disallowedTools는 관리형 설정이 정의하는 것 이상의 제한을 추가할 수 있습니다. 권한이 사용자 설정에서 허용되지만 프로젝트 설정에서 거부되면, 프로젝트 설정이 우선이며 권한이 차단됩니다.

예시 구성

저장소에는 일반적인 배포 시나리오에 대한 시작 설정 구성이 포함되어 있습니다. 이를 시작점으로 사용하고 필요에 맞게 조정합니다.

참고 항목

  • 설정: 권한 설정 테이블을 포함한 완전한 구성 참조
  • 샌드박싱: Bash 명령에 대한 OS 수준 파일 시스템 및 네트워크 격리
  • 인증: Claude Code에 대한 사용자 액세스 설정
  • 보안: 보안 보호 및 모범 사례
  • : 워크플로우 자동화 및 권한 평가 확장