到目前为止,我已经看到大量的墨水溢出了Docker如何不被隔离以允许任意容器在多租户环境中运行,这是有道理的. “如果它是Docker中的root用户,请将其视为主机中的root用户.”那么非root呢?
如果我想获取一些不受信任的代码并在容器中运行它,只要容器作为非root非sudo用户运行,它是否可以安全地完成?做这样的事情有哪些潜在的安全隐患?
我很确定今天有生产应用程序这样做(CI系统,可运行的pastebins),但他们是否幸运没有一个坚定的攻击者或者这在生产系统中是否合理?
解决方法
从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