docker_practice/security/daemon_sec.md
Kang Huaishuai ea00e0d82a
Update format
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2021-03-07 15:29:05 +08:00

20 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Docker服务端的防护
运行一个容器或应用程序的核心是通过 Docker 服务端Docker 服务的运行目前需要 root 权限因此其安全性十分关键
首先确保只有可信的用户才可以访问 Docker 服务Docker 允许用户在主机和容器间共享文件夹同时不需要限制容器的访问权限这就容易让容器突破资源限制例如恶意用户启动容器的时候将主机的根目录`/`映射到容器的 `/host` 目录中那么容器理论上就可以对主机的文件系统进行任意修改了这听起来很疯狂但是事实上几乎所有虚拟化系统都允许类似的资源共享而没法禁止用户共享主机根文件系统到虚拟机系统
这将会造成很严重的安全后果因此当提供容器创建服务时例如通过一个 web 服务器要更加注意进行参数的安全检查防止恶意的用户用特定参数来创建一些破坏性的容器
为了加强对服务端的保护Docker REST API客户端用来跟服务端通信 0.5.2 之后使用本地的 Unix 套接字机制替代了原先绑定在 127.0.0.1 上的 TCP 套接字因为后者容易遭受跨站脚本攻击现在用户使用 Unix 权限检查来加强套接字的访问安全
用户仍可以利用 HTTP 提供 REST API 访问建议使用安全机制确保只有可信的网络或 VPN或证书保护机制例如受保护的 stunnel ssl 认证下的访问可以进行此外还可以使用 [ HTTPS 和证书](https://docs.docker.com/engine/security/https/) 来加强保护。
最近改进的 Linux 命名空间机制将可以实现使用非 root 用户来运行全功能的容器这将从根本上解决了容器和主机之间共享文件系统而引起的安全问题
终极目标是改进 2 个重要的安全特性
* 将容器的 root 用户 [映射到本地主机上的非 root 用户](https://docs.docker.com/engine/security/userns-remap/),减轻容器和主机之间因权限提升而引起的安全问题;
* 允许 Docker 服务端在 [ root 权限(rootless 模式)](https://docs.docker.com/engine/security/rootless/) 下运行,利用安全可靠的子进程来代理执行需要特权权限的操作。这些子进程将只允许在限定范围内进行操作,例如仅仅负责虚拟网络设定或文件系统管理、配置操作等。
最后建议采用专用的服务器来运行 Docker 和相关的管理服务例如管理服务比如 ssh 监控和进程监控管理工具 nrpecollectd 其它的业务服务都放到容器中去运行