在 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.sock
与docker
守护进程通信,该文件由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
组中的用户才能与此套接字通信。此外,由于 docker
以 docker_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 --privileged
或 docker run --cap-remove
的能力将是朝着正确方向迈出的一步。但是,如果您阅读过我的其他帖子,您就会知道还需要做更多工作才能使 容器具有容器性。
最初发布在 www.projectatomic.io 上,标题为“在 Fedora 中授予用户使用 Docker 的权限。” 在 Creative Commons 许可下转载。
评论已关闭。