docker remote api 的安全隐患
开启docker的api,首先要知道docker的守护进程daemon,在下认为daemon作为Client和service连接的一个桥梁,负责代替将client的请求传递给service端。
默认情况daemon只由root控制,但我们可以通过-H绑定到端口上,这样通过端口访问的方式执行命令。
我用的是Ubuntu17的虚拟机+docker17.03.0-ce,网上介绍两种方法
1、 直接执行 docker -d -H unix:///var/run/docker.sock -H 0.0.0.0:4243 ,在我虚拟机里并不行,没有-d参数
2、 修改配置文件,在Ubuntu环境下修改其配置文件 /etc/default/docker,加入 DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0:4232",同样没有启动进程。
查看原因是修改的配置文件没有生效,这是因为/etc/default/docker文件是为upstart和SysVInit准备的,而使用service命令时并不会读取它,因此我们还需要做如下更改:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS
~~~~~~~~~~
sudo systemctl daemon-reload
sudo service docker restart
这样我们就可以看到,成功开启的docker的api
但经过我测试并不能直接通过http访问,操作容器。但如果未设置访问控制,可以利用docker client远程连接到对方docker service里
通过docker -H tcp://127.0.0.1:2375 +command 直接操作容器
这样的话可以通过命令直接连进去
造成安全隐患。
防护方式:最主要的不要从外网能访问到这个api。无论是设置认证,或是访问控制。
参考文章:修改/etc/default/docker文件不生效的解决办法 https://www.geek-share.com/detail/2690113924.html
- centos docker remoteapi 配置
- Docker Remote api(一)
- Docker Rest(Remote) API
- Docker Remote API 初步尝试
- docker remote api 调用
- Docker Remote API 配置
- Docker Remote Api未授权访问漏洞
- Mac OSX 开启 docker remote REST api
- [开源夏令营][四] Docker remote API 之 镜像篇
- Docker 1.12新功能探索(8):Remote Api 1.24
- Docker Remote API
- 8 Docker Remote API
- [开源夏令营][四] Docker remote API 之 镜像篇
- Docker remote API简单配置使用
- [开源夏令营][三] 研究 Docker remote API 的前期准备
- Docker Remote API
- [开源夏令营][五] Docker remote API 之 容器篇
- 调用docker registry api交互过程中http code码详解
- HttpServletRequest的API:getLocalPort(), getRemotePort() getRemotePort() 释义
- docker-api