我对使用 yum 安装软件包不是很熟悉。前世我用过apt。
目前,我正在查看一些运行说明
# yum install http://example.com/package.rpm
显然,它会订阅一个特定的存储库,可以从该存储库下载更多包。这是安全的做法吗?
作为比较,我知道 apt 软件包具有 gpg 签名,这意味着通过 http 下载不是问题。如此处所述。当使用 apt 下载主存储库之外的软件包时,您可以手动添加一个 gpg 密钥供 apt 接受,以确保任何非标准软件包具有相同的可信来源。
如果我运行上面的命令,yum 会在开始安装东西之前要求我接受 gpg 密钥,还是可以只安装任何东西?
如果相关,我的/etc/yum.conf
文件包含gpgcheck=1
在该[main]
部分内。
答案1
你的问题有一些需要解释的地方。
首先,了解如何协同工作非常YUM
重要rpm
:
- RPM 是一种软件包格式,并且有一个类似名称的命令行工具,
rpm
可以安装单独的 RPM 软件包。您可以将rpm
命令行工具视为类似于dpkg
命令行工具,因为两者都安装单独的包而没有依赖项。 yum
是一个更高级别的程序,它安装 RPM 包及其依赖项。您可以将该yum
命令视为类似于apt-get
,两者都可以安装包及其所有依赖项。- 运行时应
yum install
使用包名称,而不是 URL。例如:yum install package
,类似于您运行的方式:apt-get install package
。 - 如果您有软件包 URL,则可以运行
rpm -i https://url
,但如果您没有安装软件包的依赖项,则需要使用rpm -i
(痛苦的)或使用yum
配置的存储库一一安装它们。
现在,就 GPG 而言,有一些适用于 Debian 和 RPM 打包系统的事情需要了解,但最重要的事情是:
- 两个系统都有 2 组 GPG 签名:包本身的 GPG 签名和存储库上的 GPG 签名。
- Debian 软件包没有检查 GPG 签名,并且 Ubuntu 和 Debian 项目存储库中的官方软件包都没有 GPG 签名。
- 当通过明文 HTTP 使用时,这两个系统都容易受到一系列 GPG 重放攻击;你绝对应该 100% 通过 HTTPS 安装你的包不是如果可能的话纯文本 HTTP。
至于 RPM 和 YUM GPG 签名:
- 首先,您可以使用以下命令在配置文件中指定 GPG 密钥的路径或 URL:
gpgkey=https://example/gpg.key
或gpgkey=/usr/share/example/gpg.key
。如果需要 1 个以上的 GPG 密钥,您可以指定多个。 - 其次,有两个选项:
gpgcheck=1
和repo_gpgcheck=1
。第一个选项导致yum install
验证包本身的 GPG 签名,第二个选项验证存储库的 GPG 签名。理想情况下,您应该同时使用两者,但许多存储库没有正确配置为支持两者。 - 第一次运行时
yum install
,yum
将尝试导入列出的 GPG 密钥(gpgkey
如果尚未导入)。系统将提示您并要求您接受或拒绝。 - 您必须
pygpgme
在系统上安装该软件包才能验证 GPG 签名。在最新版本的 RHEL 和 CentOS 上,pygpgme
会自动安装 的依赖项yum
,但您应该验证它是否已安装在您的系统上。 - 没有与
apt-transport-https
,yum
can talk over HTTPS 开箱即用的等效项,但您应该确保yum
您使用的版本具有sslverify
默认启用的选项;有些版本yum
没有。如果您的版本没有,您应该将其设置为启用。验证 SSL 证书至关重要。
即使包和存储库上都有 GPG 签名,存储库仍然容易受到重放攻击;如果可能的话,您应该通过 HTTPS 访问您的存储库。对一种攻击的简短解释是,恶意攻击者可以在特定时间对存储库元数据和关联的 GPG 签名进行快照,并将该元数据和签名重播给请求它的客户端,从而阻止客户端看到更新的包。由于未触及元数据,因此 GPG 签名将有效。然后,攻击者可以利用未更新的软件中的已知错误来攻击计算机。您可以阅读有关对包管理器的攻击的更多信息这张纸。
我写了两篇内容广泛的博客文章GPG 和 YUM / rpm也GPG 和 APT。
如果您还有其他问题需要我解答,请发表评论;正确地进行包管理非常困难。