相信很多开发者都默认Docker这样的容器是一种沙盒(sandbox)应用,也就是说他们可以用root权限在Docker中运行随便什么应用,而Docker有安全机制能保护宿主系统。比如,有些人觉得Docker容器里面的进程跟虚拟机里面的进程一样安全;还有的人随便找个源就下载没有验证过的Docker镜像,看都不看内容就在宿主机器上尝试、学习和研究;还有一些提供PaaS服务的公司竟然允许用户向多租户系统中提交自己定制的Docker镜像。请注意,上述行为均是不安全的。

浅谈Docker隔离性和安全性

本文将介绍Docker的隔离性和安全性,以及为什么它在隔离和安全性上不如传统的虚拟机。

何谓安全性?

单单就Docker来说,安全性可以概括为两点:

不会对主机造成影响 不会对其他容器造成影响

所以安全性问题90%以上可以归结为隔离性问题。而Docker的安全问题本质上就是容器技术的安全性问题,这包括共用内核问题以及Namespace还不够完善的限制:

/proc、/sys等未完全隔离 Top, free, iostat等命令展示的信息未隔离 Root用户未隔离 /dev设备未隔离 内核模块未隔离 SELinux、time、syslog等所有现有Namespace之外的信息都未隔离。

当然,镜像本身不安全也会导致安全性问题。

真的不如虚拟机安全?

其实传统虚拟机系统也绝非100%安全,只需攻破Hypervisor便足以令整个虚拟机毁于一旦,问题是有谁能随随便便就攻破吗?如上所述,Docker的隔离性主要运用Namespace 技术。传统上Linux中的PID是唯一且独立的,在正常情况下,用户不会看见重复的PID。然而在Docker采用了Namespace,从而令相同的PID可于不同的Namespace中独立存在。举个例子,A Container 之中PID=1是A程序,而B Container之中的PID=1同样可以是A程序。虽然Docker可透过Namespace的方式分隔出看似是独立的空间,然而Linux内核(Kernel)却不能Namespace,所以即使有多个Container,所有的system call其实都是通过主机的内核处理,这便为Docker留下了不可否认的安全问题。

传统的虚拟机同样地很多操作都需要通过内核处理,但这只是虚拟机的内核,并非宿主主机内核。因此万一出现问题时,最多只影响到虚拟系统本身。当然你可以说黑客可以先Hack虚拟机的内核,然后再找寻Hypervisor的漏洞同时不能被发现,之后再攻破SELinux,然后向主机内核发动攻击。文字表达起来都嫌繁复,更何况实际执行?所以Docker是很好用,但在迁移业务系统至其上时,请务必注意安全性!

浅谈Docker隔离性和安全性

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党
2021-06-16 10:51:12
云技术 云计算核心技术Docker教程:Docker 利用构建缓存
在检查每条指令时,Docker会在其缓存中查找可以重用的现有映像,而不是创建新的(重复)映像。 <详情>
2021-04-23 11:53:50
2021-04-23 09:17:44
云技术 云计算核心技术Docker教程:Docker配置网络概述
无论Docker主机是运行Linux,Windows还是两者结合使用,都可以使用Docker以与平台无关的方式管理它们。 <详情>
2021-03-26 09:32:08
云技术 云计算Docker教程:在守护程序停机期间使容器保持活动状态
默认情况下,当Docker守护程序终止时,它将关闭正在运行的容器。您可以配置守护程序,以便在守护程序不可用时容器仍在运行。此功能称为实时还原。实时还原选项有助于减少由 <详情>
2021-03-25 12:38:20
云技术 云计算核心技术Docker教程:自动启动容器
使用--live-restore可以使容器在Docker升级期间保持运行,即便网络和用户输入被中断。 <详情>