Gateway
샌드박스와 도구 정책 및 권한 상승 비교
OpenClaw에는 서로 관련되어 있지만 다른 세 가지 제어 기능이 있습니다.
- 샌드박스 (
agents.defaults.sandbox.*/agents.list[].sandbox.*)는 도구가 실행되는 위치(샌드박스 백엔드 또는 호스트)를 결정합니다. - 도구 정책 (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*)은 사용 가능하거나 허용되는 도구를 결정합니다. - 권한 상승 (
tools.elevated.*,agents.list[].tools.elevated.*)은 샌드박스 환경에서 샌드박스 외부로 실행하기 위한exec전용 탈출구입니다(exec대상이node로 구성된 경우에는node, 기본적으로는gateway).
빠른 디버깅
검사기를 사용하여 OpenClaw가 실제로 무엇을 하는지 확인합니다.
openclaw sandbox explainopenclaw sandbox explain --session agent:main:mainopenclaw sandbox explain --agent workopenclaw sandbox explain --json다음 항목을 출력합니다.
- 적용되는 샌드박스 모드/범위/워크스페이스 접근 권한
- 세션이 현재 샌드박스화되어 있는지 여부(기본 세션과 기본이 아닌 세션)
- 적용되는 샌드박스 도구 허용/거부 설정 및 설정 출처(에이전트/전역/기본값)
- 권한 상승 게이트와 수정에 사용할 키 경로
샌드박스: 도구가 실행되는 위치
샌드박스화는 agents.defaults.sandbox.mode로 제어합니다.
"off": 모든 항목이 호스트에서 실행됩니다."non-main": 기본 세션이 아닌 세션만 샌드박스화됩니다(그룹/채널에서 흔히 발생하는 "예상 밖"의 동작)."all": 모든 항목이 샌드박스화됩니다.
agents.defaults.sandbox.workspaceAccess는 샌드박스에서 볼 수 있는 범위를 제어합니다. 값은 "none", "ro" 또는 "rw"입니다.
전체 조합(범위, 워크스페이스 마운트, 이미지)은 샌드박스화를 참조하세요.
바인드 마운트(빠른 보안 확인)
docker.binds는 샌드박스 파일 시스템을 _관통_합니다. 마운트한 모든 항목은 설정한 모드(:ro또는:rw)로 컨테이너 내부에 표시됩니다.- 모드를 생략하면 기본값은 읽기-쓰기입니다. 소스/비밀 정보에는
:ro를 권장합니다. scope: "shared"는 에이전트별 바인드를 무시합니다(전역 바인드만 적용됨).- OpenClaw는 바인드 소스를 두 번 검증합니다. 먼저 정규화된 소스 경로에서 검증한 다음, 존재하는 가장 깊은 상위 경로를 통해 확인된 경로에서 다시 검증합니다. 상위 경로의 심볼릭 링크를 통한 이탈로는 차단 경로나 허용된 루트 검사를 우회할 수 없습니다.
- 존재하지 않는 말단 경로도 안전하게 검사합니다.
/workspace/alias-out/new-file이 심볼릭 링크인 상위 경로를 통해 차단된 경로나 구성된 허용 루트 외부로 확인되면 바인드가 거부됩니다. /var/run/docker.sock을 바인딩하면 사실상 샌드박스에 호스트 제어 권한을 넘기는 것입니다. 의도한 경우에만 수행하세요.- 워크스페이스 접근 권한(
workspaceAccess)은 바인드 모드와 별개입니다.
도구 정책: 존재하고 호출 가능한 도구
다음 계층이 중요합니다.
- 도구 프로필:
tools.profile및agents.list[].tools.profile(기본 허용 목록) - 제공자 도구 프로필:
tools.byProvider[provider].profile및agents.list[].tools.byProvider[provider].profile - 전역/에이전트별 도구 정책:
tools.allow/tools.deny및agents.list[].tools.allow/agents.list[].tools.deny - 제공자 도구 정책:
tools.byProvider[provider].allow/deny및agents.list[].tools.byProvider[provider].allow/deny - 샌드박스 도구 정책(샌드박스화된 경우에만 적용):
tools.sandbox.tools.allow/tools.sandbox.tools.deny및agents.list[].tools.sandbox.tools.*
일반 원칙:
deny가 항상 우선합니다.allow가 비어 있지 않으면 그 외 모든 항목은 차단된 것으로 처리됩니다.- 도구 정책은 최종 차단 장치입니다.
/exec로 거부된exec도구를 재정의할 수 없습니다. - 도구 정책은 이름을 기준으로 도구의 사용 가능 여부를 필터링하며,
exec내부의 부작용은 검사하지 않습니다.exec가 허용되어 있다면write,edit또는apply_patch를 거부해도 셸 명령이 읽기 전용으로 바뀌지는 않습니다. /exec는 권한이 있는 발신자의 세션 기본값만 변경하며, 도구 접근 권한을 부여하지 않습니다.- 제공자 도구 키에는
provider(예:google-antigravity) 또는provider/model(예:openai/gpt-5.4)을 사용할 수 있습니다. - 도구 정책 단계에서 도구가 제거되거나 샌드박스 도구 정책이 호출을 차단하면 Gateway 로그에
agents/tool-policy감사 항목이 포함됩니다.openclaw logs를 사용하여 규칙 레이블, 구성 키 및 영향을 받는 도구 이름을 확인하세요.
도구 그룹(축약 표기)
도구 정책(전역, 에이전트, 샌드박스)은 여러 도구로 확장되는 group:* 항목을 지원합니다.
{ tools: { sandbox: { tools: { allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"], }, }, },}사용 가능한 그룹:
| 그룹 | 도구 |
|---|---|
group:runtime |
exec, process, code_execution (bash는 exec의 별칭으로 허용됨) |
group:fs |
read, write, edit, apply_patch |
group:sessions |
sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status |
group:memory |
memory_search, memory_get |
group:web |
web_search, x_search, web_fetch |
group:ui |
browser, canvas |
group:automation |
heartbeat_respond, cron, gateway |
group:messaging |
message |
group:nodes |
nodes, computer |
group:agents |
agents_list, get_goal, create_goal, update_goal, update_plan, skill_workshop |
group:media |
image, image_generate, music_generate, video_generate, tts |
group:openclaw |
대부분의 OpenClaw 기본 제공 도구(read/write/edit/apply_patch/exec/process 파일 시스템 및 런타임 기본 요소, canvas, 제공자 Plugin 제외) |
group:plugins |
bundle-mcp를 통해 노출되는 구성된 MCP 서버를 포함하여, 로드된 Plugin 소유 도구 전체 |
읽기 전용 에이전트에서는 샌드박스 파일 시스템 정책이나 별도의 호스트 경계가 읽기 전용 제약을 강제하지 않는 한, 파일 시스템 변경 도구뿐 아니라 group:runtime도 거부하세요.
샌드박스화된 MCP 서버의 경우 샌드박스 도구 정책이 두 번째 허용 게이트로 작동합니다. mcp.servers가 구성되어 있지만 샌드박스화된 턴에 기본 제공 도구만 표시되는 경우 bundle-mcp, group:plugins 또는 outlook__send_mail, outlook__*과 같은 서버 접두사가 붙은 MCP 도구 이름/글로브를 tools.sandbox.tools.alsoAllow에 추가한 다음 Gateway를 다시 시작하거나 다시 로드하고 도구 목록을 다시 캡처하세요. 서버 글로브는 제공자에 안전한 MCP 서버 접두사를 사용합니다. [A-Za-z0-9_-] 이외의 문자는 -로 바뀌고, 문자로 시작하지 않는 이름에는 mcp- 접두사가 붙으며, 길거나 중복되는 접두사는 잘리거나 접미사가 붙을 수 있습니다.
현재 openclaw doctor는 mcp.servers의 OpenClaw 관리 서버에 대해 이 구성을 검사합니다. 번들 Plugin 매니페스트 또는 Claude .mcp.json에서 로드된 MCP 서버에도 동일한 샌드박스 게이트가 적용되지만, 이 진단 기능은 아직 해당 소스를 열거하지 않습니다. 해당 도구가 샌드박스화된 턴에서 사라지는 경우 동일한 허용 목록 항목을 사용하세요.
권한 상승: exec 전용 "호스트에서 실행"
권한 상승은 추가 도구를 부여하지 않으며, exec에만 영향을 줍니다.
- 샌드박스화된 경우
/elevated on(또는elevated: true가 설정된exec)은 샌드박스 외부에서 실행됩니다(승인이 여전히 필요할 수 있음). - 세션의
exec승인을 건너뛰려면/elevated full을 사용하세요. - 이미 직접 실행 중이라면 권한 상승은 사실상 아무 효과가 없습니다(게이트는 계속 적용됨).
- 권한 상승은 Skills 범위로 제한되지 않으며, 도구 허용/거부를 재정의하지도 않습니다.
- 권한 상승은
host=auto에서 임의의 호스트 간 재정의를 허용하지 않습니다. 일반적인exec대상 규칙을 따르며, 구성된 대상이나 세션 대상이 이미node인 경우에만node를 유지합니다. /exec는 권한 상승과 별개입니다. 권한이 있는 발신자의 세션별exec기본값만 조정합니다.
게이트:
- 활성화:
tools.elevated.enabled(선택적으로agents.list[].tools.elevated.enabled) - 발신자 허용 목록:
tools.elevated.allowFrom.<provider>(선택적으로agents.list[].tools.elevated.allowFrom.<provider>)
권한 상승 모드를 참조하세요.
일반적인 "샌드박스 감옥" 문제 해결
"샌드박스 도구 정책에 의해 도구 X가 차단됨"
수정 키(하나 선택):
- 샌드박스 비활성화:
agents.defaults.sandbox.mode=off(또는 에이전트별agents.list[].sandbox.mode=off) - 샌드박스 내부에서 도구 허용:
tools.sandbox.tools.deny에서 제거(또는 에이전트별agents.list[].tools.sandbox.tools.deny)- 또는
tools.sandbox.tools.allow에 추가(또는 에이전트별 허용 목록)
openclaw logs에서agents/tool-policy항목을 확인하세요. 해당 항목에는 샌드박스 모드와 허용 또는 거부 규칙 중 어느 것이 도구를 차단했는지가 기록됩니다.
"기본 세션인 줄 알았는데 왜 샌드박스화되어 있나요?"
"non-main" 모드에서는 그룹/채널 키가 기본 세션이 아닙니다. 기본 세션 키(sandbox explain에 표시됨)를 사용하거나 모드를 "off"로 전환하세요.
관련 문서
- 샌드박스화 -- 전체 샌드박스 참고 자료(모드, 범위, 백엔드, 이미지)
- 다중 에이전트 샌드박스 및 도구 -- 에이전트별 재정의 및 우선순위
- 권한 상승 모드