不向特定用户显示所有 docker 容器

不向特定用户显示所有 docker 容器

我想使用一台服务器托管多个 docker 容器。我想让另一个用户能够管理新的 docker 容器,但我不想让他访问我启动的所有其他容器,因为它们可能包含敏感数据。

有没有一种方法可以创建一个不需要创建虚拟机的安全配置?

答案1

原始问题:如何允许用户旋转他自己的新容器而不访问其他容器?

这是我最初的答案,但也许我误解了问题,或者问题不太清楚,无论如何我把原始解决方案保留在这里

Docker 本身不提供此功能,但有多种方法可以实现此功能。

这个想法是,docker 命令需要用户在 sudo 或 docker 组中才能运行,所以如果你只希望用户旋转一个新容器,而不是将用户添加到提供所有 docker 命令完全访问权限的 sudo 或 docker 组,你可以只为该用户将几个 docker 命令列入白名单。

例如如果你想允许用户 tom 运行以下容器:

sudo docker container run --it --name ubuntu-tom ubuntu:latest bash

你可以通过运行将以下行添加到 sudoers 文件中须藤维须藤

tom ALL=NOPASSWD: /usr/bin/docker container run --it --name ubuntu-tom ubuntu:latest bash

这允许用户 tom 以 root 身份运行此特定 docker 命令,而无需密码。任何其他 docker 命令对于用户 tom 仍然不可用。

另一种选择是设置受限 shell,但我不会在这里详细介绍。

更新的问题:如何限制用户管理新容器?

我不知道仅使用 Docker 的可能解决方案。

听起来你需要一个诸如 Kubernetes 或 ECS 之类的编排器。

这样,编排器就拥有了 Docker 守护进程,你可以利用编排器提供的权限层。文章提供了限制用户访问命名空间的一个很好的例子。

答案2

dockerd它应该非常简单地按每个用户运行,并利用文件权限来分离用户访问。

刚刚找到一个使用 systemd 模板来进行此设置的教程: https://www.jujens.eu/posts/en/2018/Feb/25/multiple-docker/

答案3

你为什么不实现 portainer 它有很多功能,比如用户控制、GUI 菜单等等,你也不必在服务器上创建用户

波特奈尔

答案4

docker API 内部不具备此功能,请将对此的直接访问视为系统管理员级别的功能,因为它为用户提供了对服务器的 root 访问权限。因此,要实现此功能,您需要提供自己的 API 间接访问权限,或者使用在 docker 之上提供此功能的其他工具。

  1. 您可以提供一个脚本,该脚本可通过 sudo 访问,并在执行命令之前对命令执行所有安全检查。实现此目的的最简单方法是在创建的每个对象(容器、卷、网络等)上添加标签,然后在任何查询中仅返回与该过滤器匹配的对象,并将运行的命令限制为仅具有这些标签的对象。编写起来并不容易,所以我只看到人们选择后面的选项。但是,如果运行的命令和容器非常有限,这可能是一个足够好的解决方案。

  2. Kubernetes 命名空间提供了此功能,并在 docker 之上运行。这需要大量实现,因此大多数人只有在需要 Kubernetes 提供的更多功能时才会选择这个方向。

  3. 有各种第三方工具(一些是商业工具)用于处理用户访问。Portainer 和 Rancher 是两种流行的工具,但我个人没有使用过它们。

  4. Docker 提供了一个包含此功能的企业产品,称为 UCP。您可以为用户提供 docker api/cli 访问权限,该访问权限在将请求发送到底层 docker 引擎之前会通过 UCP 进行 RBAC 检查。

相关内容