security - 像隔离实例一样安全地在同一主机上使用多个 Docker 容器

标签 security docker docker-container

我知道,多个Docker容器可以在同一主机中使用,但是它们可以像隔离实例一样安全地使用吗?我想运行多个安全的沙盒容器,这样任何容器都不能影响或访问其他容器。

例如,我可以为监听不同端口的 nginx 和 apache 容器提供服务,并完全信任每个容器只能访问自己的文件、资源等吗?

最佳答案

从某种意义上说,您正在问有关容器的值(value)数百万美元的问题,并且需要明确的是,恕我直言,对于“平台/技术是否足够安全”这个问题没有黑白分明的答案。这是一个足够大(而且重要)的问题,围绕容器安全的初创公司名单(更不用说他们收到的资金数额)是一个可观的数字!

正如另一个答案中所述,容器的隔离是通过各种 Linux 内核功能(命名空间和 cgroup)实现的,而为这些功能添加更多安全性是另一技术,例如 seccomp、 apparmor(或 SELinux)、用户命名空间或容器运行时及其安装节点的一般强化(例如通过 CIS benchmark guidelines )。开箱即用的默认安装和默认运行时参数对于一般信任 Linux 的内核隔离原语来说可能不够。但是,这在很大程度上取决于您在容器工作负载中运行的内容信任级别。例如,这一切都是在一个组织内部进行的吗?可以从外部来源提交工作负载吗?显然,各种可能性可能会极大地影响您的信任程度。

如果您的用例可能比较狭窄(例如,您提到来自 nginx 或 apache 的 Web 服务内容),并且您愿意做一些工作来处理基础镜像的创建、最小化和强化;添加一个 --readonly 根文件系统和一个限制 apparmor 和 seccomp 配置文件的能力,在提供的内容 + 可写区域中绑定(bind)挂载,没有可执行文件并且由非特权用户拥有 - 所有这些都在一起对于特定用例来说可能足够

但是,不能保证当前未知的安全逃逸将来会成为 Linux 容器的“0day”,这导致了将容器隔离与实际硬件结合起来的轻量级虚拟化的推广通过 hyper.sh 中的垫片进行级虚拟化或Intel Clear Containers ,举两个例子。这是使用另一个容器运行时运行完全虚拟化操作系统和使用单个节点上的单个守护进程信任内核隔离之间的折衷方案。添加这一层隔离仍然会产生性能成本和内存开销,但它比完全虚拟化的操作系统要少得多,并且我们将继续努力减少对性能的影响。

有关可用于调整容器安全性的所有“旋钮”的更深入信息,我去年多次做过的演示可以在 slideshare 上找到。以及via video来自技能问题。

Aaron Grattafiori 撰写的极其详尽的“Understanding and Hardening Linux Containers”也是一个很好的资源,其中包含许多相同主题的详尽细节。

关于security - 像隔离实例一样安全地在同一主机上使用多个 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47048298/

相关文章:

php - Android PHP 网络服务安全

node.js - NPM 漏洞对构建过程的重要性

Gitlab CI 不适用于 Gitlab Registry 中的私有(private)图像

ios - 您可以更新 iPhone 上我自己的应用程序文件夹中数据文件的文件访问权限吗

docker - 在 Docker (dind) 中的 Docker 中预拉图像

docker - pdf2htmlEX无法打开或读取文件

linux - Systemctl 命令出现此错误 : Failed to et D-bus: Unkknown error -1 | Docker Opensuse

Docker启用了用户名空间,容器开始失败

shell - 如何从 Docker 容器内禁用和启用互联网连接?

security - 注销后如何使用不同的目标路径?