如何确保docker主机不允许生根

我正在尝试使服务器上的docker更安全。 主要的问题是,大多数人都说“如果一个人可以访问泊坞窗,他们也可以是root”,对于一个pipe理员来说,这不是你想要的。

详细说一下,他们可以使用-v并将/etc挂载到容器中的/mnt上,并更改影子文件并获得对主机的访问权限。 他们可以使用-d或特权选项来做更多的事情。

所以基本上,有一些我想“尝试”和限制的东西。

  1. 卷绑定挂载
  2. 特权
  3. --add-cap
  4. -d (某些项目?)

我的想法到目前为止:

  • docker的bash脚本的别名,使用sudo和正则expression式,他们不应该做的。
  • 打开远程api,保护它,也许反向使用nginx和正则expression式在nginx中代理它们不应该做的事情。
  • 使用其他工具? Mesos /马拉松/群/船厂/无论

可选项是将容器提交给git代码,并让“检查器”validationDockerfile的内容并为其创build映像。 然后签署该图像并自动部署。 (但是这不会给他们太多的自由)

另外,删除绑定量并不是最好的。 如果我们有一个Dockerfile插件,说“你只能挂载在/data ,用户X”, Dockerfile中的USER是那个用户X,会更简单些。

像docker-novolume-plugin这样的东西对于卷来说已经是一个不错的开始,但是并不限制绑定卷。

最后问题是,我怎么让用户build立/拉/运行泊坞窗图像作为自己的用户/docker,不能根系统。 只要工作,就不一定是完美的。

保护docker引擎需要关注许多不同的方面,纵深防御总是关于安全

你列出的要求之一,限制什么用户可以命令docker引擎做,可能是最重要的,因为,目前, docker引擎不实施授权控制。

您的select包括:

  • 像Twistlock这样的闭源解决scheme,这是一个实施RBAC和策略控制来访问Docker API的项目

  • OpenShift Origin是一个开源项目,以安全约束和细粒度授权策略的forms实现基于angular色的访问控制。 部署起来相当容易,对于开箱即用的解决scheme有很大的帮助。

我也build议研究docker引擎可以部署到的不同操作系统,并build议不要使用通用操作系统,而要使用专门的操作系统,如Atomic 。 primefaces和OpenShift一起,将确保您也可以:

  • 定期扫描您的图片 。
  • 使用可信的registry
  • 为容器定义seccompconfiguration文件。 这项技术的改进及其实施是整个docker世界正在进行的一项工作 。
  • 删除容器中的应用程序不需要的function 。
  • 使用 SELinux 。 列出的其他许多安全措施都有其局限性,但SELinux在其他一切失败时都能很好地提供安全的networking。 一些例子:它将有助于限制对docker套接字的访问 ,它将控制是否允许在容器之间共享文件描述符 ,它可以为每个容器/容器组分配不同的MCS级别 ,以隔离它们与主机和其他容器。