type
Post
status
Published
date
Aug 31, 2026
slug
hn-49499854
summary
Omarchy 的默认 Docker 配置存在严重安全漏洞,导致用户会话中的所有普通程序都能无需密码直接提升至 root 权限。研究人员已通过负责任的披露流程促使官方修复该问题并发布了 4.0.1 版本。建议受影响的用户尽快更新系统,以防范潜在的机器完全遭篡改风险。
tags
科技
category
新闻
icon
password
hnDiscussion
Omarchy 默认 Docker 配置中的一个安全问题意味着,用户桌面会话中运行的基本上每个程序都可以在没有密码、sudo 或权限提示的情况下升级到 root 权限。
如果你使用的是 Omarchy,最重要的一点非常简单:更新到 4.0.1。
我通过该项目的负责任披露流程私下报告了此问题。底层配置自此已得到修补,因此我现在公布这些细节,以解释该问题是什么,并让用户知道更新他们的系统。
该问题
Omarchy 将其默认用户配置为 Linux docker 组成员。
这允许用户运行诸如以下命令:
而无需输入 sudo。
在 Arch 上,Docker 守护进程以 root 身份运行并监听:
docker 组的成员可以与该套接字通信。Docker 本身明确警告称,docker 组会授予用户 root 级别的权限。
具有 Docker 套接字访问权限的进程可以请求归 root 所有 Docker 守护进程以 root 身份启动容器,将主机文件系统的任意部分挂载到其中,以 root 身份对这些文件进行操作,并以 root 身份运行代码。
在受影响的 Omarchy 系统上,这意味着默认用户以及在该用户会话中启动的所有进程都具有对 root 的访问权限。
概念验证
在全新受影响的 Omarchy 安装上,尝试读取 /etc/shadow:
现在观察你的用户的组成员身份:
现在使用以 root 身份运行的 docker 读取受保护的文件:
该命令由普通用户进程启动,但实际的文件系统访问是通过以 root 身份运行的守护进程执行的。
影响范围
Linux 补充组由子进程继承,因此这会影响整个用户会话。
遍历用户 systemd --user 实例下方的进程树表明,Docker 组存在于会话中的几乎每个普通进程中。
这意味着几乎每个可以运行不受信任代码的进程都可以获得 root 权限,包括:
- AI 编码代理和代理套件
- 网络浏览器
- 编辑器和 IDE
- npm 脚本
- 各种开发工具
- 后台进程
换句话说,普通用户应用程序的失陷可能会立即变成整个机器的失陷。
安全默认值
此配置还有另一个重要方面。它是默认加入(opt-out)的,而不是默认不加入(opt-in)。用户实际上不必使用 Docker。安全权衡是替他们做出的,应用于默认账户,并且没有向用户解释这种权衡。
安全敏感的默认值之所以重要,正是因为许多用户合理地假设操作系统默认是安全的,并且会在采用安全性较低的设置时通知他们或提示他们选择加入。
具有误导性的文档
Omarchy 在其开发工具文档中确实提到了 Docker 组:
Omarchy 安装了运行 [docker] 所需的一切。这包括 […] 使你能够作为普通用户而不是作为 root 运行 Docker 所需的用户组更改。
其安全含义几乎与典型读者从“不是作为 root”中推断出的含义完全相反。阅读该描述的用户可以合理地得出结论,Omarchy 已经以某种无 root(rootless)模式配置了 Docker。事实并非如此。
受影响的版本
这会影响 4.0.1 之前的版本。我在最新的 3.x iso (3.8.4) 上进行了测试,它同样受到影响。
时间线
从引入到解决该问题的提交时间线:
更广泛的背景
随着 AI 越来越多地针对核心基础设施产生高严重性 CVE,所有开发人员都需要将安全放在首位,尤其是面向开发人员的发行版的作者。最近有无数关于开发人员机器被攻破的报道,其访问权限被用于污染软件供应链或利用生产系统。开发人员是高价值目标,因为他们通常被授予很高的访问权限。为了方便起见,开发人员机器通常会禁用安全护栏,将凭据存储在纯文本点文件中,并累积对系统的访问权限。这种情况必须改变。
我确信这只是 DHH 的一次疏忽,不知道添加 docker 组的后果。在安全方面,没有任何发行版能做出完美的决定。我对报告此问题后响应的速度感到惊讶,这是一个健康的迹象。
话虽如此,这并不是我第一次遇到 Omarchy 的安全问题,坦白说,我不相信它目前的决策过程能够确保我对我的发行版所期望的安全级别。我希望这种情况能在某个时候改变,因为 Omarchy 有很多令人喜爱的地方。
Podman
如果你是 Linux 上的 Docker 用户,并且不想被迫授予 root 权限(甚至通过 sudo)来运行容器,那么我强烈建议你尝试一下 Podman. Podman 是无守护进程的。你的容器作为普通子进程在其自己的用户命名空间中运行,不需要任何形式的 root 访问权限。我已经运行 Podman 好几个月了,它完全取代了我所有的 Docker 工作流。强烈建议你尝试一下。
参考资料
- 作者:MapleTech
- 链接:https://www.imaple.tech/article/hn-49499854
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章





