假设我有一个docker镜像,并将其部署在某个服务器上。但我不希望其他用户访问此图像。有没有加密docker镜像的好方法?
发布于 2016-06-02 16:39:37
实际上不是,如果用户有权限运行docker守护进程,那么他们将拥有访问所有镜像的权限-这是由于docker需要提升权限才能运行。
有关原因的更多信息,请参阅docker security guide摘录。
Docker守护程序攻击面
使用Docker运行容器(和应用程序)意味着运行Docker守护进程。这个守护进程当前需要root权限,因此您应该知道一些重要的细节。
首先,应该只允许可信用户控制您的Docker守护进程。这是一些强大的Docker功能的直接结果。具体来说,Docker允许您在Docker主机和来宾容器之间共享目录;它允许您在不限制容器访问权限的情况下这样做。这意味着您可以启动一个容器,其中的/host目录将是您主机上的/目录;并且该容器将能够不受任何限制地更改您的主机文件系统。这类似于虚拟化系统如何允许文件系统资源共享。没有什么能阻止你与虚拟机共享你的根文件系统(甚至你的根块设备)。
这具有很强的安全含义:例如,如果您从web服务器检测Docker以通过API提供容器,您应该比往常更加小心地进行参数检查,以确保恶意用户无法传递导致Docker创建任意容器的特制参数。
因此,REST API端点(由Docker CLI用来与Docker守护程序通信)在Docker 0.5.2中发生了更改,现在使用UNIX套接字而不是绑定在127.0.0.1上的TCP套接字(如果您碰巧在本地计算机上VM之外直接运行Docker,则后者容易受到跨站点请求伪造攻击)。然后,您可以使用传统的UNIX权限检查来限制对控制套接字的访问。
如果您明确决定这样做,您还可以通过HTTP公开REST API。但是,如果您知道上述安全含义,则应确保只能从受信任的网络或VPN访问它;或者确保它受到保护,例如,使用stunnel和客户端SSL证书。您还可以使用HTTPS和证书来保护它们。
该守护程序还可能易受其他输入的攻击,例如使用“docker load”从磁盘加载图像,或使用“docker pull”从网络加载图像。这一直是社区改进的重点,特别是在“拉”安全性方面。虽然这些是重叠的,但应该注意的是,“docker load”是一种用于备份和恢复的机制,目前并不被认为是一种用于加载映像的安全机制。从Docker 1.3.2开始,图像现在在Linux/Unix平台上的chroot子进程中提取,这是迈向特权分离的更广泛努力的第一步。
最终,预计Docker守护进程将运行受限的权限,委派操作经过良好审计的子进程,每个进程都有自己(非常有限)的Linux功能范围、虚拟网络设置、文件系统管理等。也就是说,Docker引擎本身的一部分最有可能在容器内运行。
最后,如果您在服务器上运行Docker,建议在服务器上独占运行Docker,并将所有其他服务迁移到Docker控制的容器内。当然,保留您喜欢的管理工具(可能至少是一台SSH服务器)以及现有的监视/监督进程(例如,NRPE、collectd等)是很好的。
发布于 2020-05-25 09:11:52
假设只有一些字符串需要加密。可以使用openssl或其他解决方案加密此数据。应该在docker容器内设置加密解决方案。在构建容器时-数据是加密的。当容器运行时-数据被解密(可能在使用从.env文件传递的密码短语的条目的帮助下)。这样可以安全地存储容器。
如果时间允许,我将在这周玩它,因为我自己也很好奇。
https://stackoverflow.com/questions/37584961
复制相似问题