01-개념
01. 개념 — 권한은 “셸 확장 후”에서 검사해야 한다
섹션 제목: “01. 개념 — 권한은 “셸 확장 후”에서 검사해야 한다”Claude Code의 권한 시스템은 두 층이다.
- 정적 정책 —
settings.json의allowedTools,permissions.defaultMode, hook 차단 규칙. - 런타임 승인 — 모델이 도구를 호출할 때마다 사용자에게 묻는 (또는 묻지 않는) 흐름.
이 두 층 사이에 가장 위험한 틈이 있다 — 셸 확장(Shell expansion) 이다. Mike Wolak의 사례는 산업 패턴을 정확히 보여준다.
“The permission system passed the command — but the shell then expanded
~into the literal home path, and the command annihilated the entire project plus years of files.”
의역: “권한 시스템은 명령을 통과시켰다. 그러나 셸이~를 실제 홈 경로로 확장하면서 프로젝트와 수년치 파일이 함께 사라졌다.”
— Mike Wolak: Claude Code’srm -rf ~/Wiped a Home Directory, byteiota.com
교훈은 단순하다. 검증은 원본 문자열이 아니라 셸 확장 이후의 결과에 걸어야 한다. 그리고 rm -rf /, rm -rf ~, rm -rf $HOME 같은 패턴은 어떤 프로젝트에서도 hook으로 하드 차단해야 한다.
최소 권한의 원칙
섹션 제목: “최소 권한의 원칙”코딩 어시스턴트라고 해서 모든 도구가 필요한 것은 아니다. 보통 다음 정도면 충분하다:
- 항상 허용:
Read,Grep,Glob,Edit,Write,Bash(git status),Bash(git diff *),Bash(npm test*),Bash(pnpm *). - 확인 후 허용:
Bash(git commit *),Bash(git push *), 새 dependency 설치. - 하드 차단:
Bash(rm -rf *),Bash(curl * | sh),Bash(*--force*), secrets 디렉토리 쓰기.