docker_practice/security/daemon_sec.md
2014-09-21 20:50:55 +08:00

2.1 KiB
Raw Blame History

##Docker Daemon Attack Surface 运行一个容器或者应用程序意味着运行一个Docker 服务。Docker服务要求root权限所以你需要了解一些重要的细节。

首先确保只有可信的用户可以访问docker服务因为这会直接导致很严重的后果。因为Docker允许你在主机和容器之间共享文件夹这就容易让容器突破资源限制。比如当你在启动容器的时候将主机的/映射到容器的/host目录中那么容器就可以对主机做任何更改了。这听起来很疯狂不过你要知道几乎所有虚拟机系统都有在物理主机和虚拟机之间共享资源的限制所以需要你自己来考虑这一层的安全性。

比如当你使用一个web api来提供容器创建服务时要比平常更加注意参数的检查防止恶意的用户用精心准备的参数来创建带有任意参数的容器。

因此REST API在docker0.5.2之后使用unix socket替代了绑定在127.0.0.1上的tcp socket后者容易遭受跨站脚本攻击。现在你可以使用增强的unix sockt权限来限制对控制socket的访问。

你依然可以将REST API发布到http服务上。不过一定要小心确认这里的安全机制确保只有可信的网络或者vpn或者受保护的stunnel和ssl认证可以对REST API进行访问。还可以使用https和认证HTTPS and certificates. 最近改进的linux namespace将很快可以实现使用非root用户来运行全功能的容器。这解决了因在容器和主机共享文件系统而引起的安全问题。

Docker的终极目标是改进2个安全特性

  • 将root用户的容器映射到主机上的非root用户减轻容器和主机之间因权限提升而引起的安全问题
  • 允许Docker服务在非root权限下运行委派操作请求到那些经过良好审计的子进程每个子进程拥有非常有限的权限虚拟网络设定文件系统管理、配置等等。
  • 最后如果你在一个服务器上运行Docker建议去掉Docker之外的其他服务除了一些管理服务比如ssh 监控和进程管理工具nrpe clllectd等等。