如何在 Fedora 中授予用户使用 Docker 的权限

还没有读者喜欢这篇文章。
Poll: Which code repository do you use?

Opensource.com

在 docker-dev 列表中,有人询问关于 Fedora 文档,该文档描述了如何将用户添加到 docker 组。该用户希望允许他的用户执行 docker search 以尝试查找他们可以使用的镜像。

来自关于 Fedora 的 Docker 安装文档

授予用户使用 Docker 的权限

Fedora 19 和 20 附带了 Docker 0.11。该软件包已经在 Fedora 20 中更新到 1.0。如果您仍在使用 0.11 版本,则需要授予用户使用 Docker 的权限。

docker 命令行工具通过套接字文件 /var/run/docker.sockdocker 守护进程通信,该文件由 docker 组拥有。必须是该组的成员才能连接到 docker -d 进程。

幸运的是,这份文档有些错误,您仍然需要将用户添加到 docker 组,以便他们可以从非 root 帐户使用 docker。我希望所有发行版都采用此策略。

在 Fedora 和 RHEL 上,我们在 docker.sock 上具有以下权限

# ls -l /run/docker.sock
srw-rw----. 1 root docker 0 9月 19 12:54
/run/docker.sock

这意味着只有 root 用户或 docker 组中的用户才能与此套接字通信。此外,由于 dockerdocker_t 身份运行,SELinux 阻止所有受限域连接到此 docker.sock

Docker 没有授权控制

Docker 目前没有任何授权控制。如果您可以连接到 docker 套接字,或者 docker 正在网络端口上监听并且您可以连接到它,则您将被允许执行所有 docker 命令。

例如,如果我将 "dwalsh" 添加到我机器上的 docker 组,我可以执行。

> docker run -ti --rm --privileged --net=host -v /:/host fedora /bin/sh
# chroot /host

此时,您或任何具有这些权限的用户都将完全控制您的系统。

将用户添加到 docker 组应被视为等同于添加

USERNAME ALL=(ALL) NOPASSWD: ALL

到 /etc/sudoers 文件。用户在其机器上运行的任何应用程序都可能变为 root,甚至在他不知情的情况下。我认为更好、更安全的解决方案是编写脚本以允许用户访问您想要允许的内容。

cat /usr/bin/dockersearch
#!/bin/sh
docker search $@

然后使用以下命令设置 sudo

USERNAME ALL=(ALL) NOPASSWD: /usr/bin/dockersearch

我希望最终向 docker 添加某种授权数据库,以允许管理员配置您将允许用户执行哪些命令,以及您可能允许他们启动/停止哪些容器。

首先消除执行 docker run --privilegeddocker run --cap-remove 的能力将是朝着正确方向迈出的一步。但是,如果您阅读过我的其他帖子,您就会知道还需要做更多工作才能使 容器具有容器性

最初发布在 www.projectatomic.io 上,标题为“在 Fedora 中授予用户使用 Docker 的权限。” 在 Creative Commons 许可下转载。

User profile image.
Daniel Walsh 在计算机安全领域工作了近 30 年。Dan 于 2001 年 8 月加入 Red Hat。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可发布。
© . All rights reserved.