클로드 코드, 권한 하나 잘못 주면 사고 납니다

2026. 7. 30. 14:31·AI/Claude Code
반응형

AI 코딩 어시스턴트를 프로젝트에 들이면 가장 먼저 걱정되는 게 하나 있습니다. "얘가 내 파일을 마음대로 지우거나, 이상한 명령어를 실행하면 어떡하지?" 하는 부분이죠. 클로드 코드(Claude Code)는 이 문제를 권한 시스템으로 해결합니다. 어떤 도구를 자동으로 써도 되는지, 어떤 건 물어보고 써야 하는지, 어떤 건 아예 막아야 하는지를 세밀하게 정할 수 있습니다.

 

오늘은 이 권한 관리를 어떻게 확인하고 설정하는지 정리해보겠습니다.


클로드가 사용하는 도구들

클로드 코드는 코드베이스 작업을 위해 여러 도구를 씁니다. 셸 명령을 실행하는 Bash, 파일을 수정하는 Edit, 계획을 세우는 EnterPlanMode, 격리된 작업 공간을 만드는 EnterWorktree까지 종류가 꽤 다양합니다.

문제는 이 도구들이 전부 같은 위험도를 가지고 있지 않다는 점입니다. 파일을 읽는 것과 rm 명령을 실행하는 건 완전히 다른 이야기니까요. 그래서 클로드 코드는 도구 하나하나에 대해 개별적으로 허용 여부를 지정할 수 있게 되어 있습니다. 전체 도구 목록과 각 도구의 동작 방식은 공식 문서에 표로 정리되어 있으니 한 번쯤 훑어보는 걸 추천합니다.


/permissions로 설정 확인하기

가장 빠른 방법은 터미널에서 바로 확인하는 겁니다.

/permissions

이 명령어를 실행하면 Permissions / Recently denied / Allow / Ask / Deny / Workspace 탭으로 나뉜 UI가 뜹니다. 여기서 지금 어떤 규칙이 어느 settings.json에서 왔는지까지 한눈에 볼 수 있습니다.

동작 원리는 생각보다 단순합니다.

  • Allow — 클로드가 승인 없이 바로 실행
  • Ask — 실행 전에 매번 확인
  • Deny — 아예 실행 자체를 막음

그리고 이 셋 사이에는 우선순위가 있습니다. deny → ask → allow 순서로 평가되고, 그중 처음 일치하는 규칙이 결과를 결정합니다. 즉 어떤 규칙이 더 구체적이냐는 중요하지 않고, deny에 걸리면 allow에 아무리 넓게 열어둬도 소용없습니다.


settings.json으로 직접 설정하기

UI로 하나씩 추가해도 되지만, 결국 실제로 저장되는 곳은 settings.json입니다. 기본 골격은 이렇습니다.

{
  "permissions": {
    "allow": [],
    "ask": [],
    "deny": []
  }
}

allow – 허용 목록

자동으로 실행되게 둘 작업들을 넣습니다.

규칙 설명 예시
Bash 모든 bash 명령 허용 "Bash"
Bash(명령어) 특정 명령만 허용 "Bash(npm run lint)"
Bash(패턴:*) 패턴에 맞는 명령 허용 "Bash(npm run test:*)"
Read(경로) 특정 경로 읽기 허용 "Read(~/.zshrc)"
Write(경로) 특정 경로 쓰기 허용 "Write(./dist/**)"

deny – 거부 목록

여기 들어간 항목은 allow에 뭐가 있든 무조건 차단됩니다. 그래서 민감한 파일이나 위험한 명령은 반드시 여기 넣어야 합니다.

"deny": [
  "Bash(curl:*)",
  "Bash(rm:*)",
  "Read(./.env)",
  "Read(./.env.*)",
  "Read(./secrets/**)",
  "Write(./config/prod.*)"
]

패턴 매칭 규칙

와일드카드 문법은 두 가지만 기억하면 됩니다.

패턴 의미 매칭 예시
* 단일 레벨 test:* → test:unit, test:e2e
** 다중 레벨(경로 전체) secrets/** → secrets/api/key.json
:* 명령 인수 전체 curl:* → curl https://...

실전에서는 이렇게 씁니다

개발 환경용 설정

일상적인 개발 작업에서 자주 쓰는 조합입니다.

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Read(./src/**)",
      "Write(./src/**)"
    ],
    "deny": [
      "Bash(curl:*)",
      "Bash(rm:*)",
      "Read(./.env*)",
      "Read(./secrets/**)",
      "Write(./package.json)"
    ]
  }
}

npm 스크립트나 src 폴더 작업은 자유롭게 허용하되, 외부 요청·삭제·환경변수·package.json처럼 사고 나면 골치 아픈 부분은 확실히 막아두는 구조입니다.

보안을 더 빡빡하게 가져가고 싶을 때

반대로 테스트 실행이나 특정 문서 읽기 정도만 열어두고, 나머지는 전부 물어보거나 차단하는 방식도 가능합니다.

{
  "permissions": {
    "allow": [
      "Bash(npm run test)",
      "Read(./README.md)"
    ],
    "ask": [
      "Bash(git push:*)",
      "Write(./src/**)"
    ],
    "deny": [
      "Bash",
      "Read(./.env*)",
      "WebFetch"
    ]
  }
}

git push나 소스 수정처럼 되돌리기 번거로운 작업은 ask로 빼두고, 나머지 bash 명령과 외부 웹 접근은 통째로 막아버리는 방식입니다. 신뢰도가 낮은 프로젝트나 처음 써보는 환경이라면 이 정도로 시작하는 게 안전합니다.


설정할 때 놓치기 쉬운 것들

  • Bash 패턴은 접두사 매칭 방식이라 curl:*처럼 막아도 완전히 우회가 불가능한 건 아닙니다. 100% 안전을 보장하는 장치는 아니라는 점을 기억해두세요.
  • deny는 항상 allow보다 우선합니다. allow에 넣었다고 안심하지 말고 deny 목록부터 점검하는 습관이 필요합니다.
  • .env, secrets/ 같은 민감 정보 경로는 예외 없이 deny에 넣는 게 맞습니다.
  • 처음부터 다 열어주기보다, 필요한 만큼만 allow에 추가하는 최소 권한 원칙을 지키는 게 결국 제일 편합니다.

프로젝트 밖 디렉토리도 접근하게 하려면

기본적으로 클로드는 실행한 프로젝트 폴더 안에서만 움직입니다. 하지만 문서 폴더가 따로 분리되어 있거나 공용 설정 디렉토리를 참조해야 하는 경우도 있죠. 이럴 땐 additionalDirectories로 접근 범위를 넓혀줄 수 있습니다.

{
  "permissions": {
    "additionalDirectories": [
      "../docs/",
      "~/config/",
      "/usr/local/templates/"
    ]
  }
}

상대 경로, 홈 디렉토리, 절대 경로 전부 지정 가능하니 프로젝트 구조에 맞게 골라 쓰면 됩니다.


권한 관리는 한 번 세팅해두면 그다음부터는 크게 신경 쓸 일이 없습니다. 다만 처음 설정할 때 deny 목록만큼은 꼼꼼히 챙겨두는 게 나중에 마음 편합니다. /permissions 명령어로 현재 상태를 자주 들여다보는 습관을 들이는 것도 도움이 됩니다.


참고

  • [공식문서] 도구 참조 — https://code.claude.com/docs/ko/tools-reference
  • [공식문서] 권한 관리 — https://code.claude.com/docs/ko/permissions
반응형

'AI > Claude Code' 카테고리의 다른 글

클로드 코드 권한 모드, 상황에 맞게 골라 쓰고 있나요  (0) 2026.07.30
'AI/Claude Code' 카테고리의 다른 글
  • 클로드 코드 권한 모드, 상황에 맞게 골라 쓰고 있나요
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • AI (10)
        • Claude Code (2)
      • 알고리즘 (110)
        • 자료구조 (4)
        • Java (104)
        • Python (1)
      • Back end (77)
        • Spring Project (28)
        • Java (24)
        • Kafka (1)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (3)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (24)
        • IntelliJ (2)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (8)
      • Database (17)
        • Oracle (11)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (14)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    BOJ
    github
    백준 자바
    문자열
    구현
    알고리즘
    1차원 배열
    배열
    spring
    springboot
    solved.ac
    jpa
    자바
    단계별풀기
    Oracle
    Git
    java
    백준알고리즘
    for문
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
클로드 코드, 권한 하나 잘못 주면 사고 납니다
상단으로

티스토리툴바