随着互联网技术的飞速发展和变革,近几年容器技术可以说是非常火热!
2014 年下半年腾讯游戏开始在生产环境中使用 Docker,2015年阿里引入Docker的镜像技术,随着日益完善的Docker容器技术生态链,使得当下企业也逐渐实现容器化的业务部署,容器化“已”成为未来的发展趋势。
Docker容器化的实现依赖于虚拟化技术的发展,所以在技术界出现了这样一种声音:“Docker将取代VM!”这种观点是否正确呢?
在互联网+的大数据时代,对于技术考量最重要的条件是技术的安全性,今天小编就从技术的安全性上对两种技术进行分析“Docker是否能够取代VM?”
内核漏洞
近几年,不少致命的Linux内核漏洞频繁被爆出,这些漏洞对于容器和虚拟机有怎样的影响呢?
Docker:内核攻击对于容器化环境来说可能是致命性的,因为容器与主机共享相同的系统内核,因此单独信任容器内置保护机制是不够的。
容器的隔离性使得某个应用程序的漏洞不会直接影响到其他容器的应用程序,但是漏洞可能会破坏与其他容器所共享的单一的操作系统,进而影响机器上的其他容器。
VM:而虚拟机在这一点上就不一样,虚拟机拥有独立的操作系统,针对某个应用程序的漏洞,只是影响单一的虚拟机,而不会影响机器上的其他虚拟机,以达到更加安全的效果。
如果漏洞允许代码执行,那么它将在主机操作系统上执行,而不是在容器内执行;如果此漏洞允许任意内存访问,则攻击者可以更改或读取任何其他容器的任何数据。
数据分离
Docker:在docker容器上,有一些非命名空间的资源:
- SELinux
- Cgroups
- file systems under /sys, /proc/sys,
- /proc/sysrq-trigger, /proc/irq, /proc/bus
- /dev/mem, /dev/sd* file system
- Kernel Modules
如果攻击者可以利用当中的任意一个元素,都将拥有主机系统的操作权限。
VM:VM OS无法直接访问任何这些元素。它将与管理程序通信,管理程序将对主机OS进行适当的系统调用。同时过滤掉无效的呼叫,增加一层安全性。
资源开销
Docker:由于宿主机上的所有容器是共享相同的内核和相同的资源,如果对某些资源(CPU、内存、磁盘等)的访问不受限制,那么异常的容器将占用整个宿主机的资源,从而影响其他容器的运行,影响应用程序。
VM:在VM上,资源由管理程序定义,所以任何VM都不能拒绝来自任何资源的主机操作系统,因为管理程序本身可以配置为限制使用资源。
套接字问题
容器在默认情况下都安装了docker Unix套接字(/var/run/docker.sock),此套接字,可以关闭、启动或者创建新的镜像。
当你的容器启动并共享套接字的时候,你就给了容器操控宿主机的权限,它将可以启动或终止其它容器,在宿主机拖入或创建镜像,甚至写入到宿主机的文件系统。正确配置和保护,可以使用docker容器实现高级别的安全性,但它的安全性还是低于正确配置的VM。
总结
容器的优势在于是它使得业务的上云部署更快,资源利用更高。但是在安全性上并没有虚拟机那样安全!Dockerg还是无法取代VM!
PS:Docker安全遗留问题
- 非root无法运行Docker daemon
- User Namespace可以将host中的一个普通用户映射成容器里的root用户
- 容器的中心管理方式不利于第三方的任务编排
- 对宿主机磁盘使用没有限额配置
- 容器共享带宽,容易导致I/O问题