到目前为止,我已经看到了大量关于 Docker 如何没有足够隔离以允许任意容器在多租户环境中运行的文章,这是有道理的。 “如果它是 Docker 中的根,则将其视为主机中的根。”那么非 root 又如何呢?
如果我想获取一些不受信任的代码并在容器中运行它,只要容器以非 root 非 sudo 用户身份运行,就可以安全地完成吗?这样做有哪些潜在的安全隐患?
我相当确定现在有生产应用程序在这样做(CI 系统、可运行的 Pastebin),但它们只是幸运没有遇到坚定的攻击者,还是在生产系统中这样做是合理的事情?
从 Docker v1.12 开始,如果以启用了用户命名空间的非 root 用户身份运行容器,则恶意攻击者需要执行两级权限提升才能成为主机上的 root:
- 在容器内从非 root 用户升级为 root 用户
- 将容器中的 root 用户升级为主机上的 root 用户
因此,如果不受信任的代码以非 root 用户身份在 Docker 容器内运行,攻击者成为主机上的 root 会稍微困难一些,因为我们添加了在容器内成为 root 的额外步骤。与以 root 权限运行容器相比,这是安全性方面的唯一优势。
如果通过两个安全层进行权限升级,以下措施应有助于限制攻击面:
- 具有不同信任级别的工作负载(在这种情况下更具体地说是 docker 容器)应通过使用遵循最小权限原则的覆盖网络来相互隔离。
- 在强制模式下启用可用的 Linux 安全模块(例如 SELinux、AppArmor)
参考:
- 在容器内以非 root 权限运行:https://groups.google.com/forum/#!msg/docker-user/e9RkC4y-21E/JOZF8H-PfYsJ
- 覆盖网络:https://docs.docker.com/engine/userguide/networking/get-started-overlay/
- 用户命名空间:https://docs.docker.com/engine/security/security/#/other-kernel-security-features
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)