agents.defaults.sandbox(グローバル)または agents.list[].sandbox(エージェントごと)で制御されます。Gateway プロセスは常にホスト上に残り、有効化されている場合のみツール実行がサンドボックスへ移動します。
これは完全なセキュリティ境界ではありませんが、モデルが不適切な動作をした場合に、ファイルシステムとプロセスへのアクセスを実質的に制限します。
サンドボックス化されるもの
- ツール実行:
exec、read、write、edit、apply_patch、processなど。 - 任意のサンドボックス化ブラウザー(
agents.defaults.sandbox.browser)。
- Gateway プロセス自体。
tools.elevatedによってサンドボックス外での実行が明示的に許可されたツール。昇格された exec はサンドボックス化をバイパスし、設定されたエスケープパス(デフォルトではgateway、exec ターゲットがnodeの場合はnode)上で実行されます。サンドボックス化がオフの場合、exec はすでにホスト上で実行されているため、tools.elevatedは何も変更しません。昇格モードを参照してください。
モード、スコープ、バックエンド
3 つの独立した設定でサンドボックスの動作を制御します。| 設定 | キー | 値 | デフォルト |
|---|---|---|---|
| モード | agents.defaults.sandbox.mode | off, non-main, all | off |
| スコープ | agents.defaults.sandbox.scope | agent, session, shared | agent |
| バックエンド | agents.defaults.sandbox.backend | docker, ssh, openshell | docker |
off: サンドボックス化しません。non-main: エージェントのメインセッションを除くすべてのセッションをサンドボックス化します。メインセッションキーは常にagent:<agentId>:main(またはsession.scopeが"global"の場合はglobal)であり、設定できません。グループ/チャンネルセッションは独自のキーを使用するため、常に non-main と見なされ、サンドボックス化されます。all: すべてのセッションがサンドボックス内で実行されます。
agent: エージェントごとに 1 つのコンテナ。session: セッションごとに 1 つのコンテナ。shared: すべてのサンドボックス化されたセッションで共有される 1 つのコンテナ(このスコープでは、エージェントごとのdocker/ssh/browserオーバーライドは無視されます)。
agents.defaults.sandbox.ssh 配下にあります。OpenShell 固有の設定は plugins.entries.openshell.config 配下にあります。
| Docker | SSH | OpenShell | |
|---|---|---|---|
| 実行場所 | ローカルコンテナ | SSH でアクセス可能な任意のホスト | OpenShell 管理のサンドボックス |
| セットアップ | scripts/sandbox-setup.sh | SSH キー + ターゲットホスト | OpenShell Plugin が有効 |
| ワークスペースモデル | バインドマウントまたはコピー | リモートを正とする(一度だけシード) | mirror または remote |
| ネットワーク制御 | docker.network(デフォルト: なし) | リモートホストに依存 | OpenShell に依存 |
| ブラウザーサンドボックス | 対応 | 非対応 | まだ非対応 |
| バインドマウント | docker.binds | N/A | N/A |
| 最適な用途 | ローカル開発、完全な分離 | リモートマシンへのオフロード | 任意の双方向同期を備えた管理型リモートサンドボックス |
Docker バックエンド
Docker は、サンドボックス化が有効になるとデフォルトのバックエンドになります。Docker デーモンソケット(/var/run/docker.sock)を通じてツールとサンドボックスブラウザーをローカルで実行します。分離は Docker 名前空間によって実現されます。
デフォルト: network: "none"(外向き通信なし)、readOnlyRoot: true、capDrop: ["ALL"]、イメージ openclaw-sandbox:bookworm-slim。
ホスト GPU を公開するには、agents.defaults.sandbox.docker.gpus(またはエージェントごとのオーバーライド)を "all" や "device=GPU-uuid" のような値に設定します。これは Docker の --gpus フラグに渡され、NVIDIA Container Toolkit などの互換性のあるホストランタイムが必要です。
サンドボックス化ブラウザー
- サンドボックスブラウザーは、ブラウザーツールが必要とするときに自動起動します(CDP に到達可能であることを保証します)。
agents.defaults.sandbox.browser.autoStart(デフォルトtrue)とautoStartTimeoutMs(デフォルト 12s)で設定します。 - サンドボックスブラウザーコンテナは、グローバルな
bridgeネットワークの代わりに、専用の Docker ネットワーク(openclaw-sandbox-browser)を使用します。agents.defaults.sandbox.browser.networkで設定します。 agents.defaults.sandbox.browser.cdpSourceRangeは、CIDR 許可リスト(例:172.21.0.1/32)でコンテナエッジの CDP 入口を制限します。- noVNC オブザーバーアクセスはデフォルトでパスワード保護されます。OpenClaw は、ローカルブートストラップページを提供し、URL フラグメント(クエリ文字列やヘッダーログではありません)内のパスワードで noVNC を開く、短命のトークン URL を出力します。
agents.defaults.sandbox.browser.allowHostControl(デフォルトfalse)は、サンドボックス化されたセッションがホストブラウザーを明示的にターゲットにできるようにします。- 任意の許可リストが
target: "custom"をゲートします:allowedControlUrls、allowedControlHosts、allowedControlPorts。
SSH バックエンド
backend: "ssh" を使用して、任意の SSH アクセス可能なマシン上で exec、ファイルツール、メディア読み取りをサンドボックス化します。
command: "ssh"、workspaceRoot: "/tmp/openclaw-sandboxes"、strictHostKeyChecking: true、updateHostKeys: true。
- ライフサイクル: OpenClaw は
sandbox.ssh.workspaceRootの下にスコープごとのリモートルートを作成します。作成または再作成後の初回使用時に、ローカルワークスペースからそのリモートワークスペースへ一度だけシードします。その後、exec、read、write、edit、apply_patch、プロンプトメディア読み取り、受信メディアのステージングは、SSH 経由でリモートワークスペースに対して直接実行されます。OpenClaw はリモートの変更をローカルワークスペースへ自動的には同期しません。 - 認証素材:
identityFile/certificateFile/knownHostsFileは既存のローカルファイルを参照します。identityData/certificateData/knownHostsDataはインライン文字列または SecretRefs を受け付け、通常のシークレットランタイムスナップショットを通じて解決され、モード0600の一時ファイルに書き込まれ、SSH セッション終了時に削除されます。同じ項目に*Fileと*Dataの両方のバリアントが設定されている場合、そのセッションでは*Dataが優先されます。 - リモートを正とすることの結果: 初期シード後、リモート SSH ワークスペースが実際のサンドボックス状態になります。シード手順の後に OpenClaw 外で行われたホストローカルの編集は、サンドボックスを再作成するまでリモートには表示されません。
openclaw sandbox recreateは、スコープごとのリモートルートを削除し、次回使用時にローカルから再度シードします。このバックエンドではブラウザーサンドボックス化は対応しておらず、sandbox.docker.*設定は適用されません。
OpenShell バックエンド
backend: "openshell" を使用して、OpenShell 管理のリモート環境でツールをサンドボックス化します。OpenShell は汎用 SSH バックエンドと同じ SSH トランスポートおよびリモートファイルシステムブリッジを再利用し、OpenShell ライフサイクル(sandbox create/get/delete/ssh-config)に加えて、任意の mirror ワークスペース同期モードを追加します。
mode: "mirror"(デフォルト)は、ローカルワークスペースを正として保ちます。OpenClaw は exec の前にローカルをサンドボックスへ同期し、その後に同期し戻します。mode: "remote" は、ローカルからリモートワークスペースへ一度だけシードし、その後は同期し戻さずにリモートワークスペースに対して exec/read/write/edit/apply_patch を直接実行します。シード後のローカル編集は、openclaw sandbox recreate するまで見えません。scope: "agent" または scope: "shared" では、そのリモートワークスペースが同じスコープで共有されます。現在の制限: サンドボックスブラウザーはまだ対応しておらず、sandbox.docker.binds はこのバックエンドには適用されません。
openclaw sandbox list/recreate/prune はすべて、OpenShell ランタイムを Docker ランタイムと同じように扱います。prune ロジックはバックエンドを認識します。
完全な前提条件、設定リファレンス、ワークスペースモードの比較、ライフサイクルの詳細については、OpenShell を参照してください。
ワークスペースアクセス
agents.defaults.sandbox.workspaceAccess はサンドボックスが何を参照できるかを制御します。
| 値 | 動作 |
|---|---|
none (デフォルト) | ツールは ~/.openclaw/sandboxes 配下の隔離されたサンドボックスワークスペースを参照します。 |
ro | エージェントワークスペースを /agent に読み取り専用でマウントします(write/edit/apply_patch を無効化)。 |
rw | エージェントワークスペースを /workspace に読み書き可能でマウントします。 |
mirror モードは exec ターン間の正規ソースとして引き続きローカルワークスペースを使用し、remote モードは初期シード後の正規ソースとしてリモートの OpenShell ワークスペースを使用します。また、workspaceAccess: "ro"/"none" は同じ方法で書き込み動作を制限します。
受信メディアはアクティブなサンドボックスワークスペース(media/inbound/*)にコピーされます。
Skills:
read ツールはサンドボックスルート基準です。workspaceAccess: "none" では、OpenClaw は読み取り可能にするため、対象の Skills をサンドボックスワークスペース(.../skills)にミラーします。"rw" では、ワークスペースの Skills は /workspace/skills から読み取り可能で、対象の管理対象、バンドル済み、または Plugin の Skills は、生成された読み取り専用パス /workspace/.openclaw/sandbox-skills/skills に実体化されます。カスタムバインドマウント
agents.defaults.sandbox.docker.binds は追加のホストディレクトリをコンテナにマウントします。形式: host:container:mode(例: "/home/user/source:/source:rw")。
グローバルバインドとエージェント単位のバインドはマージされます(置き換えではありません)。scope: "shared" では、エージェント単位のバインドは無視されます。
agents.defaults.sandbox.browser.binds は追加のホストディレクトリを サンドボックスブラウザ コンテナにのみマウントします。設定されている場合([] を含む)は、ブラウザコンテナについて docker.binds を置き換えます。省略された場合、ブラウザコンテナは docker.binds にフォールバックします。
イメージとセットアップ
デフォルトの Docker イメージ:openclaw-sandbox:bookworm-slim
ソースチェックアウト vs npm install
scripts/sandbox-setup.sh、scripts/sandbox-common-setup.sh、scripts/sandbox-browser-setup.sh ヘルパースクリプトは、ソースチェックアウト から実行している場合にのみ利用できます。npm パッケージには含まれていません。npm install -g openclaw で OpenClaw をインストールした場合は、代わりに以下に示すインラインの docker build コマンドを使用してください。デフォルトイメージをビルドする
ソースチェックアウトから:npm インストールから(ソースチェックアウトは不要):デフォルトイメージには Node は含まれません。Skill が Node(または他のランタイム)を必要とする場合は、カスタムイメージに焼き込むか、
sandbox.docker.setupCommand 経由でインストールしてください(ネットワーク egress + 書き込み可能なルート + root ユーザーが必要です)。openclaw-sandbox:bookworm-slim が見つからない場合でも、OpenClaw はプレーンな debian:bookworm-slim を暗黙に代替として使用しません。デフォルトイメージを対象にしたサンドボックス実行は、ビルドするまでビルド手順を表示して即座に失敗します。これは、バンドルされたイメージがサンドボックスの write/edit ヘルパー用に python3 を含んでいるためです。任意: 共通イメージをビルドする
一般的なツール(たとえば npm インストールからは、まずデフォルトイメージをビルドし(上記参照)、その後リポジトリの
curl, jq, Node 24, pnpm, python3, git)を含む、より機能的なサンドボックスイメージを使う場合:ソースチェックアウトから:scripts/docker/sandbox/Dockerfile.common を使って、その上に共通イメージをビルドします。その後、agents.defaults.sandbox.docker.image を openclaw-sandbox-common:bookworm-slim に設定します。任意: サンドボックスブラウザ用イメージをビルドする
agents.defaults.sandbox.docker.network で上書きできます。
サンドボックスブラウザの Chromium デフォルト
サンドボックスブラウザの Chromium デフォルト
バンドルされたサンドボックスブラウザイメージは、コンテナ化されたワークロード向けに保守的な Chromium 起動フラグを適用します:
--remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-dev-shm-usage--disable-background-networking--disable-breakpad--disable-crash-reporter--no-zygote--metrics-recording-only--password-store=basic--use-mock-keychain--headless=newはbrowser.headlessが有効な場合。--no-sandbox --disable-setuid-sandboxはbrowser.noSandboxが有効な場合。--disable-3d-apis,--disable-gpu,--disable-software-rasterizerはデフォルトです。これらのグラフィックス強化フラグは、GPU サポートのないコンテナに役立ちます。ワークロードが WebGL やその他の 3D 機能を必要とする場合は、OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0を設定してください。--disable-extensionsはデフォルトです。拡張機能に依存するフローではOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0を設定してください。--renderer-process-limit=2はデフォルトです。OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>で制御され、0は Chromium のデフォルトを保持します。
browser.extraArgs を使って追加の起動フラグを付加します。ネットワークセキュリティのデフォルト
ネットワークセキュリティのデフォルト
network: "host"はブロックされます。network: "container:<id>"はデフォルトでブロックされます(名前空間参加のバイパスリスク)。- 緊急時の上書き:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true。
scripts/docker/setup.sh がサンドボックス設定をブートストラップできます。そのパスを有効にするには OPENCLAW_SANDBOX=1(または true/yes/on)を設定します。ソケットの場所は OPENCLAW_DOCKER_SOCKET で上書きできます。完全なセットアップと env リファレンス: Docker。
setupCommand(一度だけのコンテナセットアップ)
setupCommand はサンドボックスコンテナが作成された後に 一度だけ 実行されます(毎回の実行ではありません)。コンテナ内で sh -lc 経由で実行されます。
パス:
- グローバル:
agents.defaults.sandbox.docker.setupCommand - エージェント単位:
agents.list[].sandbox.docker.setupCommand
よくある落とし穴
よくある落とし穴
- デフォルトの
docker.networkは"none"(egress なし)なので、パッケージのインストールは失敗します。 docker.network: "container:<id>"にはdangerouslyAllowContainerNamespaceJoin: trueが必要で、緊急時専用です。readOnlyRoot: trueは書き込みを防ぎます。readOnlyRoot: falseを設定するか、カスタムイメージに焼き込んでください。- パッケージインストールには
userが root である必要があります(userを省略するか、user: "0:0"を設定)。 - サンドボックス exec はホストの
process.envを継承しません。Skill API キーにはagents.defaults.sandbox.docker.env(またはカスタムイメージ)を使用してください。 agents.defaults.sandbox.docker.envの値は、明示的な Docker コンテナ環境変数として渡されます。Docker デーモンにアクセスできる人は誰でも、docker inspectなどの Docker メタデータコマンドでそれらを検査できます。そのメタデータ露出が許容できない場合は、カスタムイメージ、マウントされたシークレットファイル、または別のシークレット配信経路を使用してください。
ツールポリシーとエスケープハッチ
ツールの allow/deny ポリシーは、サンドボックスルールより前に引き続き適用されます。ツールがグローバルまたはエージェント単位で拒否されている場合、サンドボックス化しても復活しません。tools.elevated は、サンドボックス外で exec を実行する明示的なエスケープハッチです(デフォルトは gateway、exec ターゲットが node の場合は node)。/exec ディレクティブは承認された送信者にのみ適用され、セッション単位で永続化されます。exec を強制的に無効化するには、ツールポリシー deny を使用してください(サンドボックス vs ツールポリシー vs 昇格 を参照)。
デバッグ:
openclaw sandbox listは、サンドボックスコンテナ、ステータス、イメージ一致、経過時間、アイドル時間、関連付けられたセッション/エージェントを表示します。openclaw sandbox explain [--session <key>] [--agent <id>]は、有効なサンドボックスモード、ホストワークスペース、ランタイム workdir、Docker マウント、ツールポリシー、修正用の設定キーを検査します。そのworkspaceRootフィールドは設定されたサンドボックスルートのままです。effectiveHostWorkspaceRootはアクティブなワークスペースが実際に存在する場所を示します。openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]は、次回使用時に現在の設定で再作成されるよう、コンテナ/環境を削除します。- 「なぜこれはブロックされているのか?」というメンタルモデルについては、サンドボックス vs ツールポリシー vs 昇格 を参照してください。
マルチエージェントの上書き
各エージェントはサンドボックス + ツールを上書きできます:agents.list[].sandbox と agents.list[].tools(サンドボックスツールポリシー用の agents.list[].tools.sandbox.tools も含む)。優先順位については、マルチエージェントのサンドボックスとツール を参照してください。
最小有効化例
関連
- マルチエージェントサンドボックスとツール — エージェントごとの上書きと優先順位
- OpenShell — 管理されたサンドボックスバックエンドのセットアップ、ワークスペースモード、設定リファレンス
- サンドボックス設定
- サンドボックス vs ツールポリシー vs 昇格 — 「なぜこれはブロックされるのか?」のデバッグ
- セキュリティ