docker的隔离与安全?

docker隔离不如vmware彻底,某些场景需要root权限运行,但又不符合安全规范,请问如何解决显示全部

docker隔离不如vmware彻底,某些场景需要root权限运行,但又不符合安全规范,请问如何解决

收起
参与12

查看其它 3 个回答顾黄亮的回答

顾黄亮顾黄亮  技术总监 , 畅销书作者

这个问题老生常谈了,很多人都说过,docker很多场景都用到了root用户,而且docker一直所标榜的沙箱和隔离是否能够保证安全。 比如很多人就说,使用 root 用户运行 Docker 容器内部的应用,是否能够做到数据和权限的安全?容器内的 root 是否可以操纵宿主机资源?
1、一般人理解docker的root权限和宿主机的root权限是一样的,docker可以操作宿主机上的任何东西,这个观点是错误的,此root非彼root。
2、docker的root和宿主机的root不是一回事,这两种root在权限方面有这很大的差异,这种权限隔离的差异来源于linux内核的 Capabilities技术,这东西的解释如下: 将之前与超级用户 root(UID=0)关联的特权细分为不同的功能组,Capabilites 作为线程( Linux 并不真正区分进程和线程 )的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。
3、 Capabilities 在 Docker 容器的管理过程中使用非常方便。如果不需要授予 Docker 容器足够的系统权限,也就是足够的 Capabilities ,只需在运行 Docker 容器时不使用--privileged参数,如: docker run -it --priviledged=false ubuntu:14.04 /bin/bash 或者 docker run -it ubuntu:14.04 /bin/bash 如果需要授予 Docker 容器足够的管理权限,则直接将--privileged 参数设为 true ,如: docker run -it --privileged=true ubuntu:14.04 /bin/bash 另外,在docker run命令中,添加--cap-add以及--cap-drop参数也完全可以更灵活的添加以及移除 Linux Capabilities 。
4、虽然Docker 容器中的 root 用户与宿主机的 root 用户同属一个 uid ,均为 0 ;并且大家也可以发现不同的 Capabilities 可以区分 root 用户的权限,那么 Docker 容器中的 root 用户的 Capabilities该怎么处理,默认情况下, docker run 命令的 privileged 参数值为 false 。因此,毫无疑问, Docker 容器内部的 root 用户将受到严格的权限限制,很多有系统相关的操作权限都将被剥夺,只具备超级用户的一些基本权限。
5、综上所述,docker的root不是我们想象的linux的root

银行 · 2020-07-09
浏览2562

回答者

顾黄亮
顾黄亮131836
技术总监畅销书作者
擅长领域: 云计算数据库系统运维

顾黄亮 最近回答过的问题

回答状态

  • 发布时间:2020-07-09
  • 关注会员:5 人
  • 回答浏览:2562
  • X社区推广