78 lines
3.8 KiB
Bash
Executable File
78 lines
3.8 KiB
Bash
Executable File
#!/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)。"
|