Docker 容器中的进程不应以 root 身份运行。以您指定为 Dockerfile 的一部分或使用docker run. 这通过减少对容器中任何威胁的攻击面来最大限度地降低风险。
在本文中,您将了解以 root 身份运行容器化应用程序的危险。您还将看到如何创建一个非 root 用户并在不可能的情况下设置命名空间。
为什么以 root 身份运行是危险的?
默认情况下,容器以 root 身份运行。Docker 守护程序在您的主机上以 root 身份执行,并且运行的容器也将以 root 身份运行。
虽然看起来容器内的 root 是一个独立的用户,但实际上它与您主机上的 root 帐户相同。分离仅由 Docker 的容器隔离机制提供。没有强大的物理边界;您的容器的另一个进程由您的主机内核上的 root 用户运行。这意味着您的应用程序、Docker 运行时或 Linux 内核中的漏洞可能允许攻击者突破容器并在您的计算机上执行 root 特权操作。
有一些内置的保护措施可以降低发生这种情况的风险。容器内的根是非特权的并且具有受限的能力。这会阻止容器使用系统管理命令,除非您在启动容器时手动添加功能或使用特权模式。
尽管有这种缓解措施,但允许应用程序以 root 身份运行仍然存在危险。就像您在传统环境中限制使用 root 一样,在容器中不必要地使用它是不明智的。您正在提供一个特权过高的环境,以便在发生违规事件时为攻击者提供更多立足点。
以非 root 用户身份运行容器化应用程序
容器化应用程序以普通用户身份运行是最佳实践。大多数软件不需要 root 访问权限,因此更改用户提供了针对容器突破的即时防御层。