/var/run/docker.sock的Docker安全风险是什么?

时间:2016-11-28 12:20:51

标签: security docker docker-compose

this blog article中,我在评论中找到了以下引文:

  

Ben Firshman

     

是的 - 你是对的我应该指出Docker套接字的安全问题。这是目前生产中实用的主要阻碍因素,我们一定会寻求帮助,使其更好地运作,正如您在待办事项列表中所注意到的那样。

虽然我确信这对许多人来说是有意义的,但对于我们其他人来说,有人可以用明确的术语来解释这个"安全问题"是什么?我认为它指的是:

    volumes:
  - "/var/run/docker.sock:/var/run/docker.sock"
docker-compose文件中的

。那是对的吗?如何被利用?这是否有效地禁止了生产使用的这种方法?如果是,是否有解决方法?

3 个答案:

答案 0 :(得分:15)

  

对于我们其他人来说,有人可以用明确的术语解释这个"安全问题"是

docker /var/run/docker.sock的所有者是运行容器的主机的root,其默认组成员身份为docker组。这就是为什么在另一个容器中加载var/run/docker.sock会为您提供root权限的原因,因为现在您可以对root组成员身份为docker的用户执行任何操作。

  

这是否有效禁止此方法用于生产?如果是,是否有解决方法?

对于解决方法,这些帖子可能会有所帮助:https://integratedcode.us/2016/04/08/user-namespaces-sharing-the-docker-unix-socket/https://integratedcode.us/2016/04/20/sharing-the-docker-unix-socket-with-unprivileged-containers-redux/

退一步后,了解需要挂载var/run/docker.sock的用例并查看是否有其他方法来满足用例会很有用。遗憾的是,如果没有问题中的用例描述,很难提供避免安装unix插槽的替代方案。

祝你好运,并且为了做正确的事而感到荣幸!

答案 1 :(得分:2)

任何可以写入dockerd套接字的进程也有效地在主机上具有root访问权限... 那么,你能否在生产中使用它取决于你。

答案 2 :(得分:1)

已接受的答案提供了很好的解释,因此,我不会重复任何有关您装入root拥有的文件这一事实的详细信息。

也许下面的示例对某些读者而言是微不足道的,但我很惊讶没有人提及它。

请记住您可以访问主机上非常特殊的文件-docker.sock

因此,如果您在容器中安装Docker:

apt-get update  
apt-get install docker.io -y

或者作为容器创建的一线工具:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu:latest sh -c  "apt-get update ; apt-get install docker.io -y ; bash"

(在容器中用docker ps检查是否看到主机上正在运行其他容器)。

现在,您可以完全控制主机中的其他容器。