Claude Code 상세 사용법 26: Sandboxed Bash로 안전한 자동 실행 경계 잡기 | DAKER 커뮤니티
Claude Code 상세 사용법 26: Sandboxed Bash로 안전한 자동 실행 경계 잡기
Claude Code 공식 sandbox 문서는 격리 수준을 여러 단계로 나눈다. 실무에서 먼저 이해할 것은 “권한을 줄인다”와 “격리한다”가 다르다는 점이다. permission mode는 Claude Code가 도구를 쓸 때 묻는 방식이고, sandbox는 명령이나 프로세스가 실제로 읽고 쓸 수 있는 OS 경계를 줄인다.
1. Sandboxed Bash의 범위를 정확히 본다
공식 문서 기준 sandboxed Bash는 Bash 명령과 그 자식 프로세스를 제한한다. 기본적으로 현재 작업 디렉터리와 하위 경로에는 읽기/쓰기를 허용하고, 그 밖의 파일 수정은 막는다. 네트워크는 처음 만나는 도메인마다 승인 프롬프트가 뜨며, allowedDomains로 미리 허용할 수 있다.
중요한 한계도 있다. built-in file tool, MCP server, hook은 이 Bash sandbox 밖에서 실행될 수 있다. 그래서 “Claude 전체를 격리해야 한다”면 sandbox runtime, dev container, Docker, VM, Claude Code on the web 중에서 골라야 한다.
2. 시작은 /sandbox와 settings로 한다
일상 개발에서 먼저 시도할 경계는 프로젝트 설정이다. 민감한 홈 디렉터리 읽기를 막고 프로젝트만 다시 허용하는 예시는 다음과 같다.
{
"sandbox": {
"enabled": true,
"filesystem": {
"denyRead": ["~/"],
"allowRead": ["."]
}
}
}이 설정은 프로젝트의 .claude/settings.json에 둘 때 의미가 선명하다. 여기서 .은 프로젝트 루트로 해석된다. 같은 내용을 ~/.claude/settings.json에 두면 .이 홈의 Claude 설정 디렉터리를 가리킬 수 있어 의도와 달라진다.
3. permission mode와 함께 설계한다
Claude Code에는 default, acceptEdits, plan, auto, dontAsk, bypassPermissions 같은 permission mode가 있다. bypassPermissions는 격리된 container나 VM에서만 쓰는 것이 맞다. 로컬 노트북에서는 plan으로 탐색하고, 작은 수정에는 acceptEdits, 긴 반복 작업은 sandbox와 auto mode를 함께 검토한다.
plan mode로 저장소 구조와 테스트 명령만 조사해줘.
수정은 하지 말고 sandbox가 막을 수 없는 MCP나 hook 접근이 필요한지도 알려줘.claude --permission-mode plan자동 테스트 루프를 돌릴 때는 네트워크 도메인과 파일 쓰기 범위를 미리 정한다.
{
"sandbox": {
"enabled": true,
"network": {
"allowedDomains": ["registry.npmjs.org", "api.github.com"]
},
"filesystem": {
"allowWrite": ["./coverage", "./tmp"]
}
}
}4. 실패 모드와 보안 오해
샌드박스가 켜져도 모델로 전송되는 프롬프트와 Claude가 읽은 파일 내용이 사라지는 것은 아니다. 비밀값이 있는 파일은 읽기 자체를 denyRead로 막고, 저장소에는 샘플 env만 둔다. 네트워크 allowlist가 넓으면 읽을 수 있는 데이터가 외부로 나갈 위험도 남는다.
명령이 실패하면 “Claude가 실수했다”보다 sandbox 경계를 먼저 본다. 쓰기 실패는 allowWrite, 읽기 실패는 denyRead/allowRead, 다운로드 실패는 allowedDomains, OS 차이는 macOS Seatbelt와 Linux/WSL2 bubblewrap 차이를 확인한다.
Senior takeaway: agentic coding에서 샌드박스는 생산성 기능이 아니라 권한 축소 전략이다. 클로드 코드로 테스트 자동화와 CLI 자동화를 길게 돌릴수록, permission mode만 믿지 말고 Bash, MCP, hook, 파일 도구가 어느 경계 안에
있는지 문서화해야 한다.