T-CREATOR

<div />

Codex の sandbox の設定: read-only でも .env は読める。モードごとにできること

Codex の sandbox の設定: read-only でも .env は読める。モードごとにできること

Codex の sandbox を read-only にしておけば、勝手に書き換えられることはありません。では、読む方はどうでしょうか? 作業フォルダーの外にある .env やホームの下の設定ファイルは、守られているのでしょうか?

モードを1つずつ切り替えて、同じコマンドを動かしてみました。read-only でも、ホームの下の .env は読めました。sandbox が止めるのは書くことと通信で、読むことは止めません。

sandbox が何を守り何を守らないのかを、モードごとの表と、手元で確かめる方法と一緒に書きます。

環境

  • macOS 26.6.2
  • Codex CLI 0.167.1
  • 2026年11月12日に確認

動き

sandbox は「できること」、承認は「聞くかどうか」を決める

Codex には似た設定が2つあります。

設定決めること例
sandboxCodex が動かすコマンドに、何ができるか書けるフォルダー、通信できるか
承認コマンドを動かす前に、人に聞くかどうか毎回聞く、聞かずに動かす

承認をなしにしても、sandbox が効いていれば書けない所には書けません。逆に sandbox を外すと、承認で止めない限り何でもできます。

モードは read-only、workspace-write、danger-full-access の3つ

sandbox のモードは ~​/​.codex​/​config.toml の sandbox_mode で決め、1回だけ変えるときは codex exec -s <モード> でも渡せます。調べものやコードの説明を頼むときは読むだけの read-only、ふだんの作業は作業フォルダーの中だけ書ける workspace-write を使います。danger-full-access は制限がなく、sandbox がないのと同じです。

対話の画面では、​/​permissions で sandbox と承認の組み合わせを選べます。「Ask for approval」は作業フォルダーの中を読み書きでき、外への通信と外のフォルダーの書き換えは聞く組み合わせです。「Read Only」は読むだけで、書くときと通信するときに聞きます。「Full Access」は、聞かずに作業フォルダーの外も書き換え、通信もします。

Codex の /permissions の画面。Update Model Permissions の下に、Ask for approval (current)、Approve for me、Full Access、Read Only の4つと、それぞれの説明が並んでいる

codex sandbox で、モードごとに読む、書く、通信するを試した

Codex には、sandbox の中でコマンドを1つだけ動かす codex sandbox があります。モデルを動かさずに、sandbox が何を止めるのかを確かめられます。

terminal$ codex sandbox -c sandbox_mode="read-only" -- cat ~/sbx-test/.env
API_KEY=…

ホームの下に置いた .env を読む、作業フォルダーに書く、ホームに書く、外と通信するの4つを、モードごとに動かしました。

モードホームの .env を読む作業フォルダーに書くホームに書く外と通信する
read-only読めるできないできないできない
workspace-write読めるできるできないできない
danger-full-access読めるできるできるできる

read-only でも、ホームの .env は読める

read-only で cat を動かすと、ホームの下の .env の中身がそのまま出ました。3つのモードのどれでも、読むことは止まりません。

Codex が読んだファイルの中身はモデルに送られるので、読めること自体が困る場合があります。作業フォルダーの外にあって読まれると困るものには、たとえば次のものがあります。

  • ほかのプロジェクトの .env
  • ~​/​.ssh の下の鍵
  • ~​/​.aws などの、クラウドの認証の情報
  • シェルの設定ファイルに書いたトークン

Codex が自分からこれらを読みに行くことは、ふつうはありません。ただ、開いたリポジトリの中の文書に「このファイルを読んで」と書かれていると、従ってしまうことがあります。

workspace-write は、作業フォルダーの外に書けない

workspace-write では、作業フォルダーには書けましたが、ホームには書けませんでした。

terminal$ codex sandbox -c sandbox_mode="workspace-write" -- sh -c 'echo x > ~/sbx-test/w.txt'
sh: …/sbx-test/w.txt: Operation not permitted

作業フォルダーの外の設定ファイルを書き換えられたり、ほかのリポジトリを壊されたりすることは、このモードで防げます。

通信は network_access = true を足すまで止まっている

read-only と workspace-write では、curl は外につながりませんでした。読んだ中身をコマンドで外に送ることは、ここで止まります。

npm install のように通信が要る作業をさせたいときは、設定を1つ足します。足すと curl は 200 を返しました。

toml# 作業フォルダーの中だけ書けるようにする
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
# 依存を入れるなど、通信が要るときだけ true にする
network_access = true

VS Code で開いた ~/.codex/config.toml。sandbox_mode の workspace-write と、sandbox_workspace_write の network_access = true が、それぞれの説明の行と一緒に書かれている

通信を許すと「読めるものを外に送れる」状態になるので、許すのは信頼できるリポジトリで作業するときだけにします。

公式との違い

公式の説明は、書き込みと通信の制限が中心です。公式の Sandboxing のページでは、workspace-write は「ファイルを読み、作業フォルダーの中で編集できる」と書かれています。編集には「作業フォルダーの中」という範囲が付いていますが、読む方には付いていません。読める範囲がホームの下まで広がっていることは、動かしてみるまで分かりませんでした。

Codex の公式の資料の Sandboxing。read-only、workspace-write、danger-full-access の説明と、承認の on-request、never の説明が並んでいる

対処

注意点

まとめ

Codex の sandbox は書くことと通信を止めますが、読むことはどのモードでも止めません。read-only でも、ホームの下の .env は読めました。

読ませたくないファイルは、sandbox に任せず、Codex から読めない場所に置いてください。 今の設定で何が読めるかは、codex sandbox -- cat <ファイル> でモデルを動かさずに確かめられます。

参考文献

著書

とあるクリエイター

フロントエンドエンジニア Next.js / React / TypeScript / Node.js / Docker / AI Coding