LXC 与 OpenVZ 相比的安全性

信息安全 linux 虚拟化
2021-09-02 03:41:03

多年来,我现在在我的服务器上使用 OpenVZ,但对 Debian 和 Ubuntu 的支持已停止,当前版本似乎现在专注于 LXC,从舒适的角度来看,这不是一个坏主意。

但是安全呢?我记得我曾经读到 LXC 没有提供与 OpenVZ 相同级别的进程和容器分离。不幸的是,我再也找不到该文档了,但我同意至少在 LXC 的默认配置中可能存在一些安全问题。例如,使用完全定制的 rootfs,我曾经管理过一次(在旧版本的 LXC 中),使用chvt 1并按下 Ctrl+C 将主机的终端从 LXC 容器更改为我的 X11 环境的重新启动,当我今天尝试重现它时。我知道,所有容器解决方案都使用相同的内核,而内核 hack 会导致容器崩溃,这不是我要问的。但是从一个容器影响宿主或其他容器应该没那么容易。

我可以从 OpenVZ 和 LXC 获得多少安全性?

我的服务器向互联网公开了一些访客端口,所以我非常关心这方面,但我必须做出决定,因为目前使用的工具需要升级。使用 KVM 或类似的东西不是一个选项,因为我的服务器有一个低性能的 CPU。

PS:我说的是 vzctl 4.7.2-1 的真正 OpenVZ 实现。vzctl 的一些较新的实现使用 LXC 技术。

3个回答

(免责声明:我不是OpenVZ 的权威。这个答案比我通常的答案更有主见,所以请随时批评!)

OpenVZ 可能“更”安全,因为它不与整个内核集成,因此它的攻击面要低一些。尽管如此,OpenVZ 本质上是命名空间的灵感来源,因此最终是 LXC 和 Docker。我不相信它会持续很长时间,因为那些更完整的解决方案已经完成了。

正如 WhiteWinterWolf 所指出的,最大的区别之一是 LXC 最终可以使用用户命名空间,开放非特权用户运行容器的能力,并确保脱离容器的包含代码保留非特权用户的权限。此外,基于命名空间的容器最终可能会被完全标记为 SELinux。Docker 容器通常已经存在,Dan Walsh 正在研究一种方法,通过使用随机生成的包含进程的类别,使 SELinux 在容器之间自动实施额外的隔离层。

所以总而言之,容器更好,因为: - 它们可以部分阻止一些容器突破(将它们限制为非特权 UID),使容器内的特权升级无关紧要。- 他们得到更多的支持和更积极的开发,特别是他们将从 SELinux 支持中受益匪浅。

而且它们更糟糕,因为: - 它们的 TCB 非常大,跨越整个内核,并且会不时出现错误,从而导致漏洞利用和突破。- 用户命名空间对我来说是一种边缘情况。您通常通过 SCI 中的错误(您可以在突破后重现)或对特权服务的混淆代理攻击(可能首先保留在您的容器之外)来实现特权升级。因此,您仍然需要将运行容器的 UID 严格限制为运行容器。

总而言之,继续深入练习防御,并不断思考如何让封闭的进程与外部世界交互以及如何运行容器。存在差异,但如您所见,差异很小。

首先:这两个项目都很棒,我希望它们都能成功!


我个人的观点是 LXC 有更多的漏洞记录,包括相关的而且,对我来说,OpenVZ 提供了一种很棒、更简单、更安全的体验,包括新的 OpenVZ 7。

通过 OpenVZ 和 LXC 记录的漏洞历史:

一些额外的点:

  • OpenVZ的venet网络模型更安全,更隔离[1]
  • 网络上的容器venet(OpenVZ) 无法嗅探相邻容器的网络流量 [1]

[1] https://wiki.openvz.org/Differences_between_venet_and_veth

本文所述

OpenVZ 通过“自下而上、全部包含的原则”来确保安全。容器彼此之间非常牢固地隔离。多年来,出现了一些问题和漏洞,但总的来说,您可以说他们做得非常出色。因为他们首先想到的是安全。不仅是容器隔离,还有网络安全。如果您允许对一个 Container 上的不受信任的客户端进行 root 访问,那么您不希望他嗅探相邻 Container、节点甚至整个子网的网络流量。出于这个原因,OpenVZ 引入了“venet”网络接口,它以一种非常简洁、有序且(对于最终用户)非常简单的方式解决了这个问题。

LXC 特有的最新和最有前途的安全技术之一是使用低权限容器,这要归功于 LXC 在 Linux 内核中的紧密集成。它依赖于用户的命名空间,这允许 LXC 中的用户被视为来自容器所有者的某种“子用户”。

如果容器所有者是 root,因为大多数类似容器的系统都需要它,这不会改变任何安全性(或至少明显)。然而,这里的“魔力”在于容器可以由非特权用户拥有,在这种情况下,容器的 root 用户将拥有与容器所有者相同的系统权限,即。非特权用户。

关于这一切的一个很好的信息来源来自Stéphane Grabers 的博客,他是参与 LXC 项目的开发人员之一。