Docker使用虽无风验,但仍需小心

简介: 本文讲的是Docker使用虽无风验,但仍需小心【编者的话】本文主要介绍了Docker使用过程的风险误区以及需要留意的风险,本文日文版请看は危険という誤解と、本当に注意すべき点。
本文讲的是 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.(翻译:杨庆伟 校对:田浩浩
999.png
原文发布时间为: 2016-06-29
本文作者: 杨庆伟
本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。
原文标题:Docker使用虽无风验,但仍需小心
相关文章
|
网络协议 Docker 容器
使用 docker 后出现的网络异常现象
硬件: [root@sh-storage-128204 ~]# dmidecode -t system dmidecode 2.12 SMBIOS 2.7 present. Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: To be filled by O.E.
2748 0
|
25天前
|
Docker 容器
进入Docker容器中
进入Docker容器中
34 2
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
1月前
|
Oracle 关系型数据库 数据库
|
5天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
10 0
|
14天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
13 0
|
14天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
21 0
|
14天前
|
存储 Linux Shell
centos 部署docker容器 安装 、基本使用方法(一)
centos 部署docker容器 安装 、基本使用方法(一)
25 0
|
22天前
|
Kubernetes 网络协议 Docker
Docker 容器的DNS
Docker 容器的DNS
25 1
|
25天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
46 1