4.7 KiB
4.7 KiB
Bash ツール
シェルコマンド実行ツール。用途は限定されている。
許可される用途
- ファイル操作:
cp,mv,rm,mkdir,ls,find - テキスト処理:
cat,grep,sed,awk,head,tail,sort,uniq,wc - Python スクリプト実行:
python3 script.py、python3 -c "..."(データ処理・グラフ生成等) - Git の参照系:
git log,git diff,git status(履歴・差分の確認) - アーカイブ:
tar,zip,unzip
禁止される用途
❌ パッケージ・ソフトウェアのインストール一切
apt install,apt-get installpip install,pip3 installnpm install,yarn addcurl ... | sh,wget ... | bashcargo install,go install
❌ 永続的システム変更
systemctl,serviceの操作crontab,atの登録chmodで権限を緩和する操作
❌ ネットワーク経由のダウンロード(コードや実行可能物)
curl https://.../install.sh系- 必要なら DownloadFile ツールを使う
なぜインストールが禁止か
- ジョブ実行環境はサンドボックス化されており、永続化されない
- 必要な機能は専用ツール(
allowed_toolsに列挙されたもの)で提供される - インストールが必要 = ツールの設計が足りないので、ユーザーに報告して機能追加を依頼する
代替
「○○ をインストールしたい」と思ったときの代替策:
| やりたいこと | 専用ツールで代替 |
|---|---|
| HTTP リクエスト | WebFetch / DownloadFile |
| HTML パース | BrowseWeb |
| 画像加工 | AnnotateImage / ReadImage |
| OCR | OCRTool / BatchOCRTool |
| Office ファイル読み込み | ReadPdf / ReadExcel / ReadDocx / ReadPPTX |
| 音声書き起こし | TranscribeAudio |
| データベース | SQLite |
| 検索 | WebSearch / SearchKnowledge |
サンドボックス機構 (safety.bash_sandbox)
Bash 実行の隔離方式を選ぶ。2 つの設定は直交する:
safety.bash_sandbox: 隔離機構を選ぶ —auto(既定)/always/offsafety.bash_unrestricted: コマンドホワイトリストを適用するか否か(trueで撤廃)。bwrap が走るかどうかは制御しない(それはbash_sandboxの役割)
bash_sandbox |
挙動 |
|---|---|
auto(既定) |
bwrap があれば bwrap サンドボックス、無ければ hardened(whitelist + パススコープ + env スクラブ)にフォールバック |
always |
bwrap を強制。bwrap 不在なら起動失敗(本番推奨) |
off |
bwrap を使わず exec(env スクラブと、unrestricted でなければ whitelist + パススコープは維持)。デバッグ用・非推奨 |
bwrap サンドボックスの構成
| マウント | 種別 |
|---|---|
タスクの workspace ({worktreeDir}/local/{taskId}/) |
read-write bind |
/usr, /bin, /sbin, /lib, /etc |
read-only bind |
/lib64 (存在する場合) |
read-only bind |
/tmp |
private tmpfs |
/proc, /dev |
proc / dev |
マウントされないもの: /home, 他タスクの workspace、ホストの /tmp など。他ユーザーの workspace にはファイルシステムレベルでアクセス不可。
環境変数: --clearenv で全消去後、PATH/HOME/LANG/LC_ALL/TZ/TERM/TMPDIR の最小 allowlist のみ注入する。MCP_ENCRYPTION_KEY 等のシークレットはサンドボックス内から見えない。hardened フォールバック経路も同じ allowlist で exec する。
ネットワーク: --unshare-net で隔離(ループバックのみ)。bash からの外向き通信は不可 — Web 取得は SSRF ガード付きの WebFetch / DownloadFile / MCP 経由に一本化されている。
パッケージ: 各 Bash コールは独立した bwrap サンドボックスで実行され(揮発 /tmp・毎回新しい名前空間)、/usr は read-only。よって pip install / npm install は永続せず、全モードで明示的に拒否される。必要な Python パッケージは runtime/python-requirements.txt にプリベイクされ、システム python(read-only bind)から import できる。
前提条件 (always / bwrap 経路)
- コンテナ/ホストで user namespace が有効であること (PVE:
features: nesting=1) bwrapバイナリがインストール済みであることbash_sandbox: always(またはbash_unrestricted: true)では起動時に bwrap の動作確認を行い、失敗時はエラー終了する。autoでは失敗時に警告ログを出し hardened へフォールバック