다섯 가지 샌드박스 Profile
workspace, devbox, read-only, strict, off는 파일 시스템과 서브프로세스 네트워크에 대한 서로 다른 capability 집합을 정의합니다. 이름은 방향을 제공하지만, 실제 경계는 파싱된 capability set을 확인해야 합니다.
ProfileName과 SandboxProfile에서 읽기/쓰기 및 네트워크 경계를 판단하고, custom extends를 올바르게 구성하며, 플랫폼 지원 및 강등 조건을 식별할 수 있습니다.
Profile은 다차원 능력 프리셋입니다
수평 위치는 기억을 돕기 위한 것입니다. devbox, workspace, strict의 실제 차이는 기본 읽기, 쓰기 가능 경로, 네트워크 정책을 동시에 포함합니다.
전체 파일 시스템 기본 읽기 가능; workspace, GROK_HOME, 임시 디렉토리 쓰기 가능; 서브프로세스 네트워크 제한 없음.
default_read=truerestrict_network=false
전체 파일 시스템 기본 읽기 가능; 루트 디렉토리를 열거하여 /data와 가상 파일 시스템을 제외하고 광범위하게 쓰기 권한 부여; 네트워크 제한 없음.
/data는 읽기 가능 유지, Linux에서 bwrap으로 쓰기 보호전체 파일 시스템 기본 읽기 가능; workspace 쓰기 불가; GROK_HOME, 임시 디렉토리, 필수 장치는 여전히 쓰기 가능.
restrict_network=true전역 기본 읽기 비활성화; 시스템 런타임 디렉토리와 workspace만 개방; workspace, GROK_HOME, 임시 디렉토리 쓰기 가능.
default_read=falserestrict_network=true
capability set 적용을 건너뛰고 「Sandbox disabled」를 기록합니다. none 별칭도 허용합니다.
custom extends의 기반 클래스로 사용 불가extends 규칙
- custom은 기본적으로 workspace에서 시작합니다.
- workspace, devbox, read-only, strict를 extend할 수 있습니다.
- off/none은 extend할 수 없습니다.
- 다른 custom profile은 extend할 수 없습니다.
- read_only, read_write, deny는 기반 클래스에 추가됩니다. 서브프로세스 네트워크 제한이 필요할 때 custom에서 명시적으로 restrict_network=true로 설정하세요.
전역 우선 보호
시스템은 먼저 ~/.grok/sandbox.toml을 읽고, 그다음 .grok/sandbox.toml을 읽습니다. 프로젝트 구성은 새 profile 이름만 추가할 수 있습니다. 프로젝트가 이미 전역에 존재하는 동일 이름의 profile을 선언하면, merge는 entry.or_insert를 사용하여 전역 정의를 유지합니다.
파일 시스템 제약
enforce가 활성화되고 Unix에서 실행될 때, capability set은 Landlock 또는 Seatbelt에 적용됩니다. macOS deny는 Seatbelt 규칙을 사용합니다; Linux 서브경로 read-deny는 bwrap bind-over도 필요합니다.
네트워크 제약
메인 프로세스 네트워크는 모델 API 접근을 위해 열려 있습니다. restrict_network는 현재 서브프로세스 필터링을 통해 표현되며, 소스 코드의 seccomp 구현은 Linux에서 유효하고 비-Linux 함수는 no-op입니다. 플랫폼 경계는 실제 빌드 및 런타임 환경에서 검증해야 합니다.
pub enum ProfileName {
#[default]
Workspace,
Devbox,
ReadOnly,
Strict,
Off,
Custom(String),
}
스냅샷 설명: 열거형이 완전히 보존되었습니다. 스펙트럼 다이어그램은 교육용 기억 도구이며, 실제 능력은 resolve(), essential_writable_paths(), 플랫폼 apply 결과에서 나옵니다.
수업 실습: 검토 전용 Profile 설계
요구사항: 저장소와 시스템 도구 읽기 가능, workspace 수정 불가, 임시 디렉토리 쓰기 허용, 서브프로세스 네트워크 제한, 추가로 ~/.ssh deny. 내장 기반 클래스를 선택하고, custom profile의 extends와 deny를 작성하며, 프로젝트가 사용자 전역의 동일 이름 정의를 왜 대체할 수 없는지 설명하세요.