Conda 软件包的完整性是否经过验证?



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

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

无独立元数据 (AFAIK(

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

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

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

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

最新更新