Docker最佳安全实践

kon*_*dor 5 linux linux-kernel docker linux-namespaces

您将在Internet上找到的大多数Dockerfile以root身份构建和运行软件!这必须吓唬每个人,对吧?......但似乎并非如此......

所以pb是以root身份运行服务器,即使在容器中也是如此,因为容器内的root与容器外的root完全相同.

其中一个解决方案是使用"USER"指令正确构建Dockerfile,就像本例中的tor中继一样.

另一个解决方案是使用"linux用户命名空间"将容器内的UID/GID"映射"到容器外的UID/GID.例如,容器中的例外根(uid = 0)可以映射到主机内的个人用户帐户,因此在共享卷中创建的文件具有良好的权限.

所以我的问题是:Docker的安全性最佳做法是什么?以非root身份运行代码(即Dockerfile中的USER指令)?或者通过使用"用户名称空间"?或者最终(或者另外)使用selinux和/或AppArmor?

谢谢 :)

Usm*_*ail 3

引用所罗门·海克斯的话

大家好,我是 Docker 的维护者。正如其他人已经指出的那样,这在 1.0 上不起作用。但它可能有。

请记住,目前,我们并不声称 Docker 开箱即用适合包含具有 root 权限的不受信任的程序。因此,如果您在想“pfew,幸好我们升级到了 1.0,否则我们就完蛋了”,那么您现在需要更改您的底层配置。添加 apparmor 或 selinux 遏制、将信任组映射到单独的计算机,或者理想情况下不授予应用程序的 root 访问权限。

因此,如果您认真对待安全性,那么就最佳实践而言,请选择命名空间和 apparmor 或 selinux。话虽这么说,很多人并不愿意去惹麻烦(无论好坏),所以你会看到很多人不会去惹麻烦。为容器内的文件(特别是作为卷安装的文件)设置用户权限有时会变得很棘手,这就是很多人跳过额外开销的方法。