我正在尝试让服务器上的 docker 更安全。主要问题是大多数人说“如果一个人有权访问 docker,他们也可以是 root”,对于少数管理员来说,这不是你想要的。
具体来说,他们可以使用-v
并挂载/etc
到/mnt
容器中,更改影子文件并获得对主机的访问权限。他们-d
还可以使用 或 特权选项来做更多事情。
所以基本上,有几件事我想“尝试”并限制。
- 卷绑定挂载
- 特权
--add-cap
-d
(特定項目?)
我目前的想法:
- 将 docker 的 bash 脚本设为别名,在其上使用 sudo 并使用正则表达式执行所有不应该执行的操作。
- 打开远程 API,保护它,也许用 nginx 和 nginx 中的正则表达式对其进行反向代理,做他们不应该做的事情。
- 使用其他工具?Mesos/Marathon/Swarm/Shipyard/其他
可选项目是将容器提交给 git 代码,并让“检查器”验证内容Dockerfile
并为其创建映像。然后对该映像进行签名并自动部署。(但这不会再给他们太多自由)
此外,删除绑定卷并不是最好的选择。如果我们有一个 docker 插件,上面写着“您只能/data
以用户 X 的身份在 上挂载”,其中USER
就是Dockerfile
用户 X,那么事情就会简单得多。
就像是docker-novolume-插件对于卷来说已经是一个良好的开端,但并不限制绑定卷。
最终的问题是,我如何让用户以自己的用户/docker 身份构建/拉取/运行 docker 镜像,并且无法 root 系统。只要能用,就不必完美。
答案1
确保docker
发动机安全需要关注许多不同的方面,而纵深防御是总是关于图层的安全。
您列出的要求之一,限制用户可以命令docker
引擎执行的操作,可能是最重要的要求之一,因为截至目前,引擎docker
尚未实现授权控制。
您的替代方案包括:
闭源解决方案,例如扭锁,一个实现 RBAC 和策略控制来访问 API
docker
的项目OpenShift 起源,一个开源项目,以以下形式实现基于角色的访问控制安全约束和细粒度的授权策略。它的部署相当简单,并且对于获得开箱即用的解决方案有很大帮助。
我还建议研究一下不同的操作系统docker
,并且建议不要使用通用操作系统,而要使用专门的操作系统,例如原子Atomic 和 OpenShift 的结合将确保您还可以:
- 扫描您的图像经常。
- 使用受信任的注册表
- 定义安全计算容器配置文件。这项技术及其实施的改进是一项工作正在进行中在
docker
整个世界。 - 降低能力容器中的应用程序不需要它。
- 使用 SELinux列出的许多其他安全措施都有局限性,但 SELinux 在所有其他措施都失败时能够很好地提供安全网。一些例子:它将帮助限制对
docker
套接字的访问,它将控制是否在容器之间共享文件描述符是允许的,它可以分配不同的 MCS 级别每个容器/容器组,以将它们与主机和其他容器隔离。