干货 | Docker中用到的主要Linux安全技术有哪些?

栏目: 服务器 · 发布时间: 5年前

内容简介:每个优秀的容器平台都应该使用命名空间和控制组技术来构建容器。最佳的容器平台还会集成其他容器安全技术,例如系统权限、强制访问控制系统(如SELinux和AppArmor)以及安全计算。正如用户所期望的,Docker中集成了上述全部安全技术!在本节中会对Docker中用到的主要Linux技术进行简要介绍。之所以不进行深入介绍,是因为在本书中希望将重点放在Docker平台技术上。内核命名空间属于容器中非常核心的一部分! 该技术能够将操作系统(OS)进行拆分,使一个操作系统看起来像多个互相独立的操作系统一样。这种技

每个优秀的容器平台都应该使用命名空间和控制组技术来构建容器。最佳的容器平台还会集成其他容器安全技术,例如系统权限、强制访问控制系统(如SELinux和AppArmor)以及安全计算。正如用户所期望的,Docker中集成了上述全部安全技术!

在本节中会对 Docker 中用到的主要 Linux 技术进行简要介绍。之所以不进行深入介绍,是因为在本书中希望将重点放在Docker平台技术上。

1.Namespace

内核命名空间属于容器中非常核心的一部分! 该技术能够将操作系统(OS)进行拆分,使一个操作系统看起来像多个互相独立的操作系统一样。这种技术可以用来做一些非常酷的事情,比如在相同的OS上运行多个Web服务,同时还不存在端口冲突的问题。该技术还允许多个应用运行在相同OS上并且不存在竞争,同时还能共享配置文件以及类库。

举两个简单的例子。

    • 用户可以在相同的OS上运行多个Web服务,每个端口都是443。为了实现该目的,可以将两个Web服务应用分别运行在自己的网络命名空间中。这样可以生效的原因是每个网络命名空间都拥有自己的IP地址以及对应的全部端口。也可能需要将每个IP映射到Docker主机的不同端口之上,但是使用IP上的哪个端口则无须其他额外配置。
    • 用户还可以运行多个应用,应用间共享类库和配置文件,但是版本可能不同。为了实现该目标,需要在自己的挂载命名空间中运用每个应用程序。这样做能生效的原因,是每个挂载命名空间内都有系统上任意目录的独立副本。

图15.2展示了一个抽象的例子,两个应用运行在相同的主机上,并且同时使用443端口。每个Web服务应用都运行在自己的网络命名空间之内。

Linux Docker现在利用了下列内核命名空间。

    • 进程ID(PID)。
    • 网络(NET)。
    • 文件系统/挂载(MNT)。
    • 进程内通信(IPC)。
    • 用户(USER)。
    • UTS。

下面会简要介绍每种技术都做了些什么。但重要的是要理解, Docker容器是由各种命名空间组合而成的

。再次强调一遍, Docker容器本质就是命名空间的有组织集合

干货 | Docker中用到的主要Linux安全技术有哪些?

图15.2两个应用运行在相同主机并同时使用443端口

例如,每个容器都由自己的PID、NET、MNT、IPC、UTS构成,还可能包括USER命名空间。这些命名空间有机的组合就是所谓的容器。图15.3展示了两个运行在相同Linux主机上的容器。

干货 | Docker中用到的主要Linux安全技术有哪些?

图15.3两个容器运行在相同的Linux主机上

接下来简要介绍一下Docker是如何使用每个命名空间的。

    • 进程ID命名空间:Docker使用 PID 命名空间为每个容器提供互相独立的容器树。每个容器都拥有自己的进程树,意味着每个容器都有自己的PID为1的进程。PID命名空间也意味着容器不能看到其他容器的进程树,或者其所在主机的进程树。
    • 网络命名空间:Docker使用 NET 命名空间为每个容器提供互相隔离的网络栈。网络栈中包括接口、ID地址、端口地址以及路由表。例如,每个容器都有自己的eth0网络接口,并且有自己独立的IP和端口地址。
    • 挂载点命名空间:每个容器都有互相隔离的根目录 / 。这意味着每个容器都有自己的 /etc/var/dev 等目录。容器内的进程不能访问Linux主机上的目录,或者其他容器的目录,只能访问自己容器的独立挂载命名空间。
    • 进程内通信命名空间:Docker使用 IPC 命名空间在容器内提供共享内存。 IPC 提供的共享内存在不同容器间也是互相独立的。
    • 用户命名空间:Docker允许用户使用 USER 命名空间将容器内用户映射到Linux主机不同的用户上。常见的例子就是将容器内的 root 用户映射到Linux主机的非root用户上。用户命名空间对于Docker来说还属于新生事物且非必选项。该部分内容在未来可能出现改变。
    • UTS命名空间:Docker使用 UTS 命名空间为每个容器提供自己的主机名称。

如图15.4所示,容器本质就是命名空间的有机组合!

干货 | Docker中用到的主要Linux安全技术有哪些?

图15.4容器是命名空间的有机组合

2.Control Group

如果说命名空间用于隔离,那么控制组就是用于限额。

假设容器就是酒店中的房间。每个容器间都是互相独立的,但是每个房间都共享一部分公共资源,比如供应水电、共享游泳池、共享健身、共享早餐餐吧等。CGroup允许用户设置一些限制(以酒店作为类比)来保证不会存在单一容器占用全部的公共资源,如用光全部水或者吃光早餐餐吧的全部食物。

抛开酒店的例子,在Docker的世界中,容器之间是互相隔离的,但却共享OS资源,比如CPU、RAM以及硬盘I/O。CGroup允许用户设置限制,这样单个容器就不能占用主机全部的CPU、RAM或者存储I/O资源了。

3.Capability

以root身份运行容器不是什么好主意,root拥有全部的权限,因此很危险。但是,如果以非root身份在后台运行容器的话,非root用户缺少权限,处处受限。所以用户需要一种技术,能选择容器运行所需的root用户权限。了解一下Capability!

在底层,Linux root用户是由许多能力组成的。其中一部分包括以下几点。

CAP_CHOWN
CAP_NET_BIND_SERVICE
CAP_SETUID
CAP_SYS_BOOT

Docker采用Capability机制来实现用户在以root身份运行容器的同时,还能移除非必须的root能力。如果容器运行只需要root的绑定系统网络端口号的能力,则用户可以在启动容器的同时移除全部root能力,然后再将CAP_NET_BIND_SERVICE能力添加回来。

4.MAC

Docker采用主流Linux MAC技术,例如AppArmor以及SELinux。

基于用户的Linux发行版本,Docker对新容器增加了默认的AppArmor配置文件。根据Docker文档的描述,默认配置文件提供了“适度的保护,同时还能兼容大部分应用”。

Docker允许用户在启动容器的时候不设置相应策略,还允许用户根据需求自己配置合适的策略。

5.Seccomp

Docker使用过滤模式下的Seccomp来限制容器对宿主机内核发起的系统调用。

按照Docker的安全理念,每个新容器都会设置默认的Seccomp配置,文件中设置了合理的默认值。这样做是为了在不影响应用兼容性的前提下,提供适度的安全保障。

用户同样可以自定义Seccomp配置,同时也可以通过向Docker传递指定参数,使Docker启动时不设置任何Seccomp配置。

6.Linux安全技术总结

Docker基本支持所有的Linux重要安全技术,同时对其进行封装并赋予合理的默认值,这在保证了安全的同时也避免了过多的限制,如图15.5所示。

干货 | Docker中用到的主要Linux安全技术有哪些?

图15.5Docker支持Linux重要安全技术

自定义设置某些安全技术会非常复杂,因为这需要用户深入理解安全技术的运作原理,同时还要了解Linux内核的工作机制。希望这些技术在未来能够简化配置的过程,但就现阶段而言,使用Docker在对安全技术的封装中提供的默认值是很不错的选择。

本文摘自正在热销的技术书 《深入浅出Docker》

Nigel,Poulton(奈吉尔·波尔顿) 著,李瑞丰,刘康

干货 | Docker中用到的主要Linux安全技术有哪些?

  • Docker技术入门与实践指南教程
  • 容器与容器云解析,帮助您快速建立Docker技术知识体系
  • Docker认证工程师实用指南

《深入浅出Docker》由Docker概览和Docker技术两部分组成,遵循简介—详解—命令的章节布局,全面系统地剖析Docker的基本原理与实践应用。清晰详细的操作步骤结合大量的实际代码,为读者切实入门Docker保驾护航。


以上所述就是小编给大家介绍的《干货 | Docker中用到的主要Linux安全技术有哪些?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术(第2卷)

计算机程序设计艺术(第2卷)

高德纳 / 机械工业出版社 / 2008-1 / 109.00元

《计算机程序设计艺术:半数值算法(第2卷)(英文版)(第3版)》主要内容:关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷已经组成了程序设计理论和实践的惟一的珍贵资源,无数读者都赞扬Knuth的著作对个人的深远影响,科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员已经成功地将他的“菜谱式”的解应用到日常问题上,所有人都由于Knuth在书中表现出的博......一起来看看 《计算机程序设计艺术(第2卷)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换