Hacker News 中文摘要

RSS订阅

Show HN:Drop 支持 gVisor 的免 root Linux 沙箱 -- Show HN: Drop – A rootless Linux sandbox with gVisor support

德罗普(Drop)提供不妨碍工作流的 Linux 系统沙箱,可在不离开熟悉工作环境的情况下隔离程序与编码代理。艾丽斯(Alice)在 zax 主机项目目录输入 drop init,环境创建且配置存于 /home/alice/.config/drop/home-alice-project.toml。执行 drop run bash 后进入 (drop) 隔离外壳,ps aux 输出显示 alice 仅运行 PID 1 的 bash 与 PID 14 的 ps 进程:bash 占 CPU 0.3%、内存 0.0%,VSZ 13776、RSS 5748,TTY pts/0,STAT Ss,START 15:03,时间 0:00;ps 占 VSZ 16016、RSS 4644,STAT R+。

正文

不打扰你的 Linux 沙箱化

在你熟悉的工作环境里隔离程序和编程代理。

安装 Drop

alice 在 ~/project 下执行 drop init,系统在 /home/alice/.config/drop/home-alice-project.toml 生成了配置。接着 drop run bash 进入沙箱,提示符变为 (drop)。此时 ps aux 只能看到沙箱内的 bash(PID 1)和 ps 自身,显示进程已被隔离。

配套视频展示了进入沙箱、进程隔离、配置只读暴露且隐藏秘密、以及拥有可写且持久的主目录。

使用场景

  • 隔离编程代理

    用 --dangerously-skip-permissions 运行代理,让 Drop 在操作系统层面强制执行权限。即使代理产生幻觉执行 rm -rf ~,也不会动到真实主目录;针对 ~/.ssh 的提示注入找不到任何东西;对 localhost 服务的连接会被拒绝。

  • 隔离第三方程序

    从 PyPI、npm 等来源安装程序,无需赋予其完整的用户账户权限。若程序恶意或遭供应链攻击,损害会被限制在沙箱内。

工作原理

  • 一次性隔离环境

    受 Python virtualenv 启发,Drop 可创建并进入易丢弃的环境。每个环境有自己独立的主目录,原主目录被隐藏。

  • 沿用现有发行版

    不同于 Docker/Podman,Drop 直接使用你现有的发行版,无需容器配置,已装的程序在沙箱中照常可用。

  • 灵活的配置语言

    高级 TOML 配置可指定哪些文件、目录和本地网络服务暴露给沙箱。默认所有环境共享基础配置,一次配置后即可免配置创建新环境。

  • 无需 root

    Drop 不需 root 权限,运行在 Linux 用户命名空间内,拥有独立的进程、挂载、网络、IPC 和 cgroup 命名空间。执行沙箱程序前会丢弃所有用户命名空间能力,使程序无法做绑定挂载等特权操作。

  • gVisor 集成

    可选支持在 gVisor 用户态内核上运行程序,作为额外隔离层,阻止程序直接访问宿主内核,大幅降低利用内核漏洞的可能。

评论

多数人质疑该沙箱工具相较于 bubblewrap、gVisor、LXC 等现有方案的本质区别与安全创新,少数人赞赏其易用性并认为正好满足了开发隔离需求。

认为只是对现有沙箱原语的重新封装,缺乏安全差异化

  • 多名用户指出项目使用的底层机制(如 Linux 命名空间、gVisor)与 nsjail、runc、bubblewrap 等并无二致,疑问为何不直接构建于成熟原语之上,或为何不选微虚拟机获得更强隔离(较多人) > 你用了和 nsjail、runc 相同的底层原语,相当于重造了这些库,想听听你这么做的理由(@refibrillator)

认为易用且适度隔离,正好符合需求

  • 部分实际使用者满意其平衡了便利与隔离,文档清晰,能防止应用写主目录,适合作为默认开发环境(少数人) > 它在便利和隔离之间拿捏得很好,我希望以后默认所有开发都用它(@p2004a)

关注与替代方案的比对及架构选择

  • 有人提出 proot 无命名空间可在 Android 运行,有人偏好 LXC 完整系统,有人倾向 microVM 获得更好隔离,还有人询问能否嵌套在容器内(较多人) > 为什么不考虑用微虚拟机来实现隔离呢(@LeBit)

指出安全边界细节与未解挑战

  • 用户关心文件系统映射边界、Mac 不支持、容器化服务编排和带硬件加速的 GUI 程序仍是难关(较多人) > 开发容器化应用和硬件加速的 GUI 仍是该工具没解决的挑战(@p2004a)

有价值的补充

  • proot 不使用进程命名空间,可在 Android 的 Termux 中运行发行版(@zoobab)
  • 通过 runsc 将 gVisor 与 Docker 配合使用的方案已存在多年,并非新能力(@xyzzy_plugh)
  • 另一种类似思路是用 libkrun 等微虚拟机运行极小的快速 VM,并加入网络白名单、凭证掩码等安全属性(@gregwebs)
  • 有用户主张生成 bwrap 配置而非信任未知沙箱,并用 Unix 域套接字做带白名单的自动 HTTP 代理(@XJ6w9dTdM)