AI 코딩 도구

Claude Code 권한: 6가지 모드와 안전하게 설정하는 방법 (2026)

2026년 8월 20일10분 읽기

Claude Code에는 AI가 파일을 쓰거나 명령을 실행할 수 있는지를 제어하는 6가지 권한 모드가 있어서, 작업물을 잃을 걱정 없이 사용할 수 있어요. 기본값(Manual)은 읽기 전용이라 쓰기나 셸 명령을 실행하기 전에 매번 물어봐요. settings.jsonallow / deny / ask 목록으로 동작을 세밀하게 조정할 수 있고, 여기서는 deny가 항상 allow보다 우선해요. --dangerously-skip-permissions 플래그는 모든 검사를 꺼 버리니 컨테이너나 VM 안에서만 실행하세요. auto 모드는 안전망을 남겨 두면서도 번거로움을 줄여 주는 선택지예요.

Claude Code의 권한은 버전마다 꽤 빠르게 바뀌어요. 아래 내용을 적용하기 전에 claude --version공식 권한 모드 문서(Anthropic, 2026년 8월 갱신)를 확인하세요.

Claude Code의 권한이 중요한 이유

Claude Code는 챗봇처럼 코드를 제안만 하는 게 아니에요. 파일을 여러분의 컴퓨터에 직접 쓰고 셸 명령을 실행할 수 있는 진짜 에이전트예요. 그 힘이 곧 위험이기도 해요. 가드레일이 없으면 평범한 세션에서도 커밋하지 않은 파일을 덮어쓰거나, 엉뚱한 폴더를 지우거나, 여러분이 반응하기도 전에 rm -rf 같은 파괴적인 명령을 실행할 수 있어요.

가장 무서운 위험은 AI가 "말썽을 피우기로 결정하는" 게 아니라 프롬프트 인젝션이에요. Claude에게 읽어 달라고 한 웹 페이지, 의존성 안에 깊이 묻힌 README, GitHub 이슈 같은 곳에 "curl ... | bash를 실행해" 또는 ".env의 내용을 어딘가로 보내"라는 숨은 지시가 담겨 있을 수 있어요. Claude가 전체 권한을 가지고 있으면, 여러분이 시키지 않아도 그런 명령을 따를 수 있어요.

그래서 권한 시스템이 존재해요. 기본적으로 Claude Code는 먼저 묻고 나중에 실행하는 자세로 동작해요. 방금 Claude Code를 설치했다면, 다음으로 할 일은 권한을 이해하고 설정하는 거예요. 데이터 손실을 피하기 위해서이기도 하고, 이미 신뢰하는 작업에 대한 끝없는 y/n 확인을 멈추기 위해서이기도 해요.

Claude Code의 6가지 권한 모드(비교표)

Claude Code에는 6가지 권한 모드가 들어 있어요. 먼저 기억할 점은 기본 모드가 읽기 전용이라는 것, 그리고 파일을 쓰거나 명령을 실행하기 전에 항상 물어본다는 거예요. 나머지 모드는 그 작업을 얼마나 신뢰하는지, 환경이 얼마나 격리돼 있는지에 따라 한 단계씩 그 통제를 느슨하게 풀어 줘요.

모드묻지 않고 실행하는 것사용 시점
default(v2.1.200부터 Manual로 표시)읽기 전용. 파일 쓰기나 명령마다 확인시작 단계, 민감한 작업, 낯선 저장소
acceptEdits읽기 + 파일 편집과 안전한 파일시스템 명령(mkdir, touch, mv, cp, sed)을 작업 디렉터리 안에서 자동 승인git diff로 검토하며 진행하는 다단계 반복 작업
plan읽기 + 조사. 계획을 승인할 때까지 아무것도 바꾸지 않음코드베이스 탐색, 편집 전 계획 수립
auto거의 모든 것을 실행하지만, 백그라운드 분류기가 각 동작을 검사해 위험한 명령을 차단장시간 실행 작업. Pro/Max/Team에서는 2026년 8월 14일부터 기본값
dontAsk이미 허용된 도구만 실행. 목록 밖의 것은 물어보지 않고 조용히 건너뜀잠긴 CI/스크립트, 무인 환경
bypassPermissions(= --dangerously-skip-permissions)아무 검사 없이 모든 것을 실행격리된 컨테이너나 VM 안에서

실제로는 대부분의 시간을 앞의 세 가지 모드에서 보내게 돼요. default/Manual이 가장 안전한 출발점이라 여러분 몰래 뒤에서 무언가 벌어지는 일이 없어요. acceptEdits는 리팩터링을 하면서 Claude가 진행하는 대로 편집하게 두고 나중에 git diff로 검토하고 싶을 때 어울려요. plan은 Claude가 "읽고, 이해하고, 설명"하기를 바랄 때, 예를 들어 코드에 손대기 전에 여러 파일에 걸친 버그를 추적하게 할 때 아주 좋아요. 나머지 셋은 전용 도구예요. auto는 안전망이 있는 장시간 작업용, dontAsk는 자동화용, bypassPermissions는 완전히 격리된 환경 전용이에요.

버전 참고: 이 내장 auto 기본값은 macOS/Linux/WSL에서는 Claude Code v2.1.228 이상, 네이티브 Windows에서는 v2.1.233 이상에서만 적용돼요. 그 이전 버전은 여전히 default/Manual로 시작해요.

모드 전환과 기본 모드 설정

세션 도중에 모드를 바꾸는 가장 빠른 방법은 Shift+Tab을 누르는 거예요. 2026년 8월 14일부터 Pro/Max/Team 세션은 default가 아니라 auto로 시작해요. 첫 Shift+Tab을 누르면 auto에서 default로 넘어가고, 그다음부터는 익숙한 순환, defaultacceptEditsplan이 이어지며, 계정이 대상이면 auto가 순환의 끝에 다시 끼어들어요(권한 모드 문서, Anthropic, 2026년 8월 기준). 아래쪽 상태 표시줄이 누를 때마다 갱신되니, 지금 어떤 모드에 있는지 늘 알 수 있어요.

특정 모드로 바로 시작하려면 명령줄 플래그를 사용하세요.

claude --permission-mode plan

모든 세션에 기본 모드를 고정하려면 settings.jsondefaultMode를 설정하세요.

{
 "permissions": {
 "defaultMode": "acceptEdits"
 }
}

중요한 보안 참고: defaultMode: "auto"는 사용자 파일 ~/.claude/settings.json에 선언됐을 때만 적용돼요. 여러분(또는 다른 누군가)이 프로젝트의 .claude/settings.json에 설정해도 Claude Code는 그것을 무시해요. 그래서 방금 클론한 저장소가 스스로에게 자동 실행 권한을 줄 수 없어요. 이것이 "악성 저장소"가 스스로 권한을 상승시키는 것을 막는 가드레일이에요.

settings.json에서 허용 목록 설정하기(allow / deny / ask)

권한 모드가 전반적인 "태도"를 정한다면, settings.json은 개별 명령 단위까지의 통제를 줘요. 목록은 세 가지예요.

  • allow — 묻지 않고 실행해요. 예: "Bash(npm run test:*)", "Read(src/**)".
  • ask — 모드가 통제를 풀고 있을 때조차 항상 물어봐요. 여러분이 직접 확인을 누르고 싶은 명령에 사용하세요.
  • deny — 완전히 차단하고 절대 실행하지 않아요. 예: "Bash(rm -rf *)", "WebFetch", "Read(.env)".

규칙 구문은 Tool(pattern) 형식을 따라요. Bash(npm run lint)는 그 정확한 명령과 일치하고, :*를 붙이면 접두사와 일치하며(Bash(git diff:*)), Read(src/**)는 경로에 글롭을 쓰고, WebFetch(domain:github.com)는 도메인으로 제한해요.

가장 중요한 조정 규칙, 이건 머릿속에 새겨 두세요. deny는 어느 레벨에서든 항상 allow를 이겨요. 어떤 명령이 allow와 deny 규칙 둘 다에 일치하면 차단돼요. 파일 순서로 보면 상위 레벨이 하위를 덮어쓰는데, 그 순서는 다음과 같아요. managed(엔터프라이즈) > .claude/settings.local.json > .claude/settings.json > ~/.claude/settings.json. settings.local.json 파일은 커밋되지 않는 여러분 개인 설정이 있는 곳이고, 프로젝트의 settings.json은 Git을 통해 팀 전체와 공유돼요.

편의와 안전의 균형을 맞춘 settings.json 샘플이에요.

{
 "permissions": {
 "defaultMode": "default",
 "allow": [
 "Bash(npm run test:*)",
 "Bash(npm run lint)",
 "Bash(git status)",
 "Bash(git diff:*)",
 "Read(src/**)"
 ],
 "ask": [
 "Bash(git push:*)"
 ],
 "deny": [
 "Bash(rm -rf *)",
 "Bash(git push --force:*)",
 "Read(.env)",
 "Read(./secrets/**)",
 "WebFetch"
 ],
 "additionalDirectories": [
 "../shared-libs"
 ]
 }
}

additionalDirectories 필드를 쓰면 Claude가 현재 작업 공간 밖의 폴더를 다룰 수 있어요. 패키지로 나뉜 모노레포에서 편리하지만, 실제로 필요한 것만 추가하세요. 로깅이나 조건부 차단처럼 더 맞춤화된 권한 로직을 원한다면, PreToolUse 이벤트를 사용하는 Hooks로 각 도구가 실행되기 전에 개입할 수 있어요.

보호된 경로 — Claude가 스스로는 절대 편집하지 않는 것

여러분이 설정하는 allow/deny 규칙과 별개로, Claude Code에는 더 아래에 자리 잡은 단단한 보호 계층이 있어요. 보호된 경로예요. 이것들은 acceptEditsauto에 있을 때조차 Claude가 쓰기용으로 절대 자동 승인하지 않는 민감한 설정 파일과 폴더예요.

  • .claude.claude.json — Claude Code 자체 설정
  • .git — Git 내부(저장소 히스토리를 직접 건드리지 못하도록)
  • .vscode — 에디터 설정
  • 셸 rc 파일: .bashrc, .zshrc… — 시작 시 실행되는 숨은 명령이 흔히 자리 잡는 곳
  • .npmrc와 시크릿을 담는 모든 .env* 파일
  • .mcp.json — MCP 서버 설정

핵심 안전 포인트: allow 규칙조차 보호된 경로를 덮어쓸 수는 없어요. 이 안전 검사는 허용 목록이 평가되기 전에 실행되기 때문에, 여러분이 실수로(또는 속아서) .env에 쓰기를 허용하는 규칙을 추가했더라도 Claude는 여전히 멈추고 물어봐요. 이 계층을 우회하는 유일한 방법은 bypassPermissions예요. 격리된 환경 밖에서 이것을 켜지 말아야 할 또 하나의 이유죠.

--dangerously-skip-permissions vs auto 모드 — 어느 쪽이 안전할까

"y/n 확인을 끄고 싶은" 많은 사람이 곧장 --dangerously-skip-permissions(YOLO 모드라고도 해요)에 손을 뻗어요. 이 플래그는 모든 검사를 비활성화해요. allow/deny 규칙도, 보호된 경로도 모두 무시돼요. 실제 결과는 이래요.

  • 프롬프트 인젝션을 막아 주지 않아요. 모든 안전망이 꺼져 있어서, 웹 페이지나 파일의 숨은 지시가 그대로 실행돼요.
  • Claude Code는 root/sudo로 실행 중일 때 이 플래그를 차단해요. 피해 범위가 너무 크기 때문이에요.
  • 사용은 격리된 컨테이너나 VM, 되도록 인터넷이 없는 곳 안에서만 하세요. Claude가 뭔가를 망가뜨려도 망가지는 건 샌드박스뿐인 곳이요.

2026년 초부터 Anthropic은 "마찰을 줄이고 싶다"는 요구에 대한 안전한 대안으로 auto 모드를 제공해 왔어요. 검사를 끄는 대신, auto 모드는 백그라운드 분류기를 실행해 각 동작을 분류하고 기본적으로 위험한 명령을 차단해요. curl | bash, 시크릿 유출, 프로덕션 배포, rm -rf /, git reset --hard, 강제 푸시, terraform destroy 등이요. 일상적이고 안전한 작업은 그대로 통과하고, 파괴적인 냄새가 나는 것은 여러분에게 확인을 받으러 돌아와요. Anthropic에 따르면 세션 내 대부분의 동작은 어차피 사용자에게 승인되므로, auto 모드는 대부분의 질문을 줄이면서 드물게 나타나는 위험한 것에는 안전망을 남겨 둬요.

이것은 기본 "안전 자세"에서도 큰 전환이에요. 2026년 8월 14일부터 auto 모드가 Pro/Max/Team 요금제의 기본 모드가 됐어요(Claude Code 권한 모드 문서, Anthropic, 2026년 8월 기준). 요컨대, 확인을 줄이고 싶다면 auto 모드를 쓰고 --dangerously-skip-permissions는 쓰지 마세요.

분류기가 판단하는 방식: 규칙 계층과 차단된 동작 검토하기

auto 모드 뒤의 백그라운드 분류기는 단일 통을 쓰지 않고, 각 동작을 순서가 정해진 네 개의 규칙 계층과 대조해요. hard_deny는 무조건 차단하고(예: 시크릿 유출) 덮어쓸 수 없어요. soft_deny는 강제 푸시처럼 파괴적이지만 때로는 정당한 동작을 차단하되 덮어쓸 수 있어요. allow 규칙은 soft_deny에 대한 이름 붙은 예외를 만들 수 있어요. 그리고 그런 예외가 없더라도, 여러분 자신의 메시지에서 명시적으로 밝힌 의도가 남아 있는 소프트 차단을 덮어쓸 수 있어요. 다만 모호한 것("저장소를 정리해")이 아니라 정확한 동작을 지목했을 때("이 브랜치를 강제 푸시해")에만요.

무언가가 실제로 차단되면, 요청을 다시 타이핑하지 말고 /permissions를 열어 Recently denied 탭으로 가서 r을 눌러 수동 승인으로 재시도하세요. 한 가지 예외 상황: 분류기가 판정 자체를 낼 수 없으면 그 동작은 조용히 거부되고 Recently denied에도 항목이 남지 않아요. 에이전트 루프와 권한이 어떻게 맞물리는지 큰 그림이 궁금한가요? Claude Code가 무엇인지부터 시작해 보세요.

권장하는 안전한 설정(단계별)

일상적인 개발 작업에서 제가 가장 균형 잡혔다고 느끼는 설정이에요. 안전하면서도 성가시지 않아요.

  1. 민감한 작업에는 default/Manual을 유지하세요. 낯선 저장소, main 브랜치 작업, Claude가 웹에서 콘텐츠를 읽고 있을 때는 기본 모드에 머물러 손으로 승인하세요.
  2. 파괴적인 명령에는 deny를 추가하세요. Bash(rm -rf *), Bash(git push --force:*), Read(.env)를 잠그세요. deny가 allow를 이기니, 이건 실수로 느슨해지지 않는 계층이에요.
  3. 신뢰하고 반복하는 명령에는 좁게 allow하세요. 늘 실행하고 안전하다고 아는 명령을 추가하세요. Bash(npm run test:*), Bash(git status). 넓은 allow보다 좁은 allow(정확한 명령)를 선호하세요.
  4. 코드를 반복할 때는 acceptEdits를 쓰고 git diff로 검토하세요. 속도를 위해 Claude가 진행하며 편집하게 두되, 커밋 단계에서 통제를 유지하세요. git add 전에 diff를 확인하세요.
  5. 길거나 민감한 작업 → 컨테이너나 auto 모드, 절대 bypass는 금지. 길고 무인으로 실행해야 할 때도 분류기가 있는 auto 모드가 여전히 옳은 선택이에요. 그때가 바로 프로덕션 접근 없이 /goal을 안전하게 실행할 순간이기도 해요.

언제든 적용 중인 모든 규칙을 검토하고 싶으면 세션에서 /permissions를 입력하세요. 처음으로 Claude Code를 설치하고 설정한 직후에 확인하기에도 좋은 곳이에요.

권한을 설정할 때 흔한 실수와 실패 유형

권한 설정은 몇 가지 반복되는 상황에서 자주 걸려 넘어져요. 미리 알아 두면 짜증을 덜 수 있어요.

  • "계속 y/n을 물어봐요." 이는 모드가 default인데 그 명령이 아직 allow 목록에 없다는 뜻이에요. 신뢰하는 정확한 명령에 좁은 allow 규칙을 추가하세요. 곧장 bypass로 건너뛰지 마세요.
  • "auto 모드가 자꾸 차단해요." 분류기가 한 세션에서 연속 3번 또는 총 20번 차단하면 Claude는 auto 모드를 멈추고 수동 확인으로 돌아가요. 무한 반복을 막기 위한 의도된 동작이에요.
  • 말로 "푸시하지 마"라고 했는데도 푸시했어요. 대화에서 말한 "경계"는 컨텍스트가 압축되면 사라질 수 있어요. 말로 한 제약은 설정보다 덜 믿을 만해요. 강한 한계에는 deny 규칙을 쓰세요.
  • 규칙이 적용되지 않아요. 대개 settings.json이 잘못된 JSON(뒤에 붙은 쉼표, 빠진 중괄호)이라 파일 전체가 건너뛰어져요. 파일이 유효한지 확인하고 /permissions로 다시 점검하세요.

Claude Code에서 더 이상한 오류를 만나고 있나요? Claude Code의 흔한 오류 해결 가이드를 보세요.

바로 쓸 수 있는 안전한 권한 프리셋

프로젝트마다 손으로 허용 목록을 짜는 건 번거로운 일이에요. 서로 다른 스택의 여러 저장소를 오갈 때는 특히요. 한 가지 지름길은 관례에 따라 스킬과 설정을 묶어 놓은 커뮤니티 키트예요. 예를 들어 Claude Code용 AgentKit 키트(링크로 20% 할인)는 스킬과 워크플로를 표준에 맞춰 제공해서, 처음부터 작성할 규칙이 줄어들어요. 어떻게 작동하는지 궁금하면 AgentKit이 무엇이고 쓸 가치가 있는지에 대한 저희 견해를 읽어 보세요. 프리셋이 있든 없든 원칙은 그대로예요. deny/allow를 이해하고, 안전망은 절대 끄지 마세요.

자주 묻는 질문(FAQ)

Claude Code가 제 파일을 지우나요?

기본(Manual) 모드에서는 아니에요. Claude는 어떤 쓰기나 삭제 전에도 항상 물어봐요. 여러분이 권한을 느슨하게 하거나(acceptEdits/auto) --dangerously-skip-permissions를 켤 때에만 스스로 삭제할 수 있게 돼요. 완전히 차단하려면 rm -rfdeny를 추가하세요.

안전을 지키면서 y/n 확인을 멈추려면?

bypass로 끄지 마세요. 대신 신뢰하는 명령(예: npm test, git status)에 좁은 allow 규칙을 추가하거나 auto 모드를 쓰세요. auto 모드는 안전한 동작에는 확인을 줄이면서도 분류기로 위험한 것은 차단해요.

--dangerously-skip-permissions는 위험한가요?

네. 모든 검사를 비활성화하고 프롬프트 인젝션에 대한 보호를 전혀 제공하지 않아요. root로 실행하면 Claude가 이것을 차단하기까지 해요. 사용은 격리된 컨테이너나 VM, 되도록 인터넷이 없는 곳 안에서만 하세요.

auto 모드는 bypass와 어떻게 다른가요?

auto 모드는 안전망을 유지해요. 백그라운드 분류기가 위험한 명령(curl|bash, 강제 푸시, 시크릿 전송, rm -rf /)을 차단해요. bypass는 모든 것을 꺼 버려요. 확인을 줄이고 싶다면 bypass가 아니라 auto 모드를 고르세요.

충돌 시 deny와 allow 중 무엇이 이기나요?

deny가 항상 이겨요. 어떤 명령이 어느 설정 레벨에서든 deny와 allow 규칙 둘 다에 일치하면 차단돼요. 보호된 경로도 먼저 검사되므로, allow 규칙이 그것을 덮어쓸 수 없어요.

권한 설정은 어디에 있나요?

settings.json 파일 안에 있어요. 우선순위: managed(엔터프라이즈) > .claude/settings.local.json(개인, 커밋 안 함) > .claude/settings.json(팀 공유) > ~/.claude/settings.json(여러분의 기본값).

결론과 다음 단계

안전하지만 성가시지 않은 비법은 간결해요. 민감한 작업에는 안전한 기본값을 유지하고, 신뢰하는 명령에는 좁은 허용 목록을 추가하고, 파괴적인 것에는 강한 deny를 고정하고, 긴 작업에는 (bypass가 아니라) auto 모드를 쓰세요. 그러면 Claude Code는 빠르게 돌아가면서도 운전대는 여러분 손에 남아 있어요.

아직 설치가 끝나지 않았나요? Claude Code 설치 가이드를 보세요. 큰 그림은 Claude Code가 무엇인지를 참고하세요. 라벨 이름과 모드 임계값은 새 릴리스에서 바뀔 수 있으니 claude --version을 확인하세요.

J

Jasmine

작성자 · Jasmine Daily

Jasmine Daily를 써 내려가는 사람 - 생각과 경험, 그리고 하루하루의 순간을 적어 두어요. 솔직하고, 서두르지 않고, 완벽하지 않게.

Jasmine Daily

아직 읽을 이야기가 더 있어요.

이 글이 마음에 닿았다면, 일기의 다른 페이지들도 몇 장 넘겨 보세요.

다음 읽을거리

관련 글