流行的 linux 发行版是否验证二进制包?

sev*_*evo 1 security package-management distributions

如果不是所有的包构建都是可重现的,什么保证用户不会运行相同版本和架构的两个不同的二进制文件?

Gil*_*il' 5

没有办法验证二进制包是否按照来源说的那样做(这在理论上和实践中都是一个无法解决的问题)。但是,如果您知道二进制包是如何生成的,您就可以确定它是编译源代码的结果。这需要信任:

  1. 编译工具(不只是编译器本身,而是也参与构建过程中如所有其他工具maketar等等),你需要信任他们正确地做他们的工作;
  2. 进行编译的机器(您需要相信它们按预期执行了编译工具);
  3. 从进行编译的机器到使用包的机器的分发链。

主要发行版在严格控制的基础设施上构建二进制包(只有少数管理员可以访问这些机器),使用来自发行版本身的编译器(因此只要没有编译器有问题或有后门,并且没有从使用受损机器,不会出现任何问题)。构建包时,同一台机器(或在同一严格控制的基础设施中运行的机器)以加密方式对其进行签名。加密签名可确保安装在最终用户机器上的软件包正是在构建基础设施上生成的软件包。所有主要的包管理工具(apt、yum、dnf 等)都会验证包签名。

因此,分布本身不验证(1)(它不能),并确保(2)而不是验证它,但分布验证(3)。

可重现的构建有助于 (2):它们提供了构建按预期进行的独立验证,因此它们可以防止构建基础设施受到损害。

已经为 (1) 提出了独立编译的方案,但它们很少实用:大多数语言没有独立的实现。