2026 DeepSeek Harness Mac 샌드박스는 안전한가: Seatbelt 검수 체크리스트

작업 폴더 밖의 파일이 실제로 바뀌었는데, 화면에는 단순한 명령 실패처럼만 표시됩니다.
가장 빠른 해법은 통제된 코드만 Mac에 남기는 것입니다. Seatbelt가 read-only, workspace-write, 장애 시 중단, 일회성 권한 승인을 모두 통과하면 제한적으로 사용할 수 있습니다. 하나라도 증명하지 못하면 전용 원격 Mac이나 더 강한 격리 환경으로 옮겨야 합니다.
이 글은 다음 독자를 위한 검수 문서입니다.
- 개인 개발자: 일상적인 프로젝트 폴더에서 DeepSeek Harness가 경계를 넘는지 확인하려는 경우입니다.
- 보안 및 플랫폼 엔지니어: Seatbelt의 공식 동작을 실제 승인 항목으로 바꾸려는 경우입니다.
- 팀 책임자: 공유 Mac, 전용 원격 Mac, 별도 격리 환경 중 장기 운영 방식을 정해야 하는 경우입니다.
마지막 확인 시점은 2026년 8월 21일입니다. 공식 저장소의 최신 공개 릴리스와 문서를 기준으로 확인했으며, 당시 최신 공개 버전은 2026년 8월 19일 공개된 v0.1.0-rc.8입니다. DeepSeek Harness는 여전히 개발자 미리보기이며 호환성을 깨는 변경이 발생할 수 있습니다. 공식 릴리스 목록에서 운영 전 다시 확인해야 합니다.
2026 DeepSeek Harness Mac 샌드박스 안전성을 가르는 기준
Seatbelt의 승자는 파일 쓰기 방어가 필요한 통제된 프로젝트입니다. 다만 이것은 완전한 호스트 격리나 네트워크 격리가 아닙니다. 파일 효과를 제한하는 장치와 모델 요청, 프로세스 실행, 자격 증명 관리는 서로 다른 통제면입니다.
다음 네 가지를 모두 재현할 수 있을 때만 개인 개발 환경에서 제한적으로 운영할 수 있습니다.
- 제한 모드가 실제로 적용됩니다.
- 작업 폴더 밖 쓰기가 거부됩니다.
- 샌드박스 실행기에 문제가 생기면 명령이 비격리 상태로 전환되지 않습니다.
- 더 넓은 권한은 구체적인 사유와 승인 뒤 한 번만 적용됩니다.
반대로 다음 조건이면 로컬 Mac을 승자로 볼 수 없습니다.
- 출처를 확인하지 않은 저장소를 실행합니다.
- 여러 사용자가 같은 계정이나 작업 폴더를 공유합니다.
- 장기간 실행되는 에이전트에 민감한 자격 증명을 넣습니다.
- 거부된 명령을 해결하려고
danger-full-access를 기본값으로 사용합니다. - 샌드박스가 적용됐다는 로그만 있고 실제 거부 테스트가 없습니다.
공식 문서는 Mac용 로컬 백엔드가 Seatbelt와 sandbox-exec를 사용한다고 설명합니다. 동시에 sandbox-exec는 더 이상 권장되지 않는 실행 방식으로 표시되어 있습니다. 현재 macOS에 함께 제공된다는 사실만으로 미래의 지속성을 보장할 수는 없습니다. 공식 샌드박스 설명과 샌드박스 정책 문서를 함께 검수해야 합니다.
첫 번째 검수: 읽기 전용과 작업 공간 쓰기의 실제 경계
DeepSeek Harness는 Mac에서 작업 폴더 밖의 파일을 바꿀 수 있습니까?
제한 모드가 정상 적용되면 허용 범위 밖의 파일 효과는 거부되어야 합니다. 그러나 표면적인 문자열만 확인해서는 안 됩니다. 상대 경로, 심볼릭 링크, 임시 디렉터리, 경로 정규화 뒤의 실제 대상까지 확인해야 합니다.
read-only는 작업 대상에 대한 쓰기 효과를 허용하지 않는 모드로 검수합니다. workspace-write는 지정된 작업 공간 안에서만 쓰기를 허용하는 모드로 검수합니다. danger-full-access는 제한을 우회하는 예외 모드이므로, 잦은 거부를 해결하는 기본 선택지가 아닙니다. 세 모드의 정책 해석 방식은 공식 정책 해석 문서에 맞춰 기록해야 합니다.
| 검수 대상 | read-only에서 기대하는 결과 |
workspace-write에서 기대하는 결과 |
실패로 보는 신호 |
|---|---|---|---|
| 작업 공간 안의 새 파일 | 쓰기 거부 | 쓰기 허용 | 허용 범위가 문서와 다름 |
| 작업 공간 밖의 기존 파일 | 쓰기 거부 | 쓰기 거부 | 파일 내용이나 권한이 변경됨 |
| 임시 디렉터리 | 정책에 명시된 범위만 허용 | 정책에 명시된 범위만 허용 | 임시 경로라는 이유만으로 무제한 허용 |
| 심볼릭 링크가 가리키는 경로 | 실제 대상 기준으로 판정 | 실제 대상 기준으로 판정 | 링크 이름만 보고 허용 |
danger-full-access |
제한 없음 | 제한 없음 | 일반 작업에 자동 적용 |
검수 기록에는 명령, 요청된 경로, 정규화된 실제 경로, 반환 결과, 파일의 사전·사후 해시를 남깁니다. 파일 쓰기 거부와 명령 자체의 실패는 같은 결과가 아닙니다.
주의: 작업 공간 안에 민감한 설정 파일이 있으면
workspace-write도 충분하지 않습니다. 에이전트가 편집할 수 있는 디렉터리와 자격 증명이 읽히는 디렉터리를 분리해야 합니다.
두 번째 검수: 네 가지 경로 테스트로 경계를 증명하기
다음 순서로 최소 테스트를 구성합니다. 명령은 실제 운영 폴더 이름에 맞게 바꾸되, 승인 없는 예외 권한은 사용하지 않습니다.
-
검수용 작업 공간을 만듭니다.
일반 소스와 별도로 빈 폴더를 만들고, 작업 공간 안팎에 각각 기준 파일을 둡니다. 파일의 초기 내용과 권한을 기록합니다. -
읽기 전용 상태를 확인합니다.
작업 공간 안에 새 파일을 만들고 기존 파일을 덮어쓰는 동작을 각각 요청합니다. 두 작업이 모두 거부되는지 확인합니다. -
작업 공간 쓰기를 확인합니다.
workspace-write에서 작업 공간 안의 새 파일 생성과 기존 파일 수정을 실행합니다. 허용되어야 하지만, 부모 폴더나 형제 폴더에는 쓰지 못해야 합니다. -
작업 공간 밖 쓰기를 확인합니다.
부모 폴더, 별도 임시 위치, 홈 폴더 아래의 검수용 경로를 각각 대상으로 삼습니다. 반환된 거부 결과와 실제 파일 변경 여부를 따로 기록합니다. -
경로 해석을 확인합니다.
..이 포함된 상대 경로와 심볼릭 링크를 사용합니다. 보이는 경로가 작업 공간 안이어도 정규화된 대상이 밖이면 거부되어야 합니다. -
재실행 결과를 비교합니다.
같은 요청을 새 호출에서 반복합니다. 한 번 허용된 경로가 다음 호출에서도 자동으로 넓어지지 않는지 확인합니다.
Seatbelt의 read-only와 workspace-write는 어떻게 검수해야 합니까?
모드 이름을 확인하는 것으로 끝내지 않습니다. 안에서 허용되어야 하는 동작 하나와 밖에서 거부되어야 하는 동작 하나를 짝으로 실행합니다. 그리고 로그가 아니라 실제 파일의 해시와 수정 시각을 비교합니다. 이 방식이어야 경로 문자열 변조나 잘못된 작업 공간 설정을 발견할 수 있습니다.
세 번째 검수: 정상 거부와 실행기 장애를 분리하기
파일 접근이 거부된 것은 정책이 작동했다는 신호일 수 있습니다. 반면 실행기 자체가 실패한 것은 별도의 장애입니다. 두 결과를 “오류가 났으니 안전하다”라고 합치면 안 됩니다.
검수자는 다음 세 가지를 별도 분류해야 합니다.
- 일반 명령 실패: 명령의 인자나 프로그램 자체가 잘못된 경우입니다.
- 파일 접근 거부: 샌드박스 정책이 요청한 파일 효과를 막은 경우입니다.
runnerFailed또는SANDBOX_UNAVAILABLE: 실행기나 샌드박스 준비가 실패한 경우입니다.
sandbox-exec를 사용할 수 없으면 DeepSeek Harness가 샌드박스를 건너뜁니까?
공식 fail-closed 약속에 따르면 샌드박스를 준비할 수 없을 때 명령을 비격리 상태로 계속 실행해서는 안 됩니다. 실행 파일이 없거나 실행할 수 없거나 정책 설정을 거부하는 상황에서 SANDBOX_UNAVAILABLE이 반환되는지 확인해야 합니다. 공식 셸 하위 시스템 문서의 오류 처리와 실제 실행 결과가 일치해야 통과입니다.
| 장애 상황 | 통과 기준 | 즉시 중단해야 하는 결과 |
|---|---|---|
sandbox-exec를 찾지 못함 |
SANDBOX_UNAVAILABLE 또는 동등한 실패 반환 |
일반 셸로 명령 실행 |
| 실행 권한이 없음 | 격리 실행 거부 | 자동으로 비격리 실행 |
| 정책 파일 해석 실패 | 실행 전 중단 | 기본 허용 정책으로 진행 |
| 실행기 내부 오류 | runnerFailed로 분류 |
성공처럼 결과 반환 |
| 일반 명령 오류 | 명령 실패로 기록 | 샌드박스 장애로 오분류 |
이 시험에서는 실패 메시지보다 실패 뒤 명령이 실행되지 않았는지가 중요합니다. 테스트 대상 파일에 변경 흔적이 없어야 하며, 감사 로그에는 실패 종류가 정책 거부인지 실행기 장애인지 구분되어야 합니다.
네 번째 검수: 권한 상승은 한 번의 승인으로 끝내기
에이전트가 더 넓은 sandbox_permissions를 요청할 수 있다면 승인 절차가 보안 경계가 됩니다. 요청에는 포괄적인 “작업에 필요함”이 아니라 대상 경로, 필요한 동작, 필요한 이유가 들어가야 합니다.
다음 항목을 순서대로 확인합니다.
- 제한 상태에서 권한 확대 요청을 발생시킵니다.
- 요청에 구체적인
justification이 표시되는지 확인합니다. - 거부하면 명령이 실행되지 않는지 확인합니다.
- 사용자가 취소하거나 승인 서비스가 응답하지 않아도 실행되지 않는지 확인합니다.
- 승인한 뒤 해당 호출만 넓은 권한을 갖는지 확인합니다.
- 다음 호출에서 같은 권한이 자동 상속되지 않는지 확인합니다.
danger-full-access는 예외 처리를 위한 모드입니다. 반복되는 거부를 없애기 위해 기본 설정으로 바꾸면 검수의 의미가 사라집니다. 넓은 권한이 정말 필요한 경우에도 승인 전후의 명령과 대상 경로를 남겨야 합니다.
다섯 번째 검수: 자체 호스팅 DeepSeek V4와 파일 권한은 별개입니다
Seatbelt가 파일 쓰기를 제한해도 모델 요청과 네트워크 접근, 비밀 관리가 자동으로 안전해지는 것은 아닙니다. 특히 자체 호스팅 DeepSeek V4나 OpenAI 호환 엔드포인트를 연결할 때는 Harness 실행 호스트와 추론 엔드포인트를 별도 구성 요소로 그려야 합니다.
확인할 값은 다음과 같습니다.
base URL이 예상한 추론 서버를 가리키는지 확인합니다.Provider ID가 프로젝트 설정에 의해 임의로 바뀌지 않는지 확인합니다.- API 키가 작업 폴더의 편집 가능한 설정 파일에 저장되지 않는지 확인합니다.
- 에이전트가 읽을 수 있는 환경 변수와 로그에 키가 노출되지 않는지 확인합니다.
- 요청 주소, 모델 식별자, 오류 로그의 보존 범위를 정합니다.
- 프로젝트 안의 설정 변경이 신뢰된 엔드포인트로 리디렉션되지 않는지 확인합니다.
자체 호스팅 DeepSeek V4 연결에서 API 키와 엔드포인트를 어떻게 보호합니까?
프로젝트 설정에는 식별자와 허용된 주소만 두고, 비밀 값은 에이전트가 수정할 수 없는 별도 주입 경로에 둡니다. 승인된 base URL 목록과 실제 연결 주소를 비교하는 검사도 필요합니다. Provider 설정의 세부 필드와 자격 증명 처리 방식은 변경될 수 있으므로 공식 Provider 설정 안내를 기준으로 재검수해야 합니다.
Harness가 MIT 라이선스라는 사실도 비용과 보안 책임을 없애지 않습니다. 라이선스는 코드 사용 조건에 관한 내용입니다. 모델 호출 비용, 자체 추론 서버 운영비, Mac 실행 환경과 키 관리 비용은 별도로 판단해야 합니다. 공식 Harness 페이지도 이 구분을 바꾸지 않습니다.
경험상 가장 위험한 배치는 샌드박스 안에 소스와 키를 함께 넣는 방식입니다. 파일 쓰기는 제한되어도 읽기 가능한 비밀은 프롬프트, 로그, 오류 출력으로 유출될 수 있습니다.
로컬 Mac과 전용 원격 Mac 중 어느 쪽이 남는가
아래 표는 성능 비교가 아니라 운영 위험을 비교하는 도구입니다. 각 항목에서 왼쪽에 가까울수록 로컬 Mac을 유지할 이유가 있고, 오른쪽에 가까울수록 전용 원격 Mac이나 더 강한 격리가 필요합니다.
| 판단 기준 | 로컬 Mac 유지 | 전용 원격 Mac | 더 강한 격리 |
|---|---|---|---|
| 코드 신뢰도 | 직접 작성하고 검토한 코드 | 팀 저장소와 제한된 외부 코드 | 출처 불명 또는 악성 가능 코드 |
| 사용자 수 | 한 명 | 제한된 팀 사용자 | 다수 사용자가 공유 |
| 실행 시간 | 짧은 확인 작업 | 지속적인 개발 작업 | 장시간 자동 실행 |
| 자격 증명 | 테스트용 낮은 권한 키 | 제한된 서비스 키 | 운영 권한이나 고객 데이터 접근 |
| 장애 복구 | 수동 재실행 가능 | 초기화와 원격 접근 필요 | 증거 보존과 자동 격리 필요 |
| 파일 범위 | 임시 작업 폴더 | 전용 사용자와 허용 디렉터리 | 호스트와 데이터 저장소 분리 |
운영 점수는 숫자로 꾸미기보다 조건으로 판정하는 편이 낫습니다. 다섯 기준 중 코드 신뢰도, 자격 증명 민감도, 장애 복구 중 하나라도 높은 위험이면 공유 Mac을 피합니다. 경계를 재현하지 못하면 배포를 중단합니다. 지속 실행이 필요하고 환경을 깨끗하게 되돌려야 한다면 전용 원격 Mac이 현실적인 중간 선택입니다.
공유 Mac에는 사용자 계정, 작업 폴더, 로그, 키 저장 위치가 섞이기 쉽습니다. 전용 원격 Mac은 네트워크 위험을 없애지는 않지만, 사용자와 디렉터리, 재설정 절차를 분리하기 쉽습니다. 물리 인터페이스가 필요하거나 장기간 고정 부하가 계속되면 직접 구매가 더 적합할 수 있습니다.
최종 승인 전에 남길 검수 기록
운영 승인 문서에는 다음 내용을 빠짐없이 남깁니다.
- 검수한 Harness 버전과 문서 확인 날짜
- 사용한 Mac과 실행 계정의 범위
read-only,workspace-write,danger-full-access별 실제 결과- 작업 공간 안팎, 임시 경로, 심볼릭 링크의 결과
SANDBOX_UNAVAILABLE,runnerFailed, 일반 명령 실패의 분류- 거부, 취소, 승인 서비스 장애 뒤 명령 실행 여부
- 승인 권한이 다음 호출로 넘어가지 않았다는 증거
base URL, Provider ID, 키 주입 위치, 로그 보존 범위- 실패 시 호스트 초기화와 자격 증명 폐기 절차
현재 환경의 콘솔과 접속 흐름을 정리해야 한다면 Mac 원격 콘솔 안내를 함께 확인할 수 있습니다. 별도 환경의 비용 조건을 비교할 때는 Mac 이용 요금 안내에서 실제 제공 범위를 확인해야 합니다. 단, 가격표만으로 샌드박스 검수 결과를 대신할 수는 없습니다.
현재 Mac에 계속 붙여 두는 방식은 별도 호스트 분리가 어렵고, 사용자가 늘수록 작업 폴더와 자격 증명이 섞이며, 장애 뒤 초기화가 수동으로 남는다는 단점이 있습니다. 반면 전용 원격 Mac은 실행 환경을 분리하고 재설정 절차를 운영하기 쉽습니다. 따라서 기존 Mac이 전용 호스트, 지속 접속, 환경 초기화를 만족하지 못한다면 ProxyMac의 필요할 때만 제공되는 원격 Mac 환경을 검토하는 편이 안전 판단을 흐리지 않습니다. 통제된 개인 작업은 로컬에 남기고, 신뢰할 수 없는 저장소나 민감한 V4 연결은 분리된 환경으로 보내는 식으로 용도를 나누면 됩니다.