赞
踩
在云计算中,多租户技术被认为是一个非常重要的功能。如果我们将容器中运行的应用看作一个租户,那么优秀的安全隔离技术设计可以确保租户只能使用它们可用的资源。
随着容器技术的发展,它的安全、隔离和资源控制的功能也在不断进步。本文中,我们将回顾Docker容器如何仅仅使用linux的原始功能来实现安全与隔离,比如namespaces, cgroups, capabilities等。
操作系统级的虚拟化,容器,空间,以及“chroot with steroids”,其实都定义了同一个概念:用户空间隔离。类似Docker的产品都使用了操作系统级的虚拟化,通过用户空间隔离可以提供额外的安全性。
0.9版本起,Docker包含了libcontainer库作为它直接虚拟化的方法,这个功能由Linux内核提供。 此外,它还通过 LXC[1],systemd-nspawn[2],和libvert[3]使用了抽象虚拟接口。
这些虚拟化库全部利用了Linux的原始容器(参见上图)
Docker在一个包装中联合了以上功能,并称之为容器格式。
默认的容器格式被称为libcontainer。
Docker也支持使用LXC的传统Linux容器。在将来,Docker可能会支持其他的容器格式,比如结合BSD jails或者Solaris Zones。
执行驱动程序是一种特殊容器格式的实现,用来运行docker容器。在最新的版本中,libcontainer有以下特性:
docker -d –e lxc
,然后重启Docker。
Docker不是虚拟化,相反的,它是一个支持命名空间抽象的内核,提供了独立工作空间(或容器)。当你运行一个容器的时候,Docker为容器新建了一系列的namespace。
一些Docker使用的linux命名空间:
Linux上的Docker使用了被称为cgroups的技术。因为每个虚拟机都是一个进程,所有普通Linux的资源管理应用可以被应用到虚拟机。此外,资源分配和调度只有一个等级,因为一个容器化的Linux系统只有一个内核并且这个内核对容器完全可见。
总之,cgroups可以让Docker:
Linux使用的是“POSIX capabilities”。这些权限是所有强大的root权限分割而成的一系列权限。在Linux manpages上可以找到所有可用权限的清单。Docker丢弃了除了所需权限外的所有权限,使用了白名单而不是黑名单。
一般服务器(裸机或者虚拟机)需要以root权限运行一系列进程。包括:
每个容器都是不同的,因为几乎所有这些任务都由围绕容器的基础设施进行处理。默认的,Docker启用一个严格限制权限的容器。大多数案例中,容器不需要真正的root权限。举个例子,进程(比如说网络服务)只需要绑定一个小于1024的端口而不需要root权限:他们可以被授予CAP_NET_BIND_SERVICE来代替。因此,容器可以被降权运行:意味着容器中的root权限比真正的root权限拥有更少的特权。
Capabilities只是现代Linux内核提供的众多安全功能中的一个。为了加固一个Docker主机,你可以使用现有知名的系统:
如果你的发行版本附带了Docker容器的安全模块,你现在就可以使用它们。比如,装载了AppArmor模板的Docker和Red Hat自带SELinux策略的Docker。希云(http://csphere.cn)以后会为大家推荐更多精美文章,请大家继续关注!
欢迎申请试用希云cSphere1.0版本,此版本不仅解决跨主机通信,更可以固定容器ip地址,以及创建容器时手动指定容器ip地址。
如果想亲自操作,请观看免费培训视频(http://csphere.cn/training)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。