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つあります。
| 設定 | 決めること | 例 |
|---|---|---|
| sandbox | Codex が動かすコマンドに、何ができるか | 書けるフォルダー、通信できるか |
| 承認 | コマンドを動かす前に、人に聞くかどうか | 毎回聞く、聞かずに動かす |
承認をなしにしても、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 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
通信を許すと「読めるものを外に送れる」状態になるので、許すのは信頼できるリポジトリで作業するときだけにします。
公式との違い
公式の説明は、書き込みと通信の制限が中心です。公式の Sandboxing のページでは、workspace-write は「ファイルを読み、作業フォルダーの中で編集できる」と書かれています。編集には「作業フォルダーの中」という範囲が付いていますが、読む方には付いていません。読める範囲がホームの下まで広がっていることは、動かしてみるまで分かりませんでした。
対処
注意点
まとめ
Codex の sandbox は書くことと通信を止めますが、読むことはどのモードでも止めません。read-only でも、ホームの下の .env は読めました。
読ませたくないファイルは、sandbox に任せず、Codex から読めない場所に置いてください。 今の設定で何が読めるかは、codex sandbox -- cat <ファイル> でモデルを動かさずに確かめられます。
参考文献
著書
挙動Codex の sandbox の設定: read-only でも .env は読める。モードごとにできること
使い方Claude Code と Codex に学習させない設定: 個人のプランは、自分で切らないと学習に使われる
使い方Postman が Claude Code と Codex に入れたプラグインの確かめ方: Superset も、開いただけでフックが11個
挙動Claude Code と Codex を並列で動かしたときの動き: worktree で分けたのに、マージで衝突
挙動Claude Code と Codex のスキルの置き場所: 同じスキルなのに、互いの置き場所を読まない
使い方Claude Code と Codex のスキルを入れる前の確かめ方: そのスキル、中身を読まずに入れてない?
挙動Codex の sandbox の設定: read-only でも .env は読める。モードごとにできること
チートシートClaude Code のスラッシュコマンド一覧: 2.1.311 の / に出るコマンドを、用途別に並べた
使い方Git のタグ(tag)の使い方: 付けたタグは push では送られない。--follow-tags でも軽いタグは残る
使い方Mermaid のシーケンス図の書き方: 非同期の処理は、矢印を -) に変えるだけで書き分けられる
チートシートOllama のコマンド一覧: run は、入っていないモデルなら pull から始める。よく使う10個の違い
使い方Mermaid CLI(mmdc)のインストールと使い方: 10枚の図は、1つの Markdown にまとめると4倍速く書き出せた



