03-실전
03. 실전 — 5가지 권한 패턴
섹션 제목: “03. 실전 — 5가지 권한 패턴”dev.to의 Lock Down Claude Code: 5 Permission Patterns 와 Korny의 Better Claude Code Permissions 가 묘사한 패턴을 통합해 정리한다.
패턴 1: 화이트리스트 + 기본 거부 (가장 안전)
섹션 제목: “패턴 1: 화이트리스트 + 기본 거부 (가장 안전)”{ "permissions": { "defaultMode": "deny" }, "allowedTools": [ "Read", "Grep", "Glob", "Edit", "Write", "Bash(git status)", "Bash(git diff*)", "Bash(git log*)", "Bash(pnpm test*)", "Bash(pnpm lint*)", "Bash(pnpm typecheck*)" ]}- 새 도구가 등장하면 명시적으로 추가해야 한다 → 마찰은 늘지만 사고는 거의 없다.
- 팀 전체
.claude/settings.json로 커밋.
패턴 2: 자동 모드 + 위험 패턴 차단 hook
섹션 제목: “패턴 2: 자동 모드 + 위험 패턴 차단 hook”{ "permissions": { "defaultMode": "auto" }, "hooks": { "PreToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": ".claude/hooks/block-dangerous.sh" }] }] }}block-dangerous.sh는rm -rf /,rm -rf ~,curl * | sh,git push --force같은 패턴을 정규식으로 차단(07장에서 전문 제공).
패턴 3: 헤드리스 전용 settings.local.json
섹션 제목: “패턴 3: 헤드리스 전용 settings.local.json”CI나 cron에서는 사람이 승인할 수 없으므로 별도 settings 프로파일을 만든다.
CLAUDE_SETTINGS_PATH=.claude/settings.ci.json claude -p "..." \ --max-turns 5 \ --permission-mode auto.claude/settings.ci.json은 더 좁은 화이트리스트, 강한 hook, 짧은 타임아웃을 갖는다.
패턴 4: 디렉토리 격리
섹션 제목: “패턴 4: 디렉토리 격리”Edit(*) / Write(*) 매처에 디렉토리를 강제한다. 예:
{ "allowedTools": [ "Edit(src/**)", "Edit(tests/**)", "Write(src/**)", "Write(tests/**)" ]}infra/,secrets/,.github/workflows/같은 민감 디렉토리는 명시적 사용자 승인.
패턴 5: 컨테이너/별도 사용자 격리
섹션 제목: “패턴 5: 컨테이너/별도 사용자 격리”Wolak 사례의 결론은 hook 만으로 안전하지 않다는 것이다. 가능하면 별도 OS 사용자나 컨테이너에서 돌린다.
“Containerize hobby agent runs. Use a dedicated user account with no access to the rest of the disk.”
의역: “취미 에이전트는 컨테이너로 격리하라. 디스크의 다른 영역에 접근 권한이 없는 전용 사용자 계정을 써라.”