文档章节

LXC简介

osc_jerry
 osc_jerry
发布于 2017/09/10 12:48
字数 1156
阅读 19
收藏 0
点赞 0
评论 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。

© 著作权归作者所有

共有 人打赏支持
osc_jerry
粉丝 0
博文 8
码字总数 13991
作品 0
成都
程序员

暂无文章

AngularJs $resource 高大上的数据交互

$resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互。 需要注入 ngResource 模块。angular-resource[.min].js 默认情况下,末尾斜杠(可以引起后端服务器...

孟飞阳
9分钟前
0
0
打印斐波那契数

package com.jerry.ch04;public class PrintFibonacci {public static void main(String[] args) {for (int i=0; i<10; i++) {System.out.print(fib(i) + " ");}......

JerryNing
15分钟前
0
0
shell编程

一、shell脚本介绍

人在艹木中
16分钟前
0
0
istio 0.8 遥测 案例

==============遥测===================================== 演示如何从网格中收集遥测信息。 分布式跟踪。如何配置代理以向Zipkin或Jaeger发送跟踪请求 收集度量标准和日志。此任务说明如何配...

xiaomin0322
18分钟前
0
0
ND4J求多元线性回归以及GPU和CPU计算性能对比

上一篇博客《梯度下降法求多元线性回归及Java实现》简单了介绍了梯度下降法,并用Java实现了一个梯度下降法求回归的例子。本篇博客,尝试用dl4j的张量运算库nd4j来实现梯度下降法求多元线性回...

冷血狂魔
19分钟前
0
0
springboot常用注解

@SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Service: 用于标注业务层组件。 @RestController: 用于标注控制层组件(如strut...

GoldenVein
25分钟前
1
0
如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
39分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
40分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
50分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部