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文件不生效的解決辦法 http://blog.csdn.net/sch0120/article/details/53160885
docker remote api 的安全隱患