保护 Docker 守护程序
Protecting Docker daemon
我是否正确理解 the docs 讨论如何在以远程计算机作为目标发出命令(docker run
,...)时保护 Docker 守护程序?在本地控制 docker 时,这与我无关。
运行 Docker swarm 也不需要此步骤,因为节点之间的安全性由 Docker automatically. For example, using Portainer 在具有多个代理的 swarm 中处理不需要由于 overlay
集群中的网络默认加密,因此需要额外的安全措施。
基本上,当我的目标机器总是 localhost
时,不需要采取额外的安全措施,对吗?
记住 任何人 可以 运行 任何 Docker 命令几乎可以轻松获得不受限制的根级别访问主机:
docker run -v/:/host busybox sh
# vi /host/etc/passwd
所以是的,如果您使用的是远程 Docker 守护进程,则必须 运行 通过 每个 文档中的正确步骤,或者您的系统将获得 root 权限。
如果您使用的是本地 Docker 守护进程并且您没有启用极其危险的 -H
选项,那么安全性完全由 /var/run/docker.sock
特殊的 Unix 权限控制文件。该套接字通常由 docker
组拥有,并将本地用户添加到该组;同样,任何可以 运行 docker ps
的人也可以简单地编辑主机的 /etc/sudoers
文件并授予自己任何他们想要的权限。
因此:访问 docker.sock
意味着信任主机上不受限制的 root。如果您将套接字传递到您信任的 Docker 容器中以启动其他容器,那么您也隐含地相信它不会在主机挂载系统目录时将其挂载。如果你试图启动容器来响应网络请求,你需要非常小心地处理参数,以免 shell 注入攻击危及你的系统; 运行 你的工作量几乎总是找到其他方法更好。
简而言之,只是 运行ning Docker 并不是安全问题的免费通行证。很多常见的做法,如果方便的话,实际上是很不安全的。快速网络搜索 "Docker cryptojacking" 可以很快找到结果。
我是否正确理解 the docs 讨论如何在以远程计算机作为目标发出命令(docker run
,...)时保护 Docker 守护程序?在本地控制 docker 时,这与我无关。
运行 Docker swarm 也不需要此步骤,因为节点之间的安全性由 Docker automatically. For example, using Portainer 在具有多个代理的 swarm 中处理不需要由于 overlay
集群中的网络默认加密,因此需要额外的安全措施。
基本上,当我的目标机器总是 localhost
时,不需要采取额外的安全措施,对吗?
记住 任何人 可以 运行 任何 Docker 命令几乎可以轻松获得不受限制的根级别访问主机:
docker run -v/:/host busybox sh
# vi /host/etc/passwd
所以是的,如果您使用的是远程 Docker 守护进程,则必须 运行 通过 每个 文档中的正确步骤,或者您的系统将获得 root 权限。
如果您使用的是本地 Docker 守护进程并且您没有启用极其危险的 -H
选项,那么安全性完全由 /var/run/docker.sock
特殊的 Unix 权限控制文件。该套接字通常由 docker
组拥有,并将本地用户添加到该组;同样,任何可以 运行 docker ps
的人也可以简单地编辑主机的 /etc/sudoers
文件并授予自己任何他们想要的权限。
因此:访问 docker.sock
意味着信任主机上不受限制的 root。如果您将套接字传递到您信任的 Docker 容器中以启动其他容器,那么您也隐含地相信它不会在主机挂载系统目录时将其挂载。如果你试图启动容器来响应网络请求,你需要非常小心地处理参数,以免 shell 注入攻击危及你的系统; 运行 你的工作量几乎总是找到其他方法更好。
简而言之,只是 运行ning Docker 并不是安全问题的免费通行证。很多常见的做法,如果方便的话,实际上是很不安全的。快速网络搜索 "Docker cryptojacking" 可以很快找到结果。