在Docker器中实现安全与隔离.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在Docker器中实现安全与隔离

在Docker容器中实现安全与隔离在云计算中,多租户技术被认为是一个非常重要的功能。如果我们将容器中运行的应用看作一个租户,那么优秀的安全隔离技术设计可以确保租户只能使用它们可用的资源。随着容器技术的发展,它的安全、隔离和资源控制的功能也在不断进步。本文中,我们将回顾Docker容器如何仅仅使用linux的原始功能来实现安全与隔离,比如namespaces, cgroups, capabilities等。虚拟化和隔离操作系统级的虚拟化,容器,空间,以及“chroot with steroids”,其实都定义了同一个概念:用户空间隔离。类似Docker的产品都使用了操作系统级的虚拟化,通过用户空间隔离可以提供额外的安全性。0.9版本起,Docker包含了libcontainer库作为它直接虚拟化的方法,这个功能由Linux内核提供。 此外,它还通过 LXC[1],systemd-nspawn[2],和libvert[3]使用了抽象虚拟接口。这些虚拟化库全部利用了Linux的原始容器(参见上图)namespacescgroupscapabilities等等。Docker在一个包装中联合了以上功能,并称之为容器格式。Libcontainer默认的容器格式被称为libcontainer。Docker也支持使用LXC的传统Linux容器。在将来,Docker可能会支持其他的容器格式,比如结合BSD jails或者Solaris Zones。执行驱动程序是一种特殊容器格式的实现,用来运行docker容器。在最新的版本中,libcontainer有以下特性:是运行docker容器的默认执行驱动程序。和LXC同时装载。使用没有任何其他依赖关系的Go语言设计的库,来直接访问内核容器的API。在Docker 0.9中,LXC现在可以选择关闭。注意:LXC在将来会继续被支持。如果想要重新使用LXC驱动,只需输入指令docker -d –e lxc,然后重启Docker。目前的Docker涵盖的功能有:命名空间使用,cgroups管理,capabilities权限集,进程运行的环境变量配置以及网络接口防火墙设置——所有功能是固定可预测的,不依赖LXC或者其它任何用户区软件包。只需提供一个根文件系统,和libcontainer对容器的操作配置,它会帮你完成剩下的事情。支持新建容器或者添加到现有的容器。事实上,对libcontainer最迫切的需求是稳定,开发团队也将其设为了默认。用户命名空间Docker不是虚拟化,相反的,它是一个支持命名空间抽象的内核,提供了独立工作空间(或容器)。当你运行一个容器的时候,Docker为容器新建了一系列的namespace。一些Docker使用的linux命名空间:pid namespace用作区分进程(PID: Process ID)。容器中运行的进程就如同在普通的Linux系统运行一样,尽管它们和其他进程共享一个底层内核。net namespace用作管理网络接口。DNAT允许你单独配置主机中每个用户的的网络,并且有一个方便的接口传输它们之间的数据。当然,你也可以通过使用网桥用物理接口替换它。ipc namespace用作管理对IPC (IPC: InterProcess Communication)资源的访问。mnt namespace用作管理mount-points (MNT: Mount)。uts namespace用作区分内核和版本标识符(UTS: Unix Timesharing System)。CgroupsLinux上的Docker使用了被称为cgroups的技术。因为每个虚拟机都是一个进程,所有普通Linux的资源管理应用可以被应用到虚拟机。此外,资源分配和调度只有一个等级,因为一个容器化的Linux系统只有一个内核并且这个内核对容器完全可见。总之,cgroups可以让Docker:实现组进程并且管理它们的资源总消耗。分享可用的硬件资源到容器。限制容器的内存和CPU使用。可以通过更改相应的cgroup来调整容器的大小。通过检查Linux中的/sys/fs/cgroup对照组来获取容器中的资源使用信息。提供了一种可靠的结束容器内所有进程的方法。CapabilitiesLinux使用的是“POSIX capabilities”。这些权限是所有强大的root权限分割而成的一系列权限。在Linux manpages上可以找到所有可用权限的清单。Docker丢弃了除了所需权限外的所有权限,使用了白名单而不是黑名单。一般服务器(裸机或者虚拟机)需要以root权限运行一系列进程。包括:SSHcronsyslogd硬件管理工具 (比如负载模块)网络配置工具 (比如处理DHCP, WPA, or VPNs)等。每个容

文档评论(0)

yaoyaoba + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档