docker的隔离与安全?

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

4回答

顾黄亮顾黄亮  技术总监 , 苏宁消费金融有限公司
zhuhaiqiangaigoppb赞同了此回答
这个问题老生常谈了,很多人都说过,docker很多场景都用到了root用户,而且docker一直所标榜的沙箱和隔离是否能够保证安全。 比如很多人就说,使用 root 用户运行 Docker 容器内部的应用,是否能够做到数据和权限的安全?容器内的 root 是否可以操纵宿主机资源?1、一般人理解docker的...显示全部

这个问题老生常谈了,很多人都说过,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
浏览831
埃里克埃里克  资深解决方案架构师 , 红帽企业级开源解决方案中心
aigoppb赞同了此回答
如果只是在 docker 环境下,在 openshift 中缺省条件下是不允许以root用户运行的,怕造成权限的泄露,openshift为了容器运行的安全,通过 scc 结合 os 层面的 selinux 去进行限制。 如果某些场景一定要再容器内布通过root权限,可以打开SCC限制,但建议通过sysdig进行一些audit,防...显示全部

如果只是在 docker 环境下,在 openshift 中缺省条件下是不允许以root用户运行的,怕造成权限的泄露,openshift为了容器运行的安全,通过 scc 结合 os 层面的 selinux 去进行限制。

如果某些场景一定要再容器内布通过root权限,可以打开SCC限制,但建议通过sysdig进行一些audit,防止root用户在容器内部中进行一些非法操作。

Docker 因为 docker daemon 是需要基于 root 运行的,机制上很容易造成容器内进程发生权限逃逸,拿到宿主机的权限,另外 docker 机制不好的地方是所有的运行容器都是这个进程的子进程,如果有错误产生,就会有孤儿进程 . 正因为这个原因,在新的 openshift 4 版本中基于 podman 和 crio 的容器引擎,不需要后端运行 daemon 进程,通过 cri-o 或者是 podman 直接去构建 runc 的容器,构建和运行容器都不需要 root 权限,防止权限逃逸,具备了更多的安全性特征。

收起
 2020-07-09
浏览813
youki2008youki2008  系统架构师 , DDT
目前podman是下一代容器规范,podman解决了这一问题,可以关注一下显示全部

目前podman是下一代容器规范,podman解决了这一问题,可以关注一下

收起
 2020-07-13
浏览723
mtming333mtming333  系统架构师 , 甜橙金融翼支付
docker服务本身以root启动,但容器中的用户可以是自建的应用账号,符合安全规范显示全部

docker服务本身以root启动,但容器中的用户可以是自建的应用账号,符合安全规范

收起
 2020-07-09
浏览791

提问者

问题状态

  • 发布时间:2020-07-09
  • 关注会员:5 人
  • 问题浏览:2316
  • 最近回答:2020-07-13