LXC 是众所周知且经过严格测试的低级 Linux 容器运行时。它自 2008 年以来一直在积极开发中,并已在全球关键生产环境中证明了自己。它的一些核心贡献者正是帮助在 Linux 内核中实现各种众所周知的容器化功能的人。
类型 | 服务 | 地位 |
---|---|---|
持续集成(Linux) | GitHub | |
持续集成(Linux) | 詹金斯 | |
项目状况 | CII 最佳实践 | |
模糊测试 | OSS-模糊 | |
模糊测试 | CIFuzz |
LXC 的主要关注点是系统容器。也就是说,容器提供的环境尽可能接近您从虚拟机获得的环境,但没有运行单独的内核和模拟所有硬件带来的开销。
这是通过结合命名空间、强制访问控制和控制组等内核安全功能来实现的。
非特权容器是在没有任何特权的情况下运行的容器。这需要容器运行所在的内核中支持用户命名空间。在用户命名空间合并到主线内核后,LXC 是第一个支持非特权容器的运行时。
本质上,用户命名空间隔离给定的 UID 和 GID 集。这是通过在主机上的一系列 UID 和 GID 与容器中不同(非特权)范围的 UID 和 GID 之间建立映射来实现的。内核将以这样的方式转换此映射:在容器内,所有 UID 和 GID 都按照您对主机的预期显示,而在主机上,这些 UID 和 GID 实际上是无特权的。例如,在容器内以 UID 和 GID 0 运行的进程可能在主机上显示为 UID 和 GID 100000。可以从相应的用户命名空间手册页中收集实现和工作细节。
由于非特权容器是一种安全增强功能,因此它们自然会受到内核强制执行的一些限制。为了提供功能齐全的非特权容器,LXC 与 3 段 setuid 代码进行交互:
其他一切都以您自己的用户或您的用户拥有的 uid 身份运行。
总的来说,LXC 的目标是利用内核中可用的所有安全功能。这意味着 LXC 的配置管理将允许经验丰富的用户根据自己的需求进行复杂的调整 LXC。
关于LXC安全性的更详细介绍可以在以下链接找到
原则上,只要应用正确的配置,LXC 就可以在没有任何这些工具的情况下运行。然而,这种容器的用途通常相当有限。只是强调两个最常见的问题:
网络:如果不依赖 setuid 帮助程序为非特权用户设置适当的网络设备(请参阅 LXC 的lxc-user-nic
二进制文件),唯一的选择是与主机共享网络名称空间。尽管原则上这应该是安全的,但共享主机的网络命名空间仍然是减少隔离的一步,并且增加了攻击向量。此外,当主机和容器共享相同的网络命名空间时,内核将拒绝任何 sysfs 挂载。这通常意味着容器内的 init 二进制文件将无法正确启动。
用户命名空间:如上所述,用户命名空间是一个很大的安全增强功能。但是,如果不依赖特权助手,则主机上无特权的用户只能将自己的 UID 映射到容器中。然而,标准 POSIX 系统需要 65536 个 UID 和 GID 才能保证完整功能。
LXC 通过一组简单的按键进行配置。例如,
lxc.rootfs.path
lxc.mount.entry
LXC 使用单点命名空间配置键。这意味着复杂的配置键(例如lxc.net.0
公开了各种子键,例如lxc.net.0.type
、 lxc.net.0.link
、 lxc.net.0.ipv6.address
以及其他更精细的子键粒度配置。
LXC 用作 Incus 的默认运行时,Incus 是一个容器管理程序,在其之上公开了精心设计且稳定的 REST-api。
LXC 可在 2.6.32 及之后的任何内核上运行。它所需要的只是一个函数式 C 编译器。 LXC 适用于所有提供必要内核功能的架构。这包括(但不限于):
LXC 还至少支持以下 C 标准库:
LXC始终专注于强大的向后兼容性。事实上,从1.0.0
版本开始,API 就没有被破坏过。主要 LXC 当前版本为4.*.*
。
LXC项目在快速高效处理安全问题方面享有盛誉。如果您认为发现了潜在的安全问题,请通过电子邮件向 security (at) linuxcontainers (dot) org 报告。
欲了解更多详情,请查看
我们始终欢迎新的贡献者,并乐意在必要时提供指导。 LXC 遵循内核编码约定。这意味着我们只要求每次提交都包含一个Signed-off-by
行。我们使用的编码风格与 Linux 内核使用的编码风格相同。您可以在以下位置找到详细介绍:
并且还应该查看此存储库中的贡献文件。
如果您想变得更加活跃,出现在 irc.libera.chat 上的 LXC IRC 频道 #lxc-dev 通常也是一个好主意。我们尝试以开放的方式进行所有开发,并在适当的 GitHub 问题或 IRC 上讨论新功能或错误。
当考虑做出安全关键贡献或重大更改时,通常最好先联系开发人员并询问 PR 是否会被接受。
LXC 及其相关项目严格遵守语义版本控制方案。
最新发布版本的源代码始终可以从以下位置下载
您可以在线浏览最新的源代码并更改历史记录
不考虑分发的具体细节,一个简单的
meson setup -Dprefix=/usr build
meson compile -C build
通常就足够了。
当您发现需要帮助时,LXC 项目为您提供多种选择。
我们在以下位置设有一个讨论论坛:
您可以在哪里获得支持。
您可以在 irc.libera.chat 上的 #lxc 中找到我们。
如果有兴趣,您可以查看两个 LXC 邮件列表档案之一并注册: