安装 Debian 软件包安全吗?

信息安全 linux 特权升级 安装
2021-08-19 11:16:00

如果我理解正确的话,Debian 软件包中的维护者脚本是以 root 权限执行的。我认为这意味着,与我的预期相反,安装恶意包不仅会导致危害运行包中代码的用户,而且会危害整个系统。

问题0:我是对的吗?

问题 1:有什么方法可以减轻这种威胁?(例如,是否有任何工具可以将 Debian 软件包安装在类似 chroot 的“沙盒”中,如果安装后脚本尝试使用可能存在问题的权限,则会提醒管理员。)

问题 2:Debian 团队在主要存储库中解决此威胁的方式是什么?鉴于向这些存储库贡献软件包的人数众多,这一定是一项不平凡的任务。

(同样的问题也适用于 Debian 的衍生产品,例如 Ubuntu。也欢迎提供有关其他发行版如何处理此问题的信息。)

2015 年 7 月 27 日添加:我可以将收到的答案总结如下:

0) 是的,这是个问题。

1) 阅读代码,和/或以打算使用它的用户身份安装软件。稍后,有 fakechroot 工具可以减轻手动安装的痛苦。

2) 除了参与的许多志愿者对 Debian 存储库的正常筛选之外,没有特别关注这个问题。

我现在将接受 WhiteWinterWolf 的回答,但我仍然对这个问题的良好解决方案感兴趣。此外,如果其他发行版更好/不同地处理这个问题,那也会很有趣。

1个回答

问题0:我说的对吗?

是的,你是对的。安装包需要root权限,所以安装恶意包意味着以root身份运行恶意代码。

问题 2: Debian 团队在主要存储库中解决此威胁的方式是什么?

首先,建议您只使用 Debian 存储库,更准确地说是 Debian 稳定存储库,这有两个原因:

  • 该存储库中的代码在进入这个稳定分支之前已经被很多人筛选过,这将远远限制恶意应用程序通过的可能性。
  • 然后只提供安全更新,因此未来的更新大小远远小于会添加数十个闪亮新功能的更新。这种修改更小,它们更容易被筛选,这再次限制了任何恶意通过的可能性。

然后,一旦你的 root 进程即将开始安装包,为了确保这个包真的是 Debian 团队提供的并且没有被第三方更改过,每个包都经过加密签名。软件包中的任何更改都会导致一堆警告消息,要求您在继续此安装之前三思而后行。

问题 1:有什么方法可以减轻这种威胁?

至于你这边,主要看你的实际需求和环境。

当然,正如 etherealflux 在他的评论中提到的那样,生产系统上的任何新安装都应该仔细筛选。您可能需要手动解压缩包以检查其内容,您可能希望将其安装在隔离的测试环境中以检查其行为等。

但是,还有另一种解决方案,主要解决您自己的评论“没有理由在公共机器上安装俄罗斯方块游戏,例如,会危及不玩上述游戏的用户的帐户。 ”。

但是为此,我们需要退后一步来了解包实际上是什么。

在早期的 Unix/Linux 时代,没有包(或者至少在 Linux 的情况下很少):每个想要安装应用程序的人都应该首先下载源代码,然后编译它们。这使得软件安装和更新需要更长的时间,但允许每个人按照他们想要的方式精确地配置软件。

然后是软件包:具有此类系统最常见设置的预编译软件。

这是您对俄罗斯方块游戏的问题:这些“最常见的设置”包括软件将在系统范围内安装,这是默认情况下的系统范围安装,这就是用户安装俄罗斯方块的原因可能危及整个共享环境及其所有用户。

用户级别的软件安装

只要您的/home分区(如果是单独的分区)允许执行代码(文件noexec中没有挂载选项/etc/fstab),那么您的用户就可以在自己的主目录中安装自己的软件,而不会影响其他用户,也不需要 root特权。

但是,这种安装不是上述“最常见设置”的一部分,因此这些软件包不提供这种可能性。因此,您的用户必须执行以下操作:

  1. 下载俄罗斯方块游戏源代码,
  2. 阅读INSTALL文档文件并检查configure脚本 ( ./configure --help) 允许的编译选项,两者都随源代码提供。更具体地说,他们需要将所有目录设置在他们的主目录下。例如,脚本可以允许一个--prefix参数允许轻松地告诉软件必须安装在哪里,所以你可以例如告诉./configure --prefix=/home/myuser/local. 但其他软件可能需要根据其复杂性和要求设置不同的参数。有了一个好的和理智的项目,所有这些都在提供的INSTALL文件和configure在线帮助中得到了清楚的解释,而且比看起来更容易。
  3. 之后,剩下的就是执行make,休息一下,一旦编译结束make install(无需 sudo 到 root!)。

这种过程中唯一真正的问题是,如果此软件编译需要系统上不可用的依赖项(这将导致该configure步骤出现错误消息,此脚本的作用之一是确保编译和运行所需的所有依赖项)软件满足)。这成为一个递归问题,因为您可以选择安装一个包以满足依赖关系,在用户级别编译它并设置适当的configure参数/环境变量,以便编译工具和最终二进制文件能够找到它需要的一切。

但最后,您的用户将在他的帐户上完全安装一个正常工作的俄罗斯方块,而不会影响其他用户,也不需要任何超级用户权限。