Mac Chrome 关闭自动更新方法
方法
cd ~/Library/Google
sudo chown root:wheel GoogleSoftwareUpdate
相当于修改了 GoogleSoftwareUpdate 这个文件夹的拥有者,而不仅仅是修改了权限,使 Google 对该文件夹没有写入权限。
tip
需要重启浏览器
这条命令做了什么
先拆开看这两条命令。
~/Library/Google/GoogleSoftwareUpdate 是 Google 更新服务(Keystone)在用户级别的安装目录。Chrome 装好之后会往这里放一个后台守护程序,由 launchd 定时唤起,负责检查版本、下载新版、静默替换应用包。
sudo chown root:wheel GoogleSoftwareUpdate 把这个目录的所有者从你的用户改成了 root,所属组改成 wheel。这里的关键在于:Chrome 是以你的用户身份运行的,而这个目录现在归 root 所有,默认权限下你的用户对它只有读和执行权,没有写权限。更新程序想往里写新版本的文件时被系统拒绝,更新流程就失败了。
正文说的「修改了拥有者而不仅仅是权限」这一点是准确的,也是这个方法有效的原因。如果只是 chmod 去掉写权限,Chrome 以你的身份运行、你又是这个目录的所有者,它随时可以 chmod 加回来。改所有者之后你(和 Chrome)就没有改权限的资格了——只有 root 或者目录所有者能改权限。
wheel 这个组是 Unix 传统里的管理员组,macOS 上 GID 是 0。用 root:wheel 是把它对齐到系统文件的标准所有权,跟 /usr/bin 下的东西一致。
恢复更新的方法
关掉自动更新之后,某天想装安全更新时得先恢复。把所有者改回自己:
sudo chown -R $(whoami):staff ~/Library/Google/GoogleSoftwareUpdate
staff 是 macOS 上普通用户的默认组。$(whoami) 会展开成你的用户名,不用手写。
改完重启 Chrome,进 chrome://settings/help 页面,它会立刻开始检查更新。
确认当前状态
看目录的所有者:
ls -ld ~/Library/Google/GoogleSoftwareUpdate
输出第三、四列就是所有者和组。看到 root wheel 说明改成功了。
看 Chrome 的更新服务有没有在跑:
launchctl list | grep -i keystone
Google 的更新守护进程注册在 launchd 里,label 通常包含 com.google.keystone。对应的 plist 文件在这几个位置:
ls ~/Library/LaunchAgents/ | grep -i google
ls /Library/LaunchAgents/ | grep -i google
ls /Library/LaunchDaemons/ | grep -i google
用户级的(~/Library/LaunchAgents)负责当前用户登录后的更新检查;系统级的(/Library/Launch*)在装 Chrome 时如果给了管理员密码就会被创建,它以 root 运行,不受本文这个方法影响。所以如果改了所有者还是自动更新了,去看看系统级的那两个目录里有没有 Google 的条目。
关闭自动更新的其它做法
方法一:企业策略(更规范)
Chrome 支持通过 macOS 的 managed preferences 控制更新行为,这是 Google 官方支持的方式:
sudo defaults write /Library/Preferences/com.google.Keystone.Agent checkInterval 0
checkInterval 是检查间隔(秒),设成 0 表示不检查。这个方式比改所有者温和——它是通过配置项声明的,不是靠权限阻断,Chrome 自己知道该停下来,不会反复重试。
设成一个较长的间隔也是个选择,比如一周检查一次:
sudo defaults write /Library/Preferences/com.google.Keystone.Agent checkInterval 604800
恢复默认:
sudo defaults delete /Library/Preferences/com.google.Keystone.Agent checkInterval
方法二:直接卸掉 Keystone 守护进程
launchctl unload -w ~/Library/LaunchAgents/com.google.keystone.agent.plist
-w 表示写入禁用标记,重启后依然生效。这个方法的问题是 Chrome 每次启动时可能重新注册它,所以不够持久。
更重要的:为什么不建议长期关掉
写到这里必须说清楚代价,因为这个操作的风险是实在的。
浏览器是攻击面最大的软件。它执行来自互联网的任意代码(JS、WASM),解析各种不受信任的格式(图片、字体、视频、PDF)。Chrome 的更新里有相当一部分是修补 V8 引擎和渲染进程的内存安全漏洞,其中不少是已在野被利用的零日漏洞(Google 的更新日志里会标 "exploit exists in the wild")。落后几个版本意味着你在用已经公开的漏洞在裸奔。
Chrome 的发布节奏是 4 周一个大版本,中间还有安全补丁。关掉更新三个月,就落后了三四个大版本。
所以我的建议是:只在有具体理由时临时关掉,理由消失就恢复。合理的理由包括:
- 某个版本引入了破坏性变更影响工作。比如某次更新改了扩展 API 导致你依赖的插件失效、或者改了某个 DevTools 行为影响调试。这种情况下锁定版本等插件适配是合理的。
- 需要复现特定版本的浏览器 bug。这属于测试需求,应该用独立的 Chrome 副本而不是日常用的那个。
- 企业环境需要统一版本。这种情况应该用正规的 MDM 策略管理,而不是改文件所有者。
如果是最后这种测试/复现需求,更好的做法是装一个独立的旧版 Chrome 副本,日常用的那个保持自动更新。从 Chromium 的历史构建下载指定版本,改个应用名放在 /Applications 下,用 --user-data-dir 指定独立的配置目录,两个版本互不干扰:
/Applications/Chrome-Old.app/Contents/MacOS/Google\ Chrome \
--user-data-dir="$HOME/chrome-old-profile"
这样既能满足版本固定的需求,又不牺牲日常浏览的安全性。
关于「不安全的下载内容」等相关设置
顺带说一句,很多人关闭 Chrome 自动更新的动机其实是「不想让浏览器自己改我的东西」,这个诉求下还有几个相关设置可以调,且都比关更新安全:
chrome://settings/?search=后台— 关掉「Chrome 关闭后继续运行后台应用」,这个是让 Chrome 退出后不留后台进程的开关。chrome://flags— 实验特性开关。Chrome 会给一部分用户灰度开启新特性,如果某个新特性影响了你的工作,在这里能手动关掉具体的 flag,比整体锁版本精确得多。chrome://version— 看当前版本号、命令行参数、配置文件路径。排查问题时第一个该看的页面。
关掉更新之后建议在日历上给自己设个提醒,比如每月检查一次有没有重大安全公告。忘掉这件事然后半年不更新,是这个操作最常见的实际结果,也是它最大的风险。

还没有留言,来发表第一条吧~