大家好,我是D哥
点击关注下方公众号,Java面试资料 都在这里
来源:toutiao.com/a6688928782453047819/
随着互联网技术的飞速发展和变革,近几年容器技术可以说是非常火热!
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。
# 总结
容器的优势在于是它使得业务的上云部署更快,资源利用更高。但是在安全性上并没有虚拟机那样安全!Docker无法取代VM!
PS:Docker安全遗留问题
  • 非root无法运行Docker daemon
  • User Namespace可以将host中的一个普通用户映射成容器里的root用户
  • 容器的中心管理方式不利于第三方的任务编排
  • 对宿主机磁盘使用没有限额配置
  • 容器共享带宽,容易导致I/O问题
技术交流群
最后,D哥也建了一个技术群,主要探讨一些新的技术和开源项目值不值得去研究及IDEA使用的“骚操作”,有兴趣入群的同学,可长按扫描下方二维码,一定要备注:城市+昵称+技术方向,根据格式备注,可更快被通过且邀请进群。
▲长按扫描
继续阅读
阅读原文