我假设您担心以 root 身份运行的容器化应用程序。
容器中的根是一种风险。它仍然以 root 身份与内核交互。如果一个应用程序设法突破容器,它在主机上拥有 root 权限。
但是,与主机上的 root 相比,容器中的 root 具有有限的功能。SYS_ADMIN
例如,它没有mount
. 但是,尽可能避免 root 在容器中以将风险降至最低。
如果您的容器化应用程序不需要 root 权限,您可以使用非特权用户运行容器。最简单的方法是--user UID:GID
在docker run
.
但我假设您的容器化应用程序需要 root 权限。Docker 提供了用户命名空间来解决这个问题。
我不在这里给出示例设置,因为我对用户命名空间不是很熟悉。我设置了一次,可以确认它有效。我建议阅读文档:https ://docs.docker.com/engine/security/userns-remap/
简而言之:用户命名空间设置在容器中完成了一个“假”根用户,该用户在主机上映射到一个非特权用户。如果应用程序出现故障,它在主机上没有 root 权限。
除此之外,您可以减少容器功能以提高容器安全性。使用选项--cap-drop=xyz
并删除容器不需要的所有内容。或者更好的是,--cap-drop=ALL
只使用和添加真正需要的功能,例如--cap-add=CHOWN
. 查看https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
提高容器安全性的另一个选择是--security-opt=no-new-privileges
.