世界を動かす技術を、日本語で。

macOSのあまり知られていないコマンドラインサンドボックスツール (2025)

概要

sandbox-exec は、macOSのコマンドラインユーティリティで、アプリケーションを サンドボックス環境 で実行可能 サンドボックス により、アプリのシステムリソースへのアクセスを厳しく制限 セキュリティ強化プライバシー保護安全なテスト環境 の構築に最適 プロファイル(設定ファイル)で詳細な動作ルールを カスタマイズ 可能 Appleは公式には App Sandbox の利用を推奨し、sandbox-execは非推奨扱い

sandbox-execとは何か

  • sandbox-exec はmacOS標準搭載の コマンドラインツール
  • アプリケーションを 隔離された安全な環境 で実行する仕組み
  • アプリがアクセスできるシステムリソースを 明示的に制限
  • 悪意あるコード予期しない動作 からの被害を最小化
  • 例えるなら「 特定の物だけが置かれた安全な部屋」でアプリを動かすイメージ

サンドボックス化のメリット

  • 悪意あるコード からの保護:未知のアプリやスクリプトの安全な検証環境
  • 被害の限定 :信頼できるアプリでも脆弱性対策として有効
  • プライバシー制御 :DocumentsやPhotosなど個人データへのアクセス拒否
  • 開発・テスト環境 :開発者が制限付きでアプリ挙動を事前検証
  • リソース制限 :CPUやネットワークなどの消費リソースも制御可能

sandbox-execの基本的な使い方

  • プロファイル(設定ファイル) を作成し、ルールを定義
  • 基本構文:
    • sandbox-exec -f プロファイルファイル コマンド
  • プロファイルファイル で許可・拒否する操作を細かく指定
  • 例:sandbox-exec -f profile.sb コマンド

サンドボックスプロファイルの書き方

  • Scheme(LISP系)構文を採用、括弧でルールをまとめる形式
  • 基本要素
    • バージョン宣言:(version 1)
    • デフォルトポリシー:(deny default)または(allow default)
    • 個別ルール:(例:(allow file-read-data (regex "^/usr/lib"))
  • 対象リソースの指定方法
    • リテラルパス:(literal "/path/to/file")
    • 正規表現:(regex "^/System")
    • グロブパターン:(subpath "/Library")

サンドボックス設計の2つの基本方針

  • デフォルト拒否(最もセキュア)

    • すべての操作を拒否し、必要なものだけ許可
    • 例:
      (version 1)
      (deny default)
      (allow file-read-data (regex "^/usr/lib"))
      (allow process-exec (literal "/usr/bin/python3"))
      
    • 未知・信頼できないコードの実行に最適だが、動作検証が必須
  • デフォルト許可(より寛容)

    • すべて許可し、危険なものだけ拒否
    • 例:
      (version 1)
      (allow default)
      (deny network*)
      (deny file-write* (regex "^/Users"))
      
    • 実装は容易だが、セキュリティリスクが高まる

実用例

  • ネットワークアクセス不可のターミナルセッション

    • プロファイル例(terminal-sandbox.sb):
      (version 1)
      (allow default)
      (deny network*)
      (deny file-read-data (regex "^/Users/[^/]+/(Documents|Pictures|Desktop)"))
      
    • 実行例:sandbox-exec -f terminal-sandbox.sb zsh
    • ネットワークや個人ディレクトリへのアクセスを遮断したシェル環境
  • システム標準プロファイルの利用

    • /System/Library/Sandbox/Profilesにプリセット定義が存在
    • 例:sandbox-exec -f /System/Library/Sandbox/Profiles/weatherd.sb コマンド
    • コメント付きで参考になるプロファイル多数

サンドボックスエラーのデバッグ方法

  • Consoleアプリの利用

    • Console.appで「sandbox」やアプリ名で検索
    • 「deny」を含む行でブロックされた操作を特定
  • ターミナルでリアルタイムログ監視

    • コマンド:log stream --style compact --predicate 'sender=="Sandbox"'
    • 特定アプリに絞る:log stream --style compact --predicate 'sender=="Sandbox" and eventMessage contains "python"'
    • 拒否された操作の詳細を確認し、プロファイル改善に活用

高度なサンドボックス技法

  • エイリアス化による簡易運用

    • シェル設定ファイルに追加:
      alias sandbox-no-network='sandbox-exec -p "(version 1)(allow default)(deny network*)"'
      
    • 例:sandbox-no-network curl -v https://google.com
    • ただし、UIアプリ(例:Firefox.app)には期待通り効かない場合あり
  • 既存プロファイルのインポート・拡張

    • 例:
      (version 1)
      (import "/System/Library/Sandbox/Profiles/bsd.sb")
      (deny network*)
      

sandbox-execの限界と注意点

  • 非推奨 :Appleは開発者向けにApp Sandboxの利用を推奨、sandbox-execは将来廃止の可能性
  • 複雑なアプリ :必要な権限の洗い出しや動作検証が難しい場合が多い
  • 試行錯誤が必要 :プロファイル作成には何度もテストが必要
  • GUIなし :App Sandbox(Xcode)とは異なり、設定用のGUIが存在しない
  • システムアップデートの影響 :macOSの大型アップデートで挙動やルールが変更される可能性

結論:パワーユーザー向けの強力なセキュリティツール

  • sandbox-exec はGUI型セキュリティ機能にはない 柔軟性と制御力 が特徴
  • セキュリティ重視のユーザー開発者未知のコードの検証 に最適
  • カスタムプロファイル で用途ごとに最適なセキュリティ環境を構築可能
  • 学習コストや試行錯誤 は必要だが、得られるセキュリティメリットは大きい

次に学ぶべきこと

  • macOSの App Sandbox 公式ドキュメント参照を推奨
  • /System/Library/Sandbox/Profilesのプリセットプロファイルを研究
  • macOSセキュリティのさらなる知識習得

Hackerたちの意見

これをまとめてくれてありがとう、めっちゃ助かる!読者は、最近のHNの会話の後にオープンソース化された「https://github.com/eugene1g/agent-safehouse」も気になるかもね。

これを使ってターミナルアプリを動かすためのUIを作ったよ、claudeやcodexみたいなやつね: https://multitui.com

これいいね!CLIエージェントをサンドボックス化するために似たようなものを作ったんだけど、リポジトリにはsandbox-exec用のミニマルなプロファイルを集めてるよ - https://agent-safehouse.dev/

本当に素晴らしい仕事だね!なんでクローズドソースにしたの?追記:クローズドソース自体には問題ないけど、ソフトウェアが自分のセキュリティに責任を持つことが期待されるとちょっと不安になるから、ここでの安全性や保証について気になったんだ。UXも他の部分も素晴らしいね。

わあ、これめっちゃいいね。

CodexはすでにmacOSでsandbox-execを使ってるよ :)

どのターミナルを埋め込んでるの?

https://man.freebsd.org/cgi/man.cgi?query=sandbox-exec&aprop...: 「sandbox-execコマンドは非推奨です。アプリをサンドボックス化したい開発者は、App Sandbox Design Guideに記載されているApp Sandbox機能を採用すべきです。」これ、MacOS 26.3でも同じことが言えるよね(https://man.freebsd.org/cgi/man.cgi?query=sandbox-exec&aprop...)。MacOS 10.13.6は2017年のもので、もうほぼ10年も非推奨になってる。

その非推奨にもかかわらず、今どれだけの主要なアプリやツールがsandbox-execに依存してるのか気になるな。Codex CLIやSwift Package Managerが思い浮かぶけど。

誰か、非推奨についての詳細知ってる人いる?Appleがこの決定をした理由が気になるな。

まあ、OS X/macOSのcronは20年以上前から非推奨になってるよ。

Claude CodeとCodexは、実行をサンドボックス化するためにsandbox-execとSeatbeltを使ってるよ: - https://developers.openai.com/codex/security/#os-level-sandb... - https://code.claude.com/docs/en/sandboxing

Hacker Newsで議論の続きを見る