前言
接着昨天的 浏览器调教指南 - Firefox 篇,今天介绍 Chromium 系浏览器的调教方法。 前文已经给出定义,不再赘述,本篇的重点显然是 Chrome/Chromium 和 MSEdge。 其他套壳浏览器不够「主流」,特性也不吸引我,绝大部分还没原版安全,自行解决。 不过文中的方法大概率通用,就是替换一下关键词的事儿。
Flags
在连篇累牍介绍 policy-templates 之前,先上点开胃菜。 提到调教 Chromium,首先肯定是 chrome://flags。
随便举几个例子 1:
- Anonymize local IPs exposed by WebRTC,隐私设置,但会影响 mDNS
- Block scripts loaded via document.write,防范 PDF 中的脚本攻击
- Parallel downloading,多线程下载
值得一提的是很多 flags 都有对应的命令行参数,可以写在快捷方式 / Linux Desktop File 里,避免重装后手动设置,具体列表参见 List of Chromium Command Line Switches。
考虑到部分 flags(QUIC、ECH2 等)可以通过 policy-templates 设定,不多讲。 况且 flags 本质还是测试中的功能,保不准哪天就删了。 而 policy-templates 面向企业用户,得罪金主自砸饭碗的事要少得多。
Policy Template
在 Firefox 篇的对应小节我曾提到,Chromium 系的 policy-templates 方法不够通用,详细解释一下:
- 不同浏览器 policy-templates 存放路径不一样(废话),而 Chromium 套壳满地都是,企业部署方案的修改牵一发而动全身
- Chrome 存放在
/etc/opt/chrome/policies - Chromium 存放在
/etc/chromium/policies - MSEdge、Vivaldi、Brave、Arc、Yandex 各有各的地盘……
- Chrome 存放在
- 同一个浏览器,安装源(发行版的软件包管理器、Snap、Flatpak 等)不同,存放路径也可能不同。前文已经提及,不再赘述。
- 同一个浏览器在不同平台的部署方式不一样(虽然也是废话,但人家 Firefox 就一样)
- 同一个浏览器,不同更新通道,可用策略不一样(废话),所以使用的模板也不一样
- 由于 Chromium 系浏览器在很多系统都有大量用户,像 Chrome OS 乃至 Android 都有独立的解决方案,此外还支持分级配置,复杂场景的解决方案很复杂,当然,个人使用基本碰不到这类问题
分级配置
简单来说分为两种,Managed v.s. Recommended:
- 前者会强制锁定某一设置,用户不能修改
- 后者则仅设置推荐的默认值,允许用户修改,但修改后会提醒与组织要求冲突
- 此外,有的策略只能配置为强制实施,不能推荐……
听起来是不是很麻烦?在 Firefox 通过 user.js(等同于推荐)和 autoconfig(等同于强制)实现,类似烦恼会大大减少╮(╯_╰)╭
示例
实话实说我觉得讲到这里就可以了,点到为止,后面的示例也就是画龙点睛。
坑
讲解示例之前先说几个坑:
- 使用注册表配置 Windows 上的 Chromium 系浏览器时要注意,
.reg文件的编码是 UTF-16-LE - 如果通过 git 管理 policy-templates,不能通过
.gitattibutes自动设置 EOL,不然注册表大概率会炸 - Linux 要注意配置文件的权限,我在部署脚本最后移除了目录的写入权限
#!/bin/bash
# Setup Google Chrome/Chromium policies on GNU/Linux
# Configure path
POLICY_PATH="/etc/chromium/policies"
# POLICY_PATH="/etc/opt/chrome/policies"
...
# Restrict permission
sudo chmod -w ${POLICY_PATH}/managed
sudo chmod -w ${POLICY_PATH}/recommended
- 配置结果可以在 chrome://policy 查看,Status 都是
OK就 OK 了 - 最后这个不算坑,不如说是 Firefox 的坑:Chromium 系的 policy-templates 可以写注释!
禁用 Gemini
先来个实用的,Chrome 144 开始逐步集成 Gemini,会自动下载几 GB 的 LLM 模型,还默认上传隐私数据用于数据训练。我想用自然会另外用付费 API5,浏览器不想用则直接禁止,以绝后患。
Linux Chromium,禁用 Gemini、禁止自动下载模型(配置前下载的会自动删除):
{
// /etc/chromium/policies/managed/managed-policies.json
"AIModeSettings": 1,
"GeminiSettings": 1,
"GenAILocalFoundationalModelSettings": 1
}
Windows Chrome/Chromium/MSEdge 的注册表(看这前缀就知道麻烦了吧,一样的内容要写三遍),保存为 ChromeNoGenAI.reg,导入即可:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"AIModeSettings"=dword:00000001
"GeminiSettings"=dword:00000001
"GenAILocalFoundationalModelSettings"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium]
"AIModeSettings"=dword:00000001
"GeminiSettings"=dword:00000001
"GenAILocalFoundationalModelSettings"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"AIModeSettings"=dword:00000001
"GeminiSettings"=dword:00000001
"GenAILocalFoundationalModelSettings"=dword:00000001
配置插件
第二个示例和 Firefox 篇一样,通过 ExtensionAllowedTypes 和 ExtensionInstallForcelist 配置插件:
{
"ExtensionAllowedTypes": [
"extension",
// "theme",
"user_script",
"hosted_app",
"legacy_packaged_app",
"platform_app"
],
"ExtensionInstallForcelist": [
"cjpalhdlnbpafiamejdnhcphjbkeiagm",
"njdfdhgcmkocbgbhcioffdbicglldapd",
"jinjaccalgkegednnccohejagnlnfdag",
"hlkenndednhfkekhgcdicdfddnkalmdm"
]
}
这部分和 Firefox 差不多,就没什么好说的,知道可以写注释即可。 这里我也只是简单配置了允许的扩展类型和强制安装 4 个扩展。
Windows 注册表写法稍微有点不一样,但也是一目了然,同样支持注释:
Windows Registry Editor Version 5.00
; chrome version: 146
[HKEY_LOCAL_MACHINE\Software\Policies\Chromium\ExtensionAllowedTypes]
"1"="extension"
; "2"="theme"
"2"="user_script"
"3"="hosted_app"
"4"="legacy_packaged_app"
"5"="platform_app"
[HKEY_LOCAL_MACHINE\Software\Policies\Chromium\ExtensionInstallForcelist]
"1"="cjpalhdlnbpafiamejdnhcphjbkeiagm"
"2"="njdfdhgcmkocbgbhcioffdbicglldapd"
"3"="jinjaccalgkegednnccohejagnlnfdag"
"4"="hlkenndednhfkekhgcdicdfddnkalmdm"
需要注意,部分应用程序基于浏览器框架构建,配置 ExtensionAllowedTypes 可能会影响运行。
比如烂大街的 RPG Maker、TyranoScript 和新兴 gal 引擎 WebGal,底层是 Electron/NW.js,导出时可能没有附带 runtime,默认调用系统浏览器,自然也受 policy-templates 制约 6。可以写个批处理删除对应注册表,临时放行,结束之后再重新导入,或者干脆不配置这一项。
随手写的脚本,保存为 allow-nwjs-game.bat 使用管理员权限运行即可:
allow-nwjs-game.bat
@echo off
echo "Delete reg to allow Electron/NW.js…"
reg delete "HKEY_LOCAL_MACHINE\Software\Policies\Chromium\ExtensionAllowedTypes" /f
reg delete "HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\ExtensionAllowedTypes" /f
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionAllowedTypes" /f
if %errorlevel%==0 (
echo ExtensionAllowedTypes policy deleted.
) else (
echo ExtensionAllowedTypes policy deletion failed!
)
pause
搜索引擎
「搜索引擎」在 Chromium 中其实叫 Site search,应该配置 SiteSearchSettings,而不是 DefaultSearchProvider(策略组,包含有搜索引擎相关的一系列策略)。
如果搞定了 Firefox ESR 的搜索引擎配置,Chromium 不要太简单,就是高考难度降级到小学生看图写话。 唯一的潜在难点就是 Windows 用注册表配置的情况,但根据 Complex policies on Windows,实际上 Chromium 已经支持直接读取注册表中的 JSON,所以不这么写也无所谓,照样可以导入。
[HKEY_LOCAL_MACHINE\Software\Policies\Chromium\SiteSearchSettings\1]
"featured"=dword:00000001
"name"="DuckDuckGo"
"shortcut"="d"
"url"="https://lite.duckduckgo.com/lite?q={searchTerms}"
[HKEY_LOCAL_MACHINE\Software\Policies\Chromium\SiteSearchSettings\2]
"name"="ピクシブ百科事典"
"shortcut"="pixiv"
"url"="https://dic.pixiv.net/search?query={searchTerms}"
顺带一提,featured 只是额外支持通过 @d 触发搜索,但限制三个,而且其实直接 d + Tab 更快……
另外,MSEdge 不支持配置 site search,由于已经卸载 Edge,没有验证是完全没这功能还是故意阉割以便强推 Copilot。
Cookies
最后介绍 Cookies 的 Linux Chromium 配置。
recommended-policies.json:
{
"BlockThirdPartyCookies": true
}
这里特地把屏蔽第三方 cookies 写成推荐,防止你读到这里忘了还有 #分级配置 的设定。
managed-policies.json:
{
"CookiesAllowedForUrls": [
"*,https://drive.google.com",
"https://steampowered.com,https://steamcommunity.com",
"*,https://*.sharepoint.com",
"*,https://[*.]live.com",
"https://[*.]dlsite.com,https://www.nijiyome.jp"
],
"DefaultCookiesSetting": 4
}
DefaultCookiesSetting 的 4 代表浏览器窗口关闭即失效,cookies 不会一直保存。
CookiesAllowedForUrls 略复杂,但比 Firefox 的 SearchEngines 简单多了。 这里需要填两个 URL,允许前者 cookies 在后者使用。
结合上面的例子详细讲一下:
"*,https://drive.google.com",最常用的一种,在 Google Drive 允许第三方 cookies,可以用通配符"https://steampowered.com,https://steamcommunity.com",比上面一种复杂,在 Steam 社区允许 Steam 商店的 cookies,从而解决 V 社十多年一直懒得搞的 CORS 跨域问题……不需要因为默认屏蔽第三方 cookies 而重新登录一次"*,https://*.sharepoint.com",可以同时用通配符匹配各种 SharePoint 二级域名,但显然不能*,*"*,https://[*.]live.com",也可以使用[*.]来同时匹配*.live.com和live.com,解决一级/二级域名混用的网站"https://[*.]dlsite.com,https://www.nijiyome.jp"(不要瞎点,NSFW 警告)在 DLsite 姊妹站にじ GAME 允许来自 DLsite 的 cookies,和 Steam/OneDrive 的例子差不多,但是这里[*.]通配符用在第一个 URL
看到这里,你大概能理解 Firefox 篇#吐槽 的内容。
MSEdge
由于 MSEdge 越更越烂 7,塞了一堆有的没的功能,我已经弃用,以下内容仅供参考。 其实 MSEdge 和 Chromium 在定制化层面差不多,多了几个 flags,少了几个 policy-templates。
Flags
大差不差,随便写几个:
- Boost screen refresh rate when scrolling,动态刷新率(即 VRR),需要显示器支持
- Omnibox UI Hide Steady-State URL Trivial Subdomains,禁用之后就能恢复正常的地址栏完整 URL
- Show block option in autoplay settings,为数不多的好东西,可以屏蔽自动播放,Firefox/Chromium 默认的「屏蔽」只针对有声音的视频……
- PlayReady DRM for Windows 和 Widevine DRM,解锁高清流媒体,其他浏览器默认只能 720p/1080p,也不是不能看,但肯定比不了 4K 双杜比
Policy Template
- 文档
- 注册表路径
- 强制:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge - 推荐:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\Recommended - 更新:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\EdgeUpdate - 注意路径,HKLM 下面还有
Policies\Microsoft\MicrosoftEdge,这个路径是错误的!
- 强制:
实际配置真差不多,有两点可以表扬:
- 扩展稳定渠道,类似 Firefox ESR,偶数为功能更新,奇数为安全更新
- 可以设置单独的 Microsoft Edge - 更新策略
好话言尽于此,可以开始骂了。
EdgeUpdate 这东西本身体验就一言难尽,开发者回复不能手动触发的 bug 表示只能通过计划任务触发你敢信?再加上永远有残留安装包和多版本并存死活不肯卸载旧版的 EdgeWebView,整个 Edge 生态在我看来非常畸形。这都可以用脚本解决,关键切换到 Chromium 内核还把我最爱的 PDF 阅读器砍了🙄
此外 M$ 还喜欢掩耳盗铃,Microsoft Edge - 策略的 附加部分 多列了许多配置项,给人感觉好像比 Chromium 多做了很多工作,实际上只是混淆视听,大多数在 Chromium 存在的内容被刻意挪到这里。由于 Edge 策略是分组的,不像 Firefox 那样直接按字母排序,看到最后这部分很容易被诱导。
更阴险的是,很多 Edge 特有的无用功能也都被特地放到这部分,比如 DALL-E 主题生成、必应搜索结果的广告 8、AI 文本生成、集锦、没卵用的电子钱包和更没卵用的 E-tree🤬各种遥测更是防不胜防……
跑题了,浏览器扩展可以从 Edge 商店安装,也可以 Chrome 商店安装,具体可以参考 在企业中管理 Microsoft Edge 扩展,不过坑也不少:
- 指定从 Chrome 商店安装扩展,始终会报错,企业用户也吐槽好多回,但是死不悔改
- UpdateURL
https://edge.microsoft.com/extensionwebstorebase/v1/crxhttps://clients2.google.com/service/update2/crx
结语
受限于 Google 的广告业务,Chromium 系调教手段着实有限。做到文中这些虽然不至于是杯水车薪,但也只能略微改善浏览器体验。最好还是早日投入 Firefox ESR 的怀抱,享受极致的调教体验。
Flags 会经常变动,这里列举的仅保证在 Chromium 146 有效 ↩︎
Encrypted ClientHello,Mozilla/Cloudflare 等发布的 TLS1.3 扩展,可以简单理解为(但不等同于)加密的 SNI,详见 MozillaWiki ↩︎
前文同样提及了使用组策略(GPO)需要加入域的问题,对纯离线环境很不友好,个人使用(而非企业批量部署)建议还是注册表,简单粗暴 ↩︎
MSEdge 会在 Microsoft Security Baselines Blog 定期发布日志,
但一样得单独下载 Microsoft Security Compliance Toolkit 才能查看具体的新增内容,GPO 全是 XML 格式,更新表格同时还用的 Excel现在策略页面直接就会显示新策略和过时策略,很棒的改动👍 ↩︎顺带一提,AI Studio 的免费 API 会拿对话数据训练,rate limit 也严格得多,考虑到 Gemini 本身定价就不贵,这免费羊毛还是不薅为好。 ↩︎
话虽如此,但归根结底还是游戏引擎没有考虑到这种情况,policy-templates 本身并没有问题 ↩︎
这点在 Windows Server 2022 LTSC 上尤为显著,预装的 MSEdge 86 还是挺好用的,升级到 127 之后页面就塞满各路妖魔鬼怪 ↩︎
BingAdsSuppression 更是厚颜无耻,无广告搜索的前提是强制安全搜索设置为「严格」 ↩︎
