作为root用户运行的Docker的安全性

Docker 博客文章指出:

默认情况下,Docker容器是相当安全的; 特别是如果你照顾在容器内运行你的进程作为非特权用户(即非root)。

那么,如果我在Docker下作为root运行,那么安全问题是什么? 我的意思是,如果我把我的进程作为非特权用户来处理,这是相当安全的,那么,我怎样才能以root用户的身份对容器中的主机造成危害呢? 我只是要求它理解它,如果以root身份运行时不安全,怎么能隔离呢? 哪个系统调用可以暴露主机系统呢?

以root身份运行时,可以访问更广泛的内核服务。 例如,您可以:

  • 操纵networking接口,路由表,netfilter规则;
  • 创build原始套接字(一般来说,“异国情调”的套接字,行使代码比较旧的TCP和UDP接受审查较less);
  • mount / unmount / remount文件系统;
  • 更改文件所有权,权限,扩展属性,覆盖常规权限(即使用稍微不同的代码path);
  • 等等

(有趣的是,所有这些例子都受到function的保护。)

关键是,作为根,你可以锻炼更多的内核代码; 如果该代码中存在漏洞,则可以以root用户身份触发该漏洞,但不能以普通用户身份进行触发。

另外,如果有人find一个突破容器的方法,那么如果以root身份出现问题,显然可以比普通用户造成更多的伤害。

您可以通过在/proc/sysrq-trigger上回显/proc/sysrq-trigger来重新启动主机。 在docker中以root身份运行的进程可以做到这一点。

这似乎是相当不错的原因,不要在Docker中以root身份运行进程;)