这一年,Docker在安全性上做了哪些努力?进展如何?

当面对容器技术时,安全性往往是人们最为关注的问题。开发人员喜爱容器,某些运维人员也对其赞赏有加。但如果使用不当,其是否会带来安全隐患?我们热爱容 器方案的各类天然特性,但在安全性方面其是否会同时成为一种短板?在今天的文章中,我希望带领大家了解一些围绕容器进行的深度安全保障机制。由于本文专门 针对容器系统,因此我不会拿出篇幅讨论主机节点或者通过禁用Linux守护进程减少攻击面之类的议题。

只读容器系统(Docker 1.5)

首先,我们可以运行只读容器系统。通过指定--read-only, 容器的rootfs将以只读方式启动,这样容器当中的任意进程都无法对容器本身进行写入操作。这意味着当我们由于应用中存在安全漏洞而出现文件上传行为 时,其会由于容器rootfs的只读属性而被阻断。这同时也会阻止应用向rootfs内写入日志记录,因此我们可能需要利用远程日志记录机制或者指定分卷 来完成相关写入操作。

使用方法(docs):

$ docker run --read-only -v /icanwrite busybox touch /icanwrite here
User-namespaces (试验阶段)

很多人都在热切期盼着这项功能。目前,拥有容器的root权限意味着我们在主机上同样拥 有root权限。如果我们能够在自己的容器当中实现/bin,那么也同样能够将任何预期内容添加进来,甚至彻底控制主机系统。而随着user- namespace的引入,大家将能够在保证用户在容器内拥有root权限的前提下,利用uid:gid保证对应的用户/群组在容器之外处于非高权限状 态。作为第一阶段,我们现在可以对每个域实例中的root进行重新映射。作为发展的下一阶段,我们可能会进行全局映射以及每容器映射,不过这样的能力是否 必要仍在讨论当中。

使用方法(docs):

$ docker daemon --userns-remap=default

Seccomp(Git主分支)

在命名空间的帮助下,我们已经能够实现权限分享。但除此之外,我们还需要对容器当中能够运行的具体负载 进行控制。这时就需要依靠seccomp了——所谓seccomp,其实就是安全计算模式的缩写。它允许大家对系统调用进行筛选,这样我们就能够为应用程 序定义其需要的系统调用,并拒绝其它一切不必要的调用行为。下面例举一个简短的socket.json实例:

{

"defaultAction": "SCMP_ACT_ALLOW",

"syscalls": [

{

"name": "socket",

"action": "SCMP_ACT_ERRNO"

}

]

}

其运行结果将如下所示:

# docker run -ti --rm --security-opt seccomp:tcpsocket.json ubuntu bash

root@54fd6641a219:/# nc -l 555

nc: Operation not permitted

Nautilus项目

目前Docker生态系统中的一项重要功能缺失就是对镜像内容的检查。此前曾有文章指出,当下Docker Hub中超过30%的官方镜像存在着常见安全漏洞,这一消息旋即引起轩然大波。Docker方面立即着手处理,而且现在各被发布在Docker Hub中的官方镜像在正式推出前都需要进行扫描。在本届Dockercon欧洲大会上,Docker方面公布了Nautilus项目,这是一项官方提供的 镜像扫描服务,能够让我们更为轻松地构建并使用高完整性内容。

目前关于Nautilus项目还没有太多官方说明,不过我们了解到其运行在后台当中,而且Docker方面表示他们已经借此对超过7400万条 pull进行了保护。最近,他们还发起了一项调查,征求用户们的实际使用需求。在这里我只能先为大家提供一些假设。首先,Docker方面表示该项目能 够:

保障镜像安全

实现组件库存/许可管理

实现镜像优化

实现基础性功能测试

以下是几项可能即将实现的特性:

以内部方式运行Nautilus

针对单一镜像或者单一部署节点进行计费

AppArmor配置文件

通过使用AppArmor,大家可以借助配置文件对功能进行限制。配置文件可以实现极为出色的控制粒 度,但很多人并不希望把时间耗费在编写配置文件方面。考虑到这类配置文件对Docker容器运行的重要意义,Jessie Frazelle作为Docker的核心维护者之一,创造了bane以简化配置文件的编写难度。它能够使用toml输入文件,并生成及安装 AppArmor配置文件。该配置文件随后可以被用于运行Docker容器,且采用与之前相同的语法:

docker run -d --security-opt="apparmor:name_of_profile" -p 80:80 nginx
Docker安全状况

这一切都能够帮助我们实现容器安全保障,当然Docker自身也在努力降低相关方案的执行难度。这意味着如果大家希望了解与本议题相关的各类细节信息,可以点击此处查看GitHub的对应分区并获取各类最新建议。

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-09-27 08:23:40

这一年,Docker在安全性上做了哪些努力?进展如何?的相关文章

Docker的安全性 之一

Docker的安全性 (提示:对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面.) 译(https://blog.docker.com/2013/08/containers-docker-how-secure-are-they/) 这篇博客的作者是Jerome Petazzoni是DotCloud的资深工程师,我会结合他的讲解,加一些个人阐述,主要从以下几个方面来阐述Docker的安全性问题. 容器安全性的本质,结合name

docker在windows上为啥需要虚拟化。

docker在linux上运行不需要虚拟化,但是,如果在windows上安装运行就需要虚拟化,找到答案了. Docker 底层的核心技术包括 Linux 上的名字空间( Namespaces) . 控制组( Control groups) . Union 文件系统( Union file systems) 和容器格式( Container format) .我们知道, 传统的虚拟机通过在宿主主机中运行 hypervisor 来模拟一整套完整的硬件环境提供给虚拟机的操作系统. 虚拟机系统看到的环境

新手指南:通过 Docker 在 Linux 上托管 .NET Core

我是首次接触 Docker 并且距离成为一名 Linux 高手还有很远的一段路程.因此,这里的很多想法是来自一个新手. 安装 按照 https://www.microsoft.com/net/core 上的介绍在你的电脑上安装 .NET Core .这将会同时在 Windows 上安装 dotnet 命令行工具以及最新的 Visual Studio 工具. 源代码 你可以直接到 GitHub 上找最到最新完整的源代码. 转换到 .NET CORE 1.0 自然地,当我考虑如何把 API 从 .N

通过Docker在Linux上托管.NET Core

这篇文章基于我之前的文章 .NET Core 入门.首先,我把 RESTful API 从 .NET Core RC1 升级到了 .NET Core 1.0,然后,我增加了对 Docker 的支持并描述了如何在 Linux 生产环境里托管它. 我是首次接触 Docker 并且距离成为一名 Linux 高手还有很远的一段路程.因此,这里的很多想法是来自一个新手. 安装 按照 https://www.microsoft.com/net/core 上的介绍在你的电脑上安装 .NET Core .这将会

关于Docker在树莓派上的5件事

本文讲的是关于Docker在树莓派上的5件事[编者的话]在树莓派上使用Docker需要知道5件事--Docker领袖Alex Ellis@alexellisuk. 如果你是Docker新手,请访问我的Docker实践在线研讨会:Hands-On Docker labs. 1.仅用一个命令安装Docker 今天,你没必要准备大量技术来让Docker运行在你的设备上.一个命令就足够了(通过apt-get在后台执行)--你甚至可以记住它: 在Raspbian输入: curl -sSL get.dock

Docker 公司是如何做社区的?

今天看了一个Docker公司是如何做社区的PPT,演讲者是Docker公司的市场部老大.Docker从发布之初就受到了开发者的关注,1.0版本发布的时候Docker就收到了超过460位贡献者的8741条改进建议,Docker也承认是社区帮助他们迅速达到了这一新的里程碑.在每周订阅的Docker周报里,看到来自世界各地的爱好者分享关于Docker的博文以及各个国家的meetup,不禁为Docker的社区点赞.近日,Docker社区经理分享了Docker在社区孕育方面的经验,我在PPT的基础上进行了

我们能在博客(Blog)上做点什么?

趋势已经形成 1995年左右在国内,当你问起你周围朋友,你的E-mail多少时,可能没几个人会说自己使用过这个"新玩意儿".因为那个年代国内网络还没有完全普及,更别说让E-mail流行开来.而当时间来到了2007年,你可以在网络上随便发个帖子,做一下统计,有多少人玩过Blog.回答的使用率可能是很惊人的,或多或少都会玩过点,特别是80后的一代.这就是网络普及所带来的一种趋势,这种趋势已经形成了,市场也已经发展起来,而且相当成熟.几乎每个门户网站都在做Blog,每个Blog都在吸引着一定

新手何苦为在百上做外链苦苦挣扎

好多人都觉得百度给自己的产品权重很高,在百度自己产品上做外链能获得很高的权重的同时还能吸引很多流量.有些朋友还提出做百度百科然后带上自己的链接就相当于百度认同了你的网站,在这个关键词上你就是权威了.这些观点我觉得是错的,实际上很多列子也证明了这个是错误的.下面我们就来说说为什么不要去百度产品上做外链. 第一.费时间 大家应该看到很多朋友写的那些在百度产品上做外链的经验,大多都强调了帐号等级,百度对于审核力度还是很高的,级别低的帐号根本就不能发外链.就算是高级别帐号还是有帖数的限制,我自己的经验在

怎样在ppt上做记号

1.打开PowerPoint2010,点击放映,单击鼠标右键,在打开的快捷菜单中选择"指针选项"命令,选择"圆珠笔"/"荧光笔". 2.如果你对图笔的颜色不感兴趣,还可在右击幻灯片时弹出的快捷菜单中选择"指针选项"命令,再选择"墨迹颜色",选择你喜欢的颜色. 3. 这样就可以在PPT上做记号了.使PPT的讲解更加的深入人心. 三联推荐:点击免费下载最新版WPS办公软件    >>查看更多电脑教程