Claude Code 샌드박스 설정: 파일·네트워크 범위를 격리하고 예외를 검토하는 법
TL;DR
Claude Code의 Bash sandbox는 셸 명령과 자식 프로세스가 접근할 파일 경로와 네트워크 도메인을 운영체제 수준에서 제한하는 기능입니다. Claude Code 세션에서
/sandbox
를 열면 모드, 샌드박스 밖 재시도 허용 여부, 최종 설정과 Linux·WSL2 의존성을 확인할 수 있습니다.
처음에는 regular permissions로 두고
allowUnsandboxedCommands
를 끈 Strict sandbox mode에서 비민감 fixture를 시험하는 편이 안전합니다. 프로젝트 안의 정상 쓰기는 통과하고 프로젝트 밖 쓰기와 새 도메인 접근은 차단되거나 승인 흐름으로 들어가는지 각각 확인한 뒤, 필요한 예외만 좁게 검토합니다.
핵심 3줄 요약
/sandbox
를 실행하고 Mode·Overrides·Config, Linux·WSL2라면 Dependencies까지 확인합니다.allowWrite
, 허용 도메인,
excludedCommands
가운데 가장 좁은 예외를 고르고 사람이 승인합니다.이 글에서 다룰 내용
Claude Code Bash sandbox의 한 문장 정의, 지원 플랫폼과 의존성,
/sandbox
의 네 가지 확인 지점, 파일시스템·네트워크 격리의 차이, 정상·차단 양쪽 검증, 복사용 점검 프롬프트, 샌드박스 밖 재시도와 예외 설정의 주의점을 다룹니다.
Claude Code 샌드박스는 무엇이고 언제 쓰면 좋은가
Claude Code는 Bash에서 테스트, 빌드, 패키지 관리, Git 명령을 실행할 수 있습니다. 승인 창만 보고 명령을 허용하면 자식 프로세스가 실제로 어느 파일과 도메인에 접근하는지까지 판단하기 어렵습니다.
Claude Code Bash sandbox는 명령 문자열을 검토하는 permission과 별도로, 실행 중인 Bash 명령과 자식 프로세스의 파일시스템·네트워크 경계를 운영체제가 집행하게 합니다. 반복되는 테스트와 빌드는 자동화하되 작업 폴더 밖의 파일이나 불필요한 외부 도메인으로 영향 범위가 넓어지는 것을 막고 싶을 때 맞습니다.
이 기능은 Claude Code 전체를 가상 머신에 넣는 기능이 아닙니다. 공식 문서는 sandboxed Bash tool을 대상으로 설명하며 permission rules와 permission modes도 별도로 적용됩니다. 따라서 샌드박스를 켰다는 이유로 승인 규칙, 비밀 파일 보호, diff 검수와 백업을 생략하면 안 됩니다.
시작 전에 확인할 플랫폼과 안전 경계
공식 문서 기준 지원 플랫폼은 macOS, Linux, WSL2입니다. macOS는 내장 Seatbelt를 사용합니다. Linux와 WSL2에서는 파일시스템 격리에 bubblewrap, 네트워크 프록시 연결에 socat이 필요합니다. Native Windows는 지원되지 않으므로 Windows에서는 WSL2 배포판 안에서 실행해야 합니다.
Linux·WSL2에서 패키지가 빠졌더라도 먼저 Claude Code 안에서
/sandbox
를 열 수 있습니다. Dependencies 탭은 빠진 항목을 보여 줍니다. 필요한 패키지를 설치한 뒤에는 Claude Code를 다시 시작하고
/sandbox
를 다시 확인합니다.
기본 동작도 놓치면 안 됩니다. 의존성이 없거나 플랫폼이 지원되지 않아 sandbox를 시작하지 못하면 Claude Code는 경고를 보여 준 뒤 명령을 샌드박스 없이 실행할 수 있습니다. 조직에서 sandbox를 보안 게이트로 강제하려면 관리자가
sandbox.failIfUnavailable
을 따로 검토해야 합니다. 화면에 경고가 없다는 이유만으로 격리에 성공했다고 추정해서는 안 됩니다.
`/sandbox`로 격리와 예외를 검증하는 순서
1. 전용 시험 폴더와 원상복구 기준을 만듭니다
실제 저장소로 곧바로 시험하지 말고 비민감 파일만 든 별도 Git 저장소나 복사본을 준비합니다. 원본 저장소, 고객 데이터, 자격증명, 배포 키는 시험 폴더에 넣지 않습니다.
시험 전에 현재 파일 목록과
git status
를 기록합니다. 작업이 끝났을 때 새로 생겨도 되는 파일은 프로젝트 안의
sandbox-check.txt
하나뿐이라고 정합니다. 홈 폴더의
~/claude-sandbox-check.txt
와 외부 전송은 완료 기준에서 제외합니다.
2. Claude Code 안에서
/sandbox
를 엽니다
/sandbox
는 운영체제 셸에 입력하는 명령이 아니라 Claude Code 대화형 입력창에서 실행하는 slash command입니다. 패널이 열리면 Mode, Overrides, Config를 확인합니다. Linux에서 선택 의존성이 빠졌다면 Dependencies 탭도 표시될 수 있습니다.
Mode는 auto-allow와 regular permissions 가운데 선택합니다. 첫 검증에서는 regular permissions를 택해 샌드박스 안 명령도 기존 permission prompt 흐름을 유지합니다. auto-allow는 sandboxed Bash 명령을 별도 prompt 없이 실행할 수 있으므로 경계를 검증한 뒤에 검토합니다.
3. Overrides를 Strict sandbox mode로 제한합니다
Overrides 탭은 sandbox에서 실패한 명령을 샌드박스 밖에서 다시 시도할 수 있는지를 제어합니다. 이 동작은
allowUnsandboxedCommands
설정에 해당합니다.
첫 시험에서는 샌드박스 밖 재시도를 허용하지 않는 Strict sandbox mode를 선택합니다. 공식 문서에 따르면
allowUnsandboxedCommands
가
false
이면
dangerouslyDisableSandbox
를 이용한 밖에서의 재시도가 무시됩니다. 다만
excludedCommands
로 명시한 명령은 별도 예외이므로 Config에서 함께 확인해야 합니다.
4. Config와 적용 범위를 기록합니다
Config 탭에서 resolved sandbox settings를 확인합니다. 패널에서 모드를 고르면 현재 프로젝트의
.claude/settings.local.json
에 기록되며 이 파일은 Git에 체크인되지 않는 로컬 설정입니다. 모든 프로젝트에 적용하려면 사용자 설정
~/.claude/settings.json
의
sandbox.enabled
를 사용하고 조직 전체 강제는 managed settings로 구분합니다.
기본적으로 sandboxed commands는 현재 작업 디렉터리와 세션 임시 디렉터리에만 쓸 수 있습니다. 네트워크는 미리 허용된 도메인이 없으며 새 도메인이 처음 필요할 때 승인을 요청합니다. 현재
allowWrite
,
denyWrite
,
denyRead
,
allowedDomains
,
excludedCommands
와
allowUnsandboxedCommands
상태를 검토 메모에 남깁니다.
5. 허용과 차단을 비민감 fixture로 각각 시험합니다
허용 쪽부터 시험합니다. Claude에게 현재 폴더를 확인하고 프로젝트 안에
sandbox-check.txt
를 만들도록 요청합니다. 실행 뒤
git status
와 파일 내용을 살펴봅니다. 프로젝트 안 쓰기가 성공하고 예상한 파일 하나만 생겼다면 정상 작업은 통과입니다.
그다음 차단 쪽을 시험합니다. 홈 폴더의
~/claude-sandbox-check.txt
를 만들지 말고 해당 경로에 쓰기를 시도했을 때 어떤 차단 또는 승인 흐름이 나타나는지만 확인하도록 요청합니다. 예상과 달리 파일이 생겼다면 sandbox가 실제로 켜졌는지, filesystem isolation이 비활성화됐는지,
allowWrite
가 너무 넓은지 확인하고 파일을 사람이 삭제합니다.
네트워크는 비민감 도메인
example.com
으로 확인합니다. 새 도메인 접근에서 승인 요청이 나타나면 승인하지 않고 요청된 hostname과 명령만 기록합니다. 이미 허용돼 바로 접속되면 Config의
allowedDomains
와 조직 정책을 확인합니다. 실제 토큰, 내부 URL, 업로드 요청으로 시험하지 않습니다.
6. 예외를 최소 단위로 검토하고 사람이 승인합니다
막힌 작업이 꼭 필요하다면 명령 전체와 목적, 읽기·쓰기 경로, 접속 hostname, 자식 프로세스부터 적습니다. 프로젝트 안 경로나 세션 임시 디렉터리로 옮길 수 있는지도 따져봅니다.
파일 예외는 전체 홈 폴더보다 필요한 한 경로의
sandbox.filesystem.allowWrite
를 우선합니다. 네트워크 예외는 실제 필요한 hostname만 허용합니다. 도구 전체를
excludedCommands
에 넣는 선택과
allowUnsandboxedCommands
를 다시 켜는 선택은 sandbox 밖 실행 범위를 넓히므로 마지막 수단으로 둡니다.
승인자는 변경 전후 Config, 정상 fixture, 차단 fixture, 새 파일,
git diff
를 함께 확인합니다. 정상 작업이 계속되고 경계 밖 작업은 막히는 양쪽 검증이 끝나야 완료입니다. 패키지 설치, 배포, 비밀값 사용, 외부 전송과 운영 시스템 변경은 이 첫 검증에서 실행하지 않습니다.
그대로 복사해 쓸 프롬프트
아래 프롬프트는 Claude Code에서
/sandbox
설정을 사람이 확인한 뒤, 비민감 시험 폴더에서만 사용합니다. 차단 시험이 승인 요청으로 바뀌면 승인하지 말고 멈추도록 했습니다.
목표: 현재 Claude Code 세션의 Bash sandbox가 프로젝트 내부 정상 작업은 허용하고 프로젝트 밖 파일 쓰기와 새 네트워크 도메인 접근은 차단하거나 승인 흐름으로 보내는지 검증한다.
허용 입력: 현재 비민감 시험 저장소의 파일 목록, git status, /sandbox 패널에서 사람이 확인한 Mode·Overrides·Config 정보, example.com hostname만 사용한다.
제외 입력: 실제 저장소 원본, 고객 데이터, 개인정보, 자격증명, 환경 변수 값, 내부 URL, 배포 키, 패키지 설치, 외부 업로드, 운영 시스템 변경, 홈 폴더의 기존 파일 수정·삭제.
출력 형식: 1) 실행 전 계획, 2) 프로젝트 내부 허용 시험 결과, 3) 프로젝트 밖 쓰기 시험의 차단 또는 승인 결과, 4) 새 도메인 접근의 차단 또는 승인 결과, 5) 예상 밖 생성 파일, 6) 최소 예외 후보, 7) 사람 승인 필요 항목 순서로 표가 아닌 짧은 목록을 작성한다.
완료 기준: sandbox-check.txt만 프로젝트 안에 생성되고 git status로 확인된다. 프로젝트 밖 쓰기와 새 도메인 접근은 실행되지 않거나 승인 단계에서 멈춘다. 결과에는 실제로 관찰한 메시지와 경로만 적는다.
추정 금지: sandbox 활성 상태, 지원 플랫폼, 설정값, 차단 이유를 추정하지 않는다. /sandbox Config와 실제 실행 결과에 없는 사실을 만들지 않는다.
승인 지점: 프로젝트 밖 실행, 도메인 허용, allowWrite·excludedCommands 변경, allowUnsandboxedCommands 재활성화, 생성 파일 삭제는 모두 제안만 하고 사람이 승인하기 전에는 실행하지 않는다.
실전 활용 팁
허용 시험과 차단 시험을 한 세트로 남기면 sandbox가 느슨한지뿐 아니라 정상 업무를 가로막는지도 함께 볼 수 있습니다. 차단 로그만 모으면 빌드나 테스트가 조용히 깨진 상태를 놓칠 수 있습니다. 반대로 정상 실행만 보면 홈 폴더나 네트워크 경계가 열린 상태를 지나칠 수 있습니다.
예외 검토 메모에는 작업 목적, 요청 경로 또는 hostname, 적용 scope, 승인자, 만료 또는 재검토 시점, 원상복구 조건을 남깁니다. 편의를 위해 넓힌 예외가 계속 남지 않도록 작업이 끝난 뒤
/sandbox
Config를 다시 확인합니다.
주의할 점
- sandbox는 Bash 명령과 자식 프로세스의 경계를 집행하지만 permission rules, permission modes, 비밀 파일 보호와 코드 검수를 대신하지 않습니다.
- auto-allow에서는 sandboxed Bash 명령이 prompt 없이 실행될 수 있습니다. 경계를 검증하기 전에는 regular permissions로 시작합니다.
-
allowUnsandboxedCommands가 켜져 있으면 sandbox 실패 뒤 regular permission flow를 거쳐 밖에서 재시도할 수 있습니다. -
excludedCommands는 해당 명령을 sandbox 밖에서 실행하므로 오류 해결용 편의 목록처럼 늘리지 않습니다. -
sandbox.filesystem.disabled는 filesystem isolation을 끄고 network isolation만 유지합니다. 두 격리 층을 같은 설정으로 오해하지 않습니다. -
/var/run/docker.sock같은 강한 Unix socket을 허용하면 host 접근으로 이어질 수 있습니다. - 지나치게 넓은 쓰기 경로, 실행 파일 경로, shell 설정 파일 쓰기는 다른 보안 맥락의 코드 실행으로 이어질 수 있습니다.
- 기본 네트워크 proxy는 client가 제공한 hostname으로 허용 여부를 판단하고 기본적으로 TLS를 검사하지 않습니다. 더 강한 보장이 필요한 조직은 공식 문서의 custom proxy 경계를 별도로 검토합니다.
- Linux·WSL2에서 dependency가 없거나 플랫폼이 지원되지 않으면 기본 동작이 unsandboxed fallback일 수 있으므로 경고와 Config를 확인합니다.
자주 묻는 질문
`/sandbox`는 터미널 셸에서 실행하나요?
아닙니다. Claude Code 세션의 대화형 입력창에서 실행하는 slash command입니다. 셸에 독립 명령처럼 입력하지 않습니다.
auto-allow를 켜면 모든 명령이 자동 승인되나요?
아닙니다. 공식 문서는 sandbox 안에서 실행되는 Bash 명령을 자동 허용하는 모드로 설명합니다. sandbox에 들어가지 못하거나 허용되지 않은 네트워크가 필요한 명령은 regular permission flow로 넘어갈 수 있습니다. 먼저 regular permissions와 Strict sandbox mode로 경계를 시험하세요.
sandbox를 켜면 `.env`와 SSH 키도 자동으로 안전한가요?
그렇게 단정하면 안 됩니다. filesystem settings, credential settings, Read·Edit deny rules는 서로 역할이 다릅니다. 현재 Config와 permission rules를 함께 확인하고 실제 비밀값 대신 비민감 fixture로 차단을 검증해야 합니다.
조직 전체에 같은 설정을 강제하려면 프로젝트 설정만 배포하면 되나요?
아닙니다. 프로젝트의
.claude/settings.local.json
은 현재 프로젝트의 로컬 설정이며 Git에 체크인되지 않습니다. 조직 강제는 managed settings에서
enabled
,
failIfUnavailable
,
allowUnsandboxedCommands
같은 항목을 별도로 검토하고 정상 작업과 차단 작업을 대표 사용자로 양쪽 검증해야 합니다.
출처
마무리
Claude Code 샌드박스의 핵심은 승인 창을 줄이는 데 있지 않습니다. Bash 명령이 실제로 접근할 파일과 네트워크의 경계를 먼저 정하고 운영체제가 그 범위를 집행하게 만드는 데 있습니다.
/sandbox
에서 regular permissions와 Strict sandbox mode로 시작한 뒤 프로젝트 안 정상 쓰기와 경계 밖 쓰기·새 도메인 접근을 각각 검증하세요. 예외가 필요하면 전체 도구를 밖으로 빼기보다 경로 하나와 hostname 하나부터 검토하고 사람이 승인한 변경만 남겨야 합니다.
