콘텐츠로 이동

03-실전

Mike Wolak은 2025-10-21에 Claude Code가 여러 타깃 디렉터리를 rm -rf 한 줄에 합치다가 사용자의 홈 디렉터리까지 지운 사건을 보고했다. 셸 확장(shell expansion) 한 글자 차이의 사고였다.

진단:

  • 권한 게이트Bash(rm -rf:*) deny 규칙이 없었다.
  • sandbox도 없었다 — 호스트 셸에서 직접 실행.
  • 두 보호선이 모두 부재 → 비가역 사고.

처방:

"deny": ["Bash(rm -rf:*)", "Bash(rm -fr:*)", "Bash(:(){ :|:& };::*)"]

그리고 위험 실험은 Devcontainer 안에서.

사례 2: 프로덕션 DB 2.5년치 증발

섹션 제목: “사례 2: 프로덕션 DB 2.5년치 증발”

Alexey Grigorev (DataTalks.Club)는 Terraform 기반 마이그레이션 중 Claude가 RDS 인스턴스와 스냅샷까지 삭제하는 plan을 실행하게 두었다. Claude는 통합을 권장하지 않는다는 경고를 먼저 했지만, 사용자가 진행을 결정한 뒤 안전 확인 단계가 부족했다.

진단:

  • 권한 게이트가 Terraform destroy/apply를 ask가 아니라 allow로 둠.
  • sandbox 부재 — 진짜 프로덕션 자격 증명.
  • 모델의 경고하네스 차원의 차단으로 이어지지 않았다.

처방:

  • 비가역 IaC 명령은 항상 ask. 이상적으로는 plan-only 권한과 apply 권한을 다른 에이전트에게 분리.
  • 프로덕션 자격 증명을 가진 셸과 Claude 세션을 같은 컨텍스트에 두지 않는다.
  1. 하한선 denyrm -rf, sudo, mkfs, dd of=/dev/, :(){:|:&};: 등을 글로벌 deny.
  2. 워킹 디렉터리 화이트리스트cwd 외부 쓰기 금지.
  3. 위험 카테고리는 asknpm install, pip install, IaC apply/destroy, git push --force.
  4. sandbox 켜기 — 적어도 새 저장소·튜토리얼은 Devcontainer.
  5. 자격 증명 분리 — 프로덕션 비밀은 별도 호스트/에이전트.

Anthropic의 기본값에 의존하지 마라

섹션 제목: “Anthropic의 기본값에 의존하지 마라”

기본 모드(default)도 위험 작업에 대화형 확인을 띄우지만, 사용자가 “yes-fatigue”로 자동 승인해 버리면 무력하다. Korny Sietsma의 결론을 빌리면 — 기본값은 출발점이지 끝점이 아니다. 프로젝트마다 deny 리스트를 한 번씩 손보는 것이 본 챕터의 실천 과제다.