想象一下,您想要安装的某个软件包(例如通过apt
或dnf
其他一些软件包管理器)受到了损害,即被恶意修改,并且确实进入了您的 Linux 发行版的(官方)存储库而未被检测到。考虑到即使在各种 Linux 发行版的官方存储库中也有数以万计的软件包,这似乎不太可能(特别是对于更不常见的软件包)。
在这种情况下,我想知道安装时的安全隐患。我首先怀疑这是一个重大安全问题,特别是因为软件包安装通常必须使用 root 权限来完成。但是,我不确定各种包管理器的内部结构,并且我可以想象包管理器可以“简单地复制”要安装的应用程序文件到相应的目录中,而无需实际执行任何受损的代码。在后一种情况下,可能“仅”在稍后时间点执行已安装应用程序的非特权用户受到损害,而只要不使用受损害的应用程序,系统或其他用户的数据就保持安全。
如果有人能解释这是如何在幕后工作的,我将非常感激。特别是,我有兴趣深入了解 Ubuntu/Debianapt
和 Fedora 的dnf
包管理器(我使用的主要包管理器)是如何工作的。如果这些包管理器的默认行为允许在安装过程中执行任意脚本,如果有一些选项可以更改此行为,或者是否有其他包管理器在所描述的情况下更安全,我也会非常感兴趣。
预先非常感谢您!
答案1
RPM 和 DEB 软件包都可以在安装过程中运行它们想要运行的任何内容。是的,安装过程主要是复制文件,但有时包需要与系统交互(更新各种缓存,例如安装字体时),以便包可以在安装(或升级或删除)期间运行各种命令/脚本。软件包还可以启用/启动它们包含的 systemd 服务。如果您想要一些其工作原理的示例,请检查Fedora scriptlet 文档或者包维护者脚本对于 Debian。还有这篇有趣的 LWN 文章关于这个潜在的风险。
使用手动安装 RPM 软件包时,rpm
您可以指定--noscripts
关闭 scriptlet,并且可以将noscripts
事务标志与 一起使用dnf
,但这并不能真正帮助修复受损的软件包。
但即使在安装过程中没有这些不同的方式来运行脚本,他们也可以简单地用“受损”版本替换现有的系统二进制文件、服务和配置文件,并获得相同的结果。所以,是的,受损的软件包(或从未知/不受信任的来源安装的软件包)可能是一个大问题。
发行版的打包主要基于信任——Fedora你需要证明你有能力创建和维护一个包,但此后没有任何东西可以真正阻止打包者推送恶意内容。每个新版本都有一些自动化测试(以及其他社区成员的可选手动测试),其中包括 ClamAV 扫描,因此有一些保护,但我不认为这可以涵盖所有内容,正如您所说,有数千个包在官方仓库中。