在Ubuntu主机上使用docker-py操作Docker是否存在安全风险?
问题1:原生Ubuntu主机上使用docker-py构建镜像的安全风险
- 首先可以明确,你当前的使用场景和「容器内挂载docker socket」的风险场景完全不同,不存在容器逃逸后直接获取主机Docker控制权的风险,整体安全等级和你本地直接用Docker CLI操作是对等的。
- 存在的风险和使用Docker CLI构建镜像的风险完全一致:
- 如果你的docker-py代码接收外部传入的Dockerfile、构建上下文参数,没有做严格的内容校验,攻击者可以传入恶意Dockerfile执行危险指令,或是通过构建上下文的符号链接读取主机上的敏感文件
- 如果你修改了
docker.sock的默认权限,允许未加入docker组的非授权用户访问,不管用什么工具调用都会存在越权操作Docker daemon的风险
- 只要你运行docker-py代码的用户权限可控,构建逻辑不接收不可信的外部输入,该使用方式不存在额外的安全风险。
问题2:Docker CLI与docker-py SDK的安全差异原因
二者底层确实都是通过socket调用Docker daemon的同一套API,本身不存在本质的安全差异,大家提到的安全差异主要来自以下几点:
- 默认校验逻辑不同:Docker CLI是面向终端用户的交互式工具,默认自带大量参数校验、风险提示逻辑,很多危险操作需要主动添加
--force等确认参数才能执行;而docker-py作为程序调用的SDK,默认是静默执行逻辑,只要传入符合格式的参数就会直接调用API,没有额外的交互校验步骤,很容易因为代码逻辑的疏漏执行危险操作 - 使用场景不同:docker-py通常被用来封装成对外提供服务的工具(比如公共CI构建平台、镜像构建服务),需要接收大量外部用户的输入,一旦输入过滤没做到位就会出现安全问题;而Docker CLI大多是管理员本地手动操作,输入完全由管理员可控,自然暴露的风险更低
- 补丁迭代节奏不同:Docker CLI是Docker官方的核心工具,出现API相关的安全漏洞后会第一时间修复CLI的调用逻辑;docker-py虽然也是官方维护的SDK,但补丁更新节奏整体慢于CLI,部分边缘场景的安全校验逻辑也没有CLI完善。
内容的提问来源于stack exchange,提问作者foobar8675
相关产品推荐
相关产品推荐

