所以.gem文件是包含数据.gz元数据.gz和校验和的压缩包。校验和在数据未存档之前.gz被验证,但我不明白这有什么意义。它似乎没有提供任何真正的安全优势
通常您只是运行gem install somegemfilename
但是如果您出于某种原因选择从 https://rubygems.org/gems/下载 gem,那么您将需要手动运行该文件上的校验和。
例
下载类似 https://rubygems.org/downloads/foo-0.0.2.gem 的文件 然后在您的终端中转到下载并运行文件的任何位置:
sha256sum foo-0.0.2.gem
# it should output the same checksum shown at https://rubygems.org/gems/foo
=> 523009a5b977f79c8eaa79b521e416f26482bc4fbbcc04bd08580696e303a715
仅此一项就应该足够安全。 然而,这些似乎是额外的安全层,以确保tar xf somegem.gem
解压缩的每个gz文件都可以根据提供多种变体校验和的checksums.yaml
的内容进行单独检查。
简短的回答是,您不必担心它们,但是如果您想深入到该级别,它们就在那里为您服务。
根据@NikitaMisharin的评论更新:
是的,我明白你的意思,并且倾向于同意你的看法。 看起来这是非常古老的遗留 Ruby 代码,并在此提交中引入。
commit 9ac0e9149295f356f3aee2e6a7c3a4e22d0a904e
Author: Chad Fowler <chad@chadfowler.com>
Date: Sun Nov 23 01:53:27 2003 +0000
Generate MD5 checksum for gem and store it in the file. Will be used to validate gem file before installation.
git-svn-id: svn+ssh://rubyforge.org/var/svn/rubygems/trunk@66 3d4018f9-ac1a-0410-99e9-8a154d859a19
我倾向于得出结论,这是一种检查代码完整性的原始方法,自从使用将在标准 gem 存储库 Rubygems.org 上发布的校验和以来,这种方法已经发展起来。
我想这可能是为了遗产支持而留下的?但我想如果你真的想确定,也许问查德福勒?
有关更多背景信息,请阅读此文档,该文档直接链接到 rubygems.org 安全部分
问维护者,这是他的答案
我相信我在截断的宝石中遇到了一些 RubyGems 无法检测到的错误。 添加校验和将允许 RubyGems 确定 gem 下载是否已成功完成,并且在下载期间或缓存在磁盘上时是否未损坏。
校验和允许 RubyGems 说"此文件已损坏",而不是由于截断的 .gem (.tar( 文件、Zlib 故障等而导致的更令人困惑的错误。