systemd 在任何地方都不安全

自从 2010 年 systemd 发布以来,该项目一直在不断地增加新功能和扩展性能。代码行数超过了 130 万行,其中 Lennart Poettering 刚刚将其个人 systemd-homed git 树合并到 systemd 中,添加了另外 2 万行代码,而持续存在的开放问题数约为 1400 个,新问题和漏洞不断涌现。因此,systemd 应被视为实验性的,不适合在任何地方运行。

即使像 OpenBSD 开发者这样细致且注重安全的编码者,代码审查非常严格,错误和安全问题仍然时有发生

考虑到 systemd 的开发方式,代码甚至没有经过(据我所知)单一的代码审查,而且开发者不断增加新功能而不是专注于解决漏洞、安全和稳定性,这个项目不适合出现在任何 GNU/Linux 发行版中,除非是“测试阶段”。

即使是 Debian GNU/Linux,在其“testing”和“unstable”版本分支中进行了大量的测试,也不适用于生产系统,因为 systemd 仍然有许多可追溯至 2015 年的漏洞。

添加一个与现有代码库非常匹配的简单功能是一回事,但合并具有成千上万行代码的项目则完全不同。这等同于添加了一个全新的应用程序。

在 Lennart Poettering 于 2013 年 1 月的博客文章《The Biggest Myths》(最大的误会)中,他试图反驳将 systemd 称为“单体化”(monolith)的说法,而许多人都认为它就是。Lennart 表示:

一个包含 69 个单独二进制文件的软件包很难称为单体化。然而,与以前的解决方案不同的是,我们将更多组件捆绑在一个单一的压缩包中,并在单个存储库中维护它们,具有统一的发布周期。

然而,问题是,许多这些所谓的单独二进制文件在没有其他 systemd 组件的情况下将无法工作。只需举一个例子,如果查看 systemd-networkd 的 man 页面,明确说明如果将 UseDNS 选项定义为 true则将使用从 DHCP 服务器接收到的 DNS 服务器,并优先于任何静态配置的 DNS 服务器。这对应于 resolv.conf 中的 nameserver 选项。 但它忽略了这个设置(和多个其他设置)在没有 systemd-resolved 的情况下是无效的。systemd 的其他组件也同样紧密集成。

某些类型的应用程序非常难以按照 Unix 哲学设计和构建,例如现代网络浏览器、电子游戏等,但 systemd 显然并不属于这类应用程序。它在许多方面违反了 Unix 哲学,以至于很难跟上,这不是因为开发者需要这样做,而是因为他们想这样做,他们根本不在乎。虽然他们可以不在乎,并继续将更多功能添加到 systemd 中,但是现在一些大型 GNU/Linux 发行版是时候开始认真关注了。

我们所熟悉的 GNU/Linux 正慢慢变成一场灾难,一个充满安全问题的操作系统末日,等待爆发。这只是因为每个人都希望有一个新的 init 系统,但最终却得到了除了新内核以外的一切。现在唯一缺少的就是 systemd-linux。

最后更新于

FreeBSD 中文社区