为什么在 Docker 容器中以 root 身份运行应用程序不安全?



有许多消息来源告诉在 Docker 容器内以根目录运行应用程序是不好的,但它们总是引用此链接: https://blog.docker.com/2014/06/docker-container-breakout-proof-of-concept-exploit/很久以前就修复了问题,因为较新的 Docker 版本将内核功能列入白名单。

因此:

  • 是否有任何其他 Docker 漏洞在容器根用户下有效,但在容器非根用户下不起作用?
  • 是否有任何 Linux 内核漏洞在容器根用户下有效,但在容器非根用户下不起作用?

所以,这有点回避了这个问题,但我会尽力给你一个翔实而深入的答案,以帮助你理解以root身份运行应用程序所涉及的问题。

首先,这不是100%明确的禁忌。您可以以 root 用户身份运行应用程序,在某些情况下可能需要这样做。但是在软件中,我们有一种被称为最小特权原则的东西,在某些领域也被称为最小权限原则。这是计算机安全中的一个重要概念,根据用户的工作需要,在计算机上促进最低特权。每个系统组件或进程应具有履行其职责所需的最小权限。这有助于通过消除可能导致网络攻击和计算机危害的不必要权限来减少计算机的"攻击面"。您可以将此原则应用于您工作的计算机,方法是通常无需管理权限即可操作。

通过不必要地以 root 身份运行应用程序,授予程序执行不需要执行的操作的权限 - 例如执行系统功能和管理各种操作系统的配置设置。如果您的应用程序是一个充满烹饪食谱的基本网站,则它不需要访问系统配置文件。

应用程序旨在以非管理安全性(或仅作为凡人)运行,因此您必须提升其权限才能修改底层系统。这就是通用安全模型多年来的工作方式。

它还使应用程序更易于部署,并增加了一层可伸缩性。通常,应用程序所需的权限越少,在较大的环境中部署就越容易。安装设备驱动程序或需要提升的安全权限的应用程序通常在其部署中涉及其他步骤。例如,在 Windows 上,无需安装即可直接运行没有设备驱动程序的解决方案,而必须使用 Windows 安装程序服务单独安装设备驱动程序,以便向驱动程序授予提升的权限。

如果这不能回答您的问题,我深表歉意,但我已经尽力解释为什么您不应该以 root 身份运行应用程序。我希望这有帮助!

打击图像滥用。当映像用户滥用 Docker 时,以非特权用户身份运行应用程序有助于确保系统安全 - 例如,使用--privileged运行或将系统目录挂载到容器中。

最新更新