03-실전
03. 실전 — 사고에서 배우기
섹션 제목: “03. 실전 — 사고에서 배우기”사례 1: rm -rf ~/
섹션 제목: “사례 1: rm -rf ~/”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 세션을 같은 컨텍스트에 두지 않는다.
처방 요약: “두 보호선” 셋업
섹션 제목: “처방 요약: “두 보호선” 셋업”- 하한선 deny —
rm -rf,sudo,mkfs,dd of=/dev/,:(){:|:&};:등을 글로벌 deny. - 워킹 디렉터리 화이트리스트 —
cwd외부 쓰기 금지. - 위험 카테고리는 ask —
npm install,pip install, IaCapply/destroy,git push --force. - sandbox 켜기 — 적어도 새 저장소·튜토리얼은 Devcontainer.
- 자격 증명 분리 — 프로덕션 비밀은 별도 호스트/에이전트.
Anthropic의 기본값에 의존하지 마라
섹션 제목: “Anthropic의 기본값에 의존하지 마라”기본 모드(default)도 위험 작업에 대화형 확인을 띄우지만, 사용자가 “yes-fatigue”로 자동 승인해 버리면 무력하다. Korny Sietsma의 결론을 빌리면 — 기본값은 출발점이지 끝점이 아니다. 프로젝트마다 deny 리스트를 한 번씩 손보는 것이 본 챕터의 실천 과제다.