#!/usr/bin/env bash # # noVNC の画面で触られたくないブラウザの機能を止める管理ポリシーを入れる (issue #1148)。 # # 入れているのは 2 つ。 # # AllowFileSelectionDialogs=false ファイル選択の画面を出させない(下の説明) # IncognitoModeAvailability=1 シークレット窓を開かせない # # シークレット窓を止める理由。**遮断が効かないからではない。** # 実測ではこうなる。launchPersistentContext で立ち上げると、人が Ctrl+Shift+N で # 開いたシークレット窓は既定の入れ物のページとして Playwright に見え、 # 既定の入れ物に掛けた遮断がそのまま効く(127.0.0.1 への遷移が # ERR_BLOCKED_BY_CLIENT で断たれることを確認済み)。つまり今の Playwright では、 # このポリシーが無くても穴は開いていない。 # # それでも止めるのは保険。「シークレット窓が既定の入れ物のページとして見える」のは # Playwright の内部の振る舞いで、版が変われば変わりうる。変わった瞬間に # 遮断の掛からない窓が生まれるので、その手前で開けなくしておく。 # エージェント側の入れ物づくり(browser.newContext)はこのポリシーの影響を # 受けない(実機で確認済み)。 # # noVNC の画面(CAPTCHA を人が解く画面)は、ブラウザの中身がそのまま人に触れる。 # ファイルを選ぶボタンを押すと OS のファイル選択画面が開き、サーバー上のファイルを # 選んで持ち出せてしまう。Chromium 系の管理ポリシー AllowFileSelectionDialogs を # false にすると、押しても何も起きなくなる。 # # エージェント側は壊れない。**エージェントがブラウザへファイルを送る経路が # そもそも無い**(src/ に filechooser も setInputFiles も 1 か所も無い。 # ui/e2e/ にあるのは UI の E2E テストが画面を操作するためのもので、 # エージェントの経路ではない)。 # 将来ファイル送信を足すときは setInputFiles(内部は CDP の # DOM.setFileInputFiles)を使うこと。あれは選択画面を通らないので # このポリシーの影響を受けない。 # # 置き場所はブラウザの銘柄ごとに違う。Playwright 同梱のものは # 「Google Chrome for Testing」なので /etc/opt/chrome_for_testing/policies/managed。 # config.yaml の browser.channel で本家 Chrome / Chromium に差し替えられるので、 # 3 か所すべてに置く。 # msedge は未対応。Edge の置き場所は裏が取れていないので、推測で足さない # (browser.channel: msedge を選ぶと、このポリシーは効かない)。 # # 使い方: sudo scripts/install-browser-policy.sh set -euo pipefail SRC="$(cd "$(dirname "$0")/.." && pwd)/deploy/browser-policy/agent-orchestrator.json" if [ ! -f "$SRC" ]; then echo "ERROR: ポリシーファイルが見つかりません: $SRC" >&2 exit 1 fi SUDO="" if [ "$(id -u)" -ne 0 ]; then if command -v sudo > /dev/null 2>&1; then SUDO="sudo" else echo "ERROR: root 権限が必要です(sudo も見つかりません)" >&2 exit 1 fi fi POLICY_DIRS=( /etc/opt/chrome_for_testing/policies/managed /etc/opt/chrome/policies/managed /etc/chromium/policies/managed ) for dir in "${POLICY_DIRS[@]}"; do $SUDO mkdir -p "$dir" $SUDO cp "$SRC" "$dir/agent-orchestrator.json" $SUDO chmod 644 "$dir/agent-orchestrator.json" echo " ✓ $dir/agent-orchestrator.json" done echo "ファイル選択の画面とシークレット窓を禁じるポリシーを入れました。" echo "既に動いているブラウザには効きません。反映するには再起動してください(scripts/server.sh restart)。"