Docker 以 root 身份运行容器进程——我应该担心吗?

信息安全 码头工人 容器
2021-08-30 04:33:15

我正在运行具有 Docker 功能(“ containerstation ”)的(QNAP)NAS。我认为通过容器安装应用程序而不是来自商店(或 3rd 方商店)的应用程序会更安全。

许多软件包在其官方商店中已过时,QNAP 以 root/admin(甚至网络服务器)身份运行所有程序和应用程序,因此我认为 Docker 将是一个解决方案。

现在我部署了一些 Docker 实例,它们的进程似乎也以 root/admin 身份运行。

在此处输入图像描述

这不禁让我思考:我此刻的安全感是不是错觉?还是使用 docker 容器比“常规”root 安全得多?

1个回答

我假设您担心以 root 身份运行的容器化应用程序。

容器中的根是一种风险。它仍然以 root 身份与内核交互。如果一个应用程序设法突破容器,它在主机上拥有 root 权限。

但是,与主机上的 root 相比,容器中的 root 具有有限的功能。SYS_ADMIN例如,它没有mount. 但是,尽可能避免 root 在容器中以将风险降至最低。

如果您的容器化应用程序不需要 root 权限,您可以使用非特权用户运行容器。最简单的方法是--user UID:GIDdocker 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.