0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Codex CLIのsandboxコマンド、デフォルトは書き込みもネット接続も全拒否だった

0
Posted at

はじめに

対象読者は、Codex CLI(OpenAIのターミナル向けコーディングエージェント)をすでに使っていて、未知のインストールスクリプトやnpmパッケージを試すときに「一応サンドボックスっぽいものがあるらしいけど、実際どこまで守ってくれるのか」が気になったことがあるエンジニア向けです。

Codex CLIには codex sandbox という、エージェントを介さずに任意のコマンドをサンドボックス内で直接実行できるサブコマンドがあります。存在は知っていても、「デフォルトでどこまで書き込みを許すのか」「ネットワークは通るのか」を実際に確かめた記録は少ないので、クラウド環境に @openai/codex をインストールし、権限設定を変えながら実測しました。

TL;DR

  • codex sandbox -- <コマンド> はOpenAIの認証なしで使えます。エージェントに何も推論させず、Linuxサンドボックス機構だけを単体で呼び出します
  • デフォルト設定では、カレントディレクトリを含む ファイルシステム全体が読み取り専用 になり、curl でのネットワークアクセスも 遮断 されます(実測で確認)
  • -c 'sandbox_mode="workspace-write"' を付けると、実行ディレクトリ配下だけ書き込み可能になります。ただしディレクトリ外(/etc など)は引き続き読み取り専用のままです
  • workspace-write のままではネットワークはまだ通りません。-c 'sandbox_workspace_write.network_access=true' を追加して初めてHTTP通信が通ります

Codex CLIを実際にインストールする

クラウド環境に npm install -g @openai/codex でインストールしました。

$ npm install -g @openai/codex
added 2 packages in 7s

$ codex --version
codex-cli 0.150.1

openai/codex のGitHubリポジトリはスター数119,000・Apache-2.0ライセンスで公開されています1。ターミナルで動くコーディングエージェントとしては大きめのOSSプロジェクトです。

codex --help を見ると、sandbox というサブコマンドが独立して存在することに気づきます。

Commands:
  ...
  sandbox           Run commands within a Codex-provided sandbox
  ...

説明は「Codex提供のサンドボックス内でコマンドを実行する」だけで、権限の詳細はヘルプに出てきません。実際に動かして確かめることにしました。

デフォルト設定: 書き込みもネットワークも全拒否

まずは何もオプションを付けず、作業ディレクトリ内にファイルを書こうとしました。

$ cd /tmp/add-mcp-demo
$ codex sandbox -- sh -c 'echo hello > sandbox-write-test.txt'
sh: 1: cannot create sandbox-write-test.txt: Read-only file system

カレントディレクトリへの書き込みすら拒否されました。/etc のようなシステム領域も同様です。

$ codex sandbox -- sh -c 'echo test > /etc/codex-sandbox-test'
sh: 1: cannot create /etc/codex-sandbox-test: Read-only file system

続けてネットワークアクセスを試します。

$ codex sandbox -- curl -s -m 5 -o /dev/null -w "HTTP_CODE:%{http_code}\n" https://example.com
HTTP_CODE:000

HTTP_CODE:000 はcurlが接続すら確立できなかったことを示します(curl の終了コードは7=接続失敗)。つまり codex sandbox は何も指定しなければ「ファイルシステム全体が読み取り専用・ネットワークなし」という、かなり保守的な既定値で動きます。

workspace-writeモードで書き込みを許可する

sandbox コマンドは -c key=value でCodexの設定値をその場で上書きできます。サンドボックスのポリシーは sandbox_mode で切り替わり、workspace-write を指定すると実行ディレクトリ配下だけ書き込みが解禁されます。

$ codex sandbox -c 'sandbox_mode="workspace-write"' -- \
    sh -c 'echo hello > sandbox-write-test.txt && cat sandbox-write-test.txt'
hello

今度はカレントディレクトリへの書き込みが通りました。一方で、ディレクトリの外(/etc)は workspace-write を指定しても拒否されたままです。

$ codex sandbox -c 'sandbox_mode="workspace-write"' -- \
    sh -c 'echo x > /etc/test-outside-cwd'
sh: 1: cannot create /etc/test-outside-cwd: Read-only file system

書き込み範囲が「実行時のカレントディレクトリ配下」に絞られているのが分かります。作業ツリーの外に副作用を漏らさない設計です。

ネットワークについても確かめておきます。workspace-write だけではネットワークはまだ通りません。

$ codex sandbox -c 'sandbox_mode="workspace-write"' -- \
    curl -s -m 5 -o /dev/null -w "HTTP_CODE:%{http_code}\n" https://example.com
HTTP_CODE:000

ファイル書き込みとネットワークアクセスは別軸の権限として扱われています。ネットワークを通すには、さらに sandbox_workspace_write.network_access を明示的に true にする必要があります。

$ codex sandbox -c 'sandbox_mode="workspace-write"' \
    -c 'sandbox_workspace_write.network_access=true' -- \
    curl -s -m 5 -o /dev/null -w "HTTP_CODE:%{http_code}\n" https://example.com
HTTP_CODE:200

ここで初めてHTTP 200が返り、外部への通信が通りました。

実測結果まとめ

設定を横に並べると、3段階のポリシーがはっきりします。

設定 ファイル書き込み ネットワーク
既定(sandbox_mode 未指定) 全体が読み取り専用 遮断(curl exit 7)
sandbox_mode="workspace-write" カレントディレクトリ配下のみ可 遮断
上記 + sandbox_workspace_write.network_access=true カレントディレクトリ配下のみ可 通過(HTTP 200)

筆者が実際に触ってみて意外だったのは、「書き込み許可」と「ネットワーク許可」が完全に独立したスイッチだった点です。workspace-write という名前だけを見ると、いかにも「作業ツリーの外へは何もできない」制限に見えますが、ネットワークを塞ぐかどうかはそれとは別に選ぶ必要があります。逆に言えば、workspace-write+ネットワーク遮断のままにしておけば、「ローカルの一時ディレクトリには書けるが、外部に情報を送信できない」状態を作れます。npm installスクリプトのような、実行内容を完全には信頼できないコマンドを試すときに使える組み合わせです。

codex sandbox はエージェントの推論もOpenAIのAPI呼び出しも経由しないため、OpenAIアカウントへのログインなしで単体のサンドボックスランナーとして使える点も、実際に手を動かして確認できました。

まとめ

  • codex sandbox はCodexのエージェント機能を使わず、Linuxサンドボックスだけを単体で呼び出せるサブコマンドです
  • 既定値は「ファイルシステム全体が読み取り専用・ネットワーク遮断」という保守的な設定になっています
  • sandbox_mode="workspace-write" でカレントディレクトリ配下の書き込みだけを解禁できます(ディレクトリ外は変わらず読み取り専用です)
  • ネットワークは書き込み権限とは独立していて、sandbox_workspace_write.network_access=true を明示しない限り通りません
  • 未知のスクリプトを試すときは、workspace-write のみ(ネットワークは遮断のまま)にしておくと、ローカルの作業ディレクトリには書けても外部への情報送信は防げます

関連記事

  1. openai/codex - GitHub(スター数119,000・Apache-2.0ライセンス。2026-08-27時点)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?