harnesslog.dev

Claude Code, AI, 개발 이야기

KO · EN
H
hwangjungmin

Docker Sandbox 이전에는 선택지가 두 개였다. bash 명령어마다 수동으로 승인하거나, --dangerously-skip-permissions 걸고 기도하거나. 전자는 생산성을 죽이고, 후자는 이름 그대로 위험하다.

Docker Sandbox는 그 사이에 있다. OS 레벨 프리미티브(macOS는 Seatbelt, Linux는 bubblewrap)로 파일시스템과 네트워크 격리를 건다. Claude는 작업 디렉토리 안에서만 읽고 쓸 수 있고, 허용된 도메인만 접근 가능하다. 안전한 명령어는 permission 프롬프트 없이 바로 실행되고, 그 외에는 차단된다. /sandbox만 치면 된다.

--dangerously-skip-permissions와의 결정적 차이는 prompt injection 방어다. 악성 의존성이 Claude를 속여서 뭔가 실행시켜도, ~/.bashrc 건드릴 수 없고, SSH 키 유출 안 되고, 공격자 서버에 연결도 못 한다. skip-permissions는 이 모든 게 뚫려 있다.

근데 아직 거친 부분이 꽤 있다. Docker 자체가 sandbox 안에서 호환이 안 돼서 excludedCommands로 빼줘야 한다. 환경변수 하나 추가하려면 sandbox 재시작해야 하는데 대화 컨텍스트가 날아간다. 일부 dev 의존성은 sandbox OS 아키텍처랑 안 맞고, watchman은 작동을 안 해서 Jest 쓸 때 --no-watchman 붙여야 한다. 그리고 sandbox 안에서 명령어가 실패하면 dangerouslyDisableSandbox escape hatch가 발동되는데, 이게 생각보다 자주 뜬다.

방향은 맞다. 아직 매끄럽지 않을 뿐이다.