【问题标题】:Is the integrity of the Conda packages verified?Conda 软件包的完整性是否得到验证?
【发布时间】:2020-05-12 00:57:56
【问题描述】:
使用conda install <some package> 或conda install -c <some channel> <some package> 安装软件包时,conda 二进制文件是否会验证下载的软件包存档的完整性(使用诸如 SHA256 之类的算法)?
我问的原因是,在某些国家,官方 Anaconda Cloud 存储库非常慢(或被阻止),本地镜像通常更快并提供更好的用户体验,但本地镜像的完整性不是保证。如果 conda 二进制文件以某种方式使用从 Anaconda Cloud 官方存储库获得的元数据验证下载的存档,那么那些不幸的用户仍然可以使用本地镜像,而不必担心本地镜像的完整性。
【问题讨论】:
标签:
python
anaconda
package
conda
package-managers
【解决方案1】:
无独立元数据 (AFAIK)
Conda 确实有一个 SHA256 完整性检查选项 (conda config --set extra_safety_checks true),但它不适用于您要解决的问题。问题是校验和信息是在包存档本身中提供的,在info/paths.json 文件中,而不是由独立的元数据存储库提供。这可能会减轻中间人将某些内容插入存档文件的情况,但它不会捕获使用conda build 构建的包含恶意代码并推送到频道的包。因此,仅使用受信任的渠道很重要。
为什么要进行安全检查?
除了基本的文件完整性验证之外,提供的检查的主要用例实际上是防止 Conda 因 Pip 破坏其包文件而感到惊讶。由于 Conda 使用硬链接,如果 Pip 在一个 env 中覆盖一个包文件,它可能会在未来的所有 env 中覆盖它。虽然它不会在行为中捕获 Pip,但这些安全检查至少有 Conda 检查以确保在将包链接到另一个 env 之前它仍然完好无损。
"Understanding and Improving Conda's Performance" 帖子中有一点背景,在 Verifying package contents 部分下。