Files
maestro/scripts/install-browser-policy.sh
oss-sync 57702b4f34
CI / build-and-test (push) Canceled after 0s
sync: update from private repo (2336949a)
2026-09-17 11:29:31 +00:00

78 lines
3.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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)。"