为什么容易将docker守护进程绑定到0.0.0.0?

最近我在我的docker gitlab CI容器中出现错误:

无法连接到Docker守护进程。 docker守护程序是否在这个主机上运行?

我发现这个线程在一个职位的build议 : sudo service docker stop && sudo nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

最终我在我的服务器主机上发现了一个滥用警告,那就是我的机器在端口2375上进行了端口扫描

我发现一个https://hub.docker.com/r/kannix/monero-miner/的实例杀死了它十次,最终重新启动,并且从那以后还没有返回。

这个网站表明有一个:

Cisco CloudCenter Orchestrator(CCO;以前称为CliQr)的Docker Engineconfiguration中的漏洞可能允许未经身份validation的远程攻击者在受影响的系统上安装具有高权限的Docker容器。 受影响的产品:此漏洞影响Docker Engine TCP端口2375在系统上打开且绑定到本地地址0.0.0.0(任何接口)的所有Cisco CloudCenter Orchestrator(CCO)部署版本。

所以我的问题是:以上的方式(绑定到tcp://0.0.0.0:2375)启动docker守护进程本质上是脆弱的(如果是这样,为什么?)还是在docker中的错误?

“任何接口”意味着你希望docker守护进程监听所有networking接口上的传入连接,而不仅仅是localhost。 这意味着任何能够访问服务器的人都可以连接到端口2375并到达Docker守护进程并利用它。 “高级特权”是“根”,所以你的系统是妥协的,应该从头开始重新安装。

解决这个问题的简单方法就是说你只能从受信任的主机连接到docker守护进程,这意味着select要绑定的networking接口。 一个典型的select是“本地主机”,因为这只允许来自机器本身的连接。