本文讲的是Docker使用虽无风验,但仍需小心【编者的话】本文主要介绍了Docker使用过程的风险误区以及需要留意的风险,本文日文版请看は危険という誤解と、本当に注意すべき点。
Docker的快速增长得益于它不仅是一款简单、易用的轻量虚拟环境的工具,而且它还有自己特有的概念,并且越来越多的特性的添加。有时不是很容易获取有关于它们的正确信息,从而造成误解。
尤其是,安全隐患常常随着情绪被高估或低估而非基于正确信息。但是为了让Docker成为方便、安全的工具,了解准确的信息去使用Docker是至关重要的。
因此,该篇文章我会描述Docker容器的安全性和一些要注意的地方。
迷信使用Docker是有风险的
仅运行中的容器就会危及Docker宿主机
由于容器是运在隔离的环境中,仅仅是运行容器(没有其他选项)不会暴露Docker宿主机给容器的。截至目前,没有已知的案例,仅仅运行容器就导致了恶意容器去入侵Docker主机或其他容器。
如果Docker宿主机与容器共享了目录或文件,容器就可以访问Docker宿主机。但除非明确地共享(如使用-V选项),否则宿主机的目录或文件不会与容器共享。
同样除非明确将容器的网络端口打开给Docker宿主机(通过-p,-P选项),Docker宿主机外面的任何容器都不能连接到容器上。
需要注意的是,相对于虚拟机,容器与操作系统结合的更加紧密。因此,相对大的可能存在未知的安全漏洞且攻击者会滥用这些漏洞,尤其当使用根用户运行容器时。始终更新到最新版本或修复安全补丁,并留意最新的安全消息。考虑使用非根用户运行容器或使用用户命名空间。安装安全软件也是情理之中的。
容器的根用户和Docker宿主机的根用户一直是同一个
过去没有办法为容器区分用户IDE空间,容器和宿主机一直共享根用户。
但从1.10版本开始,就可以使用用户命名空间,Docker宿主机和容器间可以有独立的根用户。尽管有容器和主机之间多重屏障,但因为根用户可以做太多事情,有可能存在一个洞访问到Docker宿主机。容器中使用非根用户可以让Docker容器更加安全。
Docker一直不应允许容器去访问宿主机。
管理Docker系统的容器显然自身需要访问Docker宿主机去管理Docker系统。例如,Shipyard(容器管理工具)或nginx-proxy(通过挂钩容器事件设置代理)都需要访问Docker系统。
Docker容器容易遭受Fork炸弹
译者注:Fork炸弹是指不断调用Fork使系统资源耗尽,从而导致系统拒绝服务甚至崩溃。
过去,没有直接的方法进行保护以免遭Fork炸弹之害,但是Docker 1.11引进了--pid --limits
选项,它可以限制容器上的进程数量从而保护不受Fork之害。
需要注意的事情
虽然使用Docker没有必要过度担心,但有些关于Docker的安全性的事情需要留心。
运行容器作为互联网服务器
如果运行一个容器作为一个互联网服务器,应该像通常的服务器重视它的安全性。设置相应的访问控制,并留意服务器和应用程序的安全性问题。
永远不要运行不可信的Docker镜像作为互联网服务器,避免运行不完全理解的Docker镜像作为互联网服务器。
Docker不会打开容器网络端口除非明确指定打开。当运行Docker宿主机在虚拟机上,容器并没有开放给互联网(除非虚拟机对互联网开放的),如果你在PC(Windows,MAC)上使用Docker,它的防火墙或路由器将保护容器免受来自互联网的连接的伤害(除非你明确允许)。
Docker 命令选项(共享文件、开放端口)
重视Docker命令选项。
尤其是,如果你设置文件共享选项(例如:-v),则允许容器访问Docker宿主机。当共享Socket文件时,如(docker.sock),此时允许容器去管理Docker,要小心这些。不要共享太多的文件,仅共享需要和容器共享的文件。
如果你打开了容器的网络端口,Docker宿主机是对互联网是开放的,此时容器是能够从互联网上访问到。如果你没有合适的访问控制,攻击者可能侵入容器。当打开容器的网络端口时,需设置合适的访问控制。
如果Docker镜像不是稳定版,就要考虑不开放网络端口或明确禁用网络连接(-net=none)。
运行未知脚本
除了Docker,永远不要运行未知脚本,因为这是很危险的。风险不仅是入侵Docker或Docker宿主机,而且它可能是一个恶意脚本,会删除所有文件或安装病毒、蠕虫、木马。
留意你得到脚本的方式,无论提供脚本的网站是否可靠与否,是否使用HTTPS(SSL)下载。同时你也可以阅读查看脚本。
运行未知容器
恶意的或有问题的容器可能滥用地接入互联网,或不必要地消耗CPU或内存资源。
一些有名的登记库如Docker Hub的官方镜像具有相对较小的风险。但是不明网站提供的未知容器将会是高风险。
评估Docker镜像的风险,并在必要时,禁用网络访问或限制对资源的访问。
小结
Docker是一个简单和易于使用的工具,它同时具有良好的部分和风险。尤其是,当你开放容器的网络端口到互联网上,像通常的互联网服务器一样重视。
Docker让你自由地瞬间创造和毁灭的环境。如果你使用可信Docker镜像同时不开放容器的网络端口到互联网上,Docker是没有冒险的。
不要太恐惧,但使用Docker要理解其概念、行为和用法。
原文链接:Using Docker is not risky. But, there are things to look out for.(翻译:杨庆伟 校对:田浩浩)
原文发布时间为:2016-06-29
本文作者:杨庆伟
本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。
原文标题:Docker使用虽无风验,但仍需小心