如何搭建可处理不可信派生的Nix远程构建器?
多用户共享Nix远程构建器的安全配置方案
针对你提出的三个核心疑问,以下是具体的实操解答:
1. 最小化my-user权限的配置方法
要让my-user仅能触发Nix守护进程执行构建,需从用户组、SSH限制、权限隔离三个层面入手:
- 加入专用用户组:将
my-user添加到nix-users组,该组默认被授权向nix-daemon提交构建请求,无需root权限即可触发构建,但无法直接操作/nix/store或修改Nix核心配置。 - 限制SSH登录权限:在服务器的
~my-user/.ssh/authorized_keys文件中,给用户的公钥添加command限制,强制仅允许执行Nix远程构建的专用命令,示例配置如下:
这样用户通过SSH连接时,只能运行指定的command="nix-store --serve --write --print-stderr",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...nix-store命令,无法获取交互式shell或执行其他任意操作。 - 禁用sudo及额外权限:确保
my-user不在sudoers列表中,且没有修改/etc/nix/nix.conf等核心配置文件的权限。
2. 恶意派生是否会破坏共享Nix存储?
在正确配置多用户模式的前提下,不会对共享/nix/store造成破坏,原因如下:
- 构建用户权限隔离:多用户模式下,所有构建任务都由
nixbld1、nixbld2等专用构建用户执行,这些用户对/nix/store仅有只读权限,无法直接修改或删除已有存储内容。 - 写入流程管控:构建产物的写入操作由
nix-daemon以root身份完成,只有当构建输出的哈希值与派生声明的预期哈希完全匹配时,才会被移入/nix/store,恶意脚本无法绕过这个校验流程。 - 临时目录隔离:构建过程中生成的中间文件会存放在临时目录,即使恶意脚本执行
rm -rf,也只能影响临时环境,无法触及真实的/nix/store。
3. 是否需要强制启用沙箱模式?
必须强制启用沙箱模式,这是多用户共享场景下的核心安全保障:
- 环境完全隔离:沙箱会限制构建进程的网络访问、文件系统访问(仅允许读取指定的输入依赖和写入临时目录),彻底阻断恶意派生读取主机敏感文件或影响其他构建任务的可能。
- 补充权限隔离的不足:即使构建用户
nixbld的权限被意外突破,沙箱的内核级隔离(如Linux的namespaces)能进一步防止恶意代码逃逸到主机环境。 - 全局强制配置:在
/etc/nix/nix.conf中添加sandbox = true,并设置extra-sandbox-paths控制沙箱内的可访问路径,确保所有用户的构建任务都强制使用沙箱,无法通过命令行参数覆盖。
内容的提问来源于stack exchange,提问作者Yang Bo
相关产品推荐
相关产品推荐

