文档章节

LXC简介

osc_jerry
 osc_jerry
发布于 2017/09/10 12:48
字数 1156
阅读 31
收藏 0

LXC

LXC是著名的经过严格测试的底层Linux容器运行库。从2008年开始发展,现已在世界各地的关键生产环境中得到证明。其中一些核心贡献者是帮助在Linux内核中实现各种知名集装箱功能的人员。

系统容器

LXC的主要重点是系统容器。也就是说,提供尽可能接近VM但没有运行单独内核并模拟所有硬件的开销的容器。

这是通过内核安全功能(如命名空间,强制访问控制和控制组合)实现的。

非特权容器

非特权容器是没有任何权限运行的容器。这需要对内核中运行容器的用户名空间的支持。用户命名空间合并到主线内核之后,LXC是第一个支持非特权容器的运行库。

实质上,用户名空间隔离给定的UID和GID集合。这通过在主机上的一系列UID和GID之间建立到容器中UID和GID的不同(非特权)范围之间的映射来实现。内核将以这样一种方式转换此映射,即在容器内部,所有UID和GID按照您期望的从主机显示,而在主机上,这些UID和GID实际上是无特权的。例如,在容器内作为UID和GID 0运行的进程可能在主机上显示为UID和GID 100000。可以从相应的用户命名空间手册页中收集实现和工作细节。

由于非特权容器是一种安全增强功能,因此它们自然会受到内核强制执行的一些限制。为了提供一个功能齐全的非特权容器LXC与3个setuid代码交互:

  • lxc-user-nic(setuid帮助器创建一个veth对,并在主机上桥接它)
  • newuidmap(从shawdow库中,设置一个uid映射)
  • newgidmap(从shawdow库中,设置一个gid映射)

一切都是以您自己的用户身份运行,也可以作为用户拥有的uid运行。

一般来说,LXC的目标是利用内核中可用的每个安全功能。这意味着LXC的配置管理将使经验丰富的用户根据自己的需要对LXC进行复杂的调整。

有关LXC安全性的更详细的介绍可以在以下链接中找到:

移除特权

LXC在没有正确的配置这些工具的情况下是可以运行的。只不过你这种容器的用途通常是非常有限的。这里突出两个最常见的问题:

  1. 网络:没有依赖一个setuid帮助器为非特权用户设置适当的网络设备(参见LXC的lxc-user-nic二进制文件),唯一的选择是与主机共享网络命名空间。虽然原则上应该是安全的,但共享主机的网络命名空间仍然是减少隔离的一个步骤,并增加攻击向量。此外,当主机和容器共享相同的网络命名空间时,内核将拒绝任何sysfs挂接。这通常意味着容器内的init二进制文件将无法正确启动。
  2. 用户命名空间:如上所述,用户名空间是一个很大的安全性增强。但是,不依赖特权帮助者,主机上无权限的用户只能将自己的UID映射到容器中。然而,标准的POSIX系统需要65536个UID和GID来保证完整的功能。

配置

LXC通过一些简单的关键字配置,例如:

  • lxc.rootfs.path
  • lxc.mount.entry

LXC通过使用单点命名空间配置关键字。这意味着复杂的配置关键字(如lxc.net.0)会展示各种子项,例如lxc.net.0.typelxc.net.0.linklxc.net.0.ipv6.address等一些更精细的配置。

LXC被用作LXD的默认运行库,LXD是容器管理程序,它暴露出设计良好且稳定的REST-api。

内核需求

LXC在2.6.32以上的任何内核上运行。所有它需要的是一个功能C编译器。 LXC适用于提供必要内核功能的所有架构。这包括(但不限于):

  • i686
  • x86_64
  • ppc,ppc64,ppc64le
  • s390x
  • armvl7,arm64

LXC至少还支持以下C标准库:

  • glibc
  • musl
  • bionic(Android's libc)

向后兼容

LXC一直专注于强大的向后兼容性。事实上,API从1.0.0版起没有被破坏。主LXC目前处于版本2。

© 著作权归作者所有

共有 人打赏支持
上一篇: LXC介绍
下一篇: SDN架构组件
osc_jerry
粉丝 0
博文 8
码字总数 13991
作品 0
成都
程序员
私信 提问

暂无文章

Accept和Content-type的意思

Accept意思是我希望接收到的数据类型 Content-type意思是我发出去的数据类型

大灰狼wow
4分钟前
0
0
Java每天10道面试题,跟我走,offer有!(五)

41.Iterator、ListIterator 和 Enumeration的区别?   迭代器是一种设计模式, 它是一个对象, 它可以遍历并选择序列中的对象, 而开发人员不需要了解 该序列的底层结构。 迭代器通常被称为...

Java干货分享
4分钟前
0
0
meta 解决页面浏览器兼容性

使用最高级的ie内核,如果支持谷歌内核,使用谷歌内核 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 这 样写可以达到的效果是如果安装了GCF,则使用GCF来渲染页面,如...

之渊
6分钟前
0
0
极验验证demo(django+vue)

在使用之前,曾经试过用阿里云的人机验证,不过在签名部分比较复杂,下载sdk后需要自己写很多,折腾了一下,还是放弃。而腾讯云的人机验证python版本有demo,直接填写keyhe1secret就可以使用...

xiaoge2016
7分钟前
0
0
浅谈js回调

js回调极为简洁,无需声明,直接通过参数传入方法实体,调用方法实体的时候,可以直接调用方法名或者方法名加参数即可,以下看例子 socket.initWebSocket(this, userName, userId, (isSucce...

Carbenson
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部