前言
接着昨天的 浏览器调教指南 - Firefox 篇,今天介绍 Chromium 系浏览器的调教方法。 前文已经给出定义,不再赘述,本篇的重点显然是 Chrome/Chromium 和 MSEdge。 其他套壳浏览器不够「主流」,特性也不吸引我,绝大部分还没原版安全,自行解决。 不过文中的方法大概率通用,就是替换一下关键词的事儿。
Flags
在连篇累牍介绍 policy-templates 之前,先上点简单的开胃菜。 提到调教 Chromium,首先想到的肯定是 chrome://flags。
随便举几个例子 1:
- Anonymize local IPs exposed by WebRTC,隐私设置,但会影响 mDNS
- Block insecure private network requests
- Block scripts loaded via document.write,防范 PDF 中的脚本攻击
- One time permission,类似 Android 的「仅允许一次」权限管理
- Parallel downloading,多线程下载
- Reduce Accept-Language request header,隐藏 UA 中的小版本号
除此之外值得一提的是很多 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 是可以写注释的!
允许 ManifestV2 扩展
先来个实用的,Chrome 127 开始逐步停用基于 ManifestV2(下称 MV2,类推可得 MV3)的扩展(比如 uBlock Origin),通过注册表允许继续使用 MV2 扩展的文章铺天盖地,不过多解释,直接上配置。
Linux Chromium,强制允许全部 ManifestV2 扩展 5:
{
// /etc/chromium/policies/managed/managed-policies.json
"ExtensionManifestV2Availability": 2
}
Windows Chrome/Chromium/MSEdge 的注册表(看这前缀就知道麻烦了吧= =,一样的内容要写三遍),保存为 ChromeExtensionManifestV2Availability_On.reg
然后导入即可:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"ExtensionManifestV2Availability"=dword:00000002
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium]
"ExtensionManifestV2Availability"=dword:00000002
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"ExtensionManifestV2Availability"=dword:00000002
配置插件
第二个示例和 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: 127
[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,有的可能干脆用更底层的 V8(比较少见),在导出游戏时可能没有自带的浏览器,
这时则会调用系统已有的浏览器,那么自然也会受 policy-templates 制约 6。
这种时候,可以写个批处理删除对应注册表,临时放行,结束之后再重新导入,或者直接不配置这一项。
随手写的脚本,保存为 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 系的搜索引擎我没搞定,不过本来添加就很方便,其他配置感觉都很简单。
误会一场,我想添加的「搜索引擎」在 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,没有验证是完全没有这功能还是故意阉割 policy-templates,以便强推 New Bing 和 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/crx
https://clients2.google.com/service/update2/crx
结语
受限于 Google 的广告业务,Chromium 系本身的调教手段着实有限。做到文中这些虽然算不上杯水车薪,但也只能在一定程度上改善浏览器体验。最好还是早日投入 Firefox ESR 的怀抱,享受极致的调教体验。
Flags 会经常变动,这里列举的仅保证在 Chromium 127 有效 ↩︎
Encrypted ClientHello,Mozilla/Cloudflare 等发布的 TLS1.3 扩展,可以简单理解为(但不等同于)加密的 SNI,详见 MozillaWiki ↩︎
前文同样提及了使用组策略(GPO)需要加入域的问题,对纯离线环境很不友好,个人使用(而非企业批量部署)建议还是注册表,简单粗暴 ↩︎
MSEdge 会在 Microsoft Security Baselines Blog 定期发布日志,
但一样得单独下载 Microsoft Security Compliance Toolkit 才能查看具体的新增内容,GPO 全是 XML 格式,更新表格同时还用的 Excel现在策略页面直接就会显示新策略和过时策略,很棒的改动👍 ↩︎实际上这里你可以把
2
改成3
(只允许强制安装的 MV2 扩展),某种意义上更安全。不过这样一来,没有通过 policy-templates 强制安装的 MV2 扩展仍然会被禁用,并且提示 blocked by policy ↩︎话虽如此,但归根结底还是游戏引擎没有考虑到这种情况,policy-templates 本身并没有问题 ↩︎
这点在 Windows Server 2022 LTSC 上尤为显著,预装的 MSEdge 86 还是挺好用的,升级到 127 之后页面就塞满各种神鬼妖魔 ↩︎
BingAdsSuppression 无耻程度简直惊天地泣鬼神,无广告搜索体验的前提是强制安全搜索设置为「严格」 ↩︎