首页 > 解决方案 > Conda 软件包的完整性是否得到验证?

问题描述

使用conda install <some package>or安装软件包时conda install -c <some channel> <some package>conda二进制文件是否验证下载的软件包存档的完整性(使用 SHA256 等算法)?

我问的原因是,在某些国家,官方 Anaconda Cloud 存储库非常慢(或被阻止),本地镜像通常更快并提供更好的用户体验,但无法保证本地镜像的完整性。如果conda二进制文件使用从官方 Anaconda Cloud 存储库获得的元数据以某种方式验证下载的存档,那么那些不太幸运的用户仍然可以使用本地镜像,而不必担心本地镜像的完整性。

标签: pythonanacondapackagecondapackage-managers

解决方案


没有独立元数据(AFAIK)

Conda 确实有一个用于 SHA256 完整性检查的选项 ( conda config --set extra_safety_checks true),但它不适用于您要解决的问题。问题是校验和信息是在包存档本身中提供的,在info/paths.json文件中,而不是由独立的元数据存储库提供。这可能会减轻中间人将某些内容插入存档文件的情况,但它不会捕获conda build包含恶意代码并推送到频道的包。因此,仅使用受信任的渠道很重要。

那么,为什么要进行安全检查?

除了基本的文件完整性验证之外,提供的检查的主要用例实际上是防止 Conda 因 Pip 破坏其包文件而感到惊讶。由于 Conda 使用硬链接,如果 Pip 在一个 env 中覆盖一个包文件,它可能会在未来的所有 env 中覆盖它。虽然它不会在行为中捕获 Pip,但这些安全检查至少有 Conda 检查以确保在将包链接到另一个 env 之前它仍然完好无损。

在验证包内容部分下的了解和改进 Conda 的性能帖子中有一些背景知识。


推荐阅读