首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头集装箱-如何保护非根用户?

码头集装箱-如何保护非根用户?
EN

Stack Overflow用户
提问于 2022-05-01 17:28:55
回答 2查看 630关注 0票数 0

有许多站点鼓吹我们不应该以根用户的身份运行docker容器。

例如

默认情况下,Docker对容器中的进程授予根权限,这意味着它们对容器和主机环境具有完全的管理访问权限。

我不理解容器如何访问主机环境&如果我不执行卷/端口映射,就会造成安全漏洞。

有人能给出这样的安全风险的例子吗?

EN

回答 2

Stack Overflow用户

发布于 2022-05-01 17:57:41

默认情况下,docker试图在容器和主机之间执行非常强的隔离。如果您需要有一个根用户(您无法避免),那么docker提供了一个安全机制,它将根用户从容器映射到主机上的一个随机的虚拟高UUID,如果有人设法逃跑,这就什么都不是了。

将根用户留在容器内可以留下“攻击者”选项来安装他们想要的附加包,他们会看到容器可以访问的其他容器/资源(例如,他们可以尝试在容器周围安装NMAP ),。嗯..。它们毕竟是容器中的根。

安全风险的例子。有一个“大的”叫做脏牛

希望我把你推向了进一步研究的正确方向。

票数 1
EN

Stack Overflow用户

发布于 2022-05-03 13:10:52

docker和其他容器化技术建立在Linux内核的命名空间特性的基础上,限制和隔离进程,限制它们对文件系统、对其他进程或网络的访问等可用资源的看法。

默认情况下,docker使用非常强的进程隔离,将其访问限制在最低限度。这使许多人相信,在容器中运行任何不受信任的进程/docker映像都是完全安全的--,而不是

因为尽管这些进程具有很强的隔离性,但它们仍然直接在主机系统的内核上运行。当它们作为根用户在容器中运行时(而不使用用户命名空间 ),它们实际上也是主机上的根用户。唯一防止恶意容器完全超过主机系统的是,它没有直接/直接的访问关键资源的权限。但是,如果它以某种方式控制了名称空间之外的资源的句柄,那么它可能被用来打破隔离。

对于不知情的用户来说,很容易无意中向容器提供外部资源的句柄。例如:

代码语言:javascript
复制
# DON'T DO THIS
# the user intends to share the mapping of user names to ids with the container
docker run -v /etc/passwd:/etc/passwd untrusted/image

当容器中的进程以根用户的身份运行时,容器不仅能够读取/etc/passwd中的所有用户,而且还可以编辑该文件,因为它在主机上也具有根访问权限。在这种情况下-如果你真的需要这样的东西-最好的做法是绑定挂载/etc/passwd只读。

另一个例子:一些应用程序需要扩展对系统功能的访问,这需要放松默认情况下应用的一些严格隔离docker,例如:

代码语言:javascript
复制
# DON'T DO THIS
docker run --privileged --cap-add=CAP_ALL untrusted/image

这将消除大多数限制,尤其是允许容器加载新的内核模块,即向内核中注入和执行任意代码,这显然是不好的。

但是,除了错误地提供外部资源访问之外,Linux内核中也可能存在错误,可以利用这些漏洞来逃避容器的隔离--当进程已经在容器中拥有根权限时,这些漏洞更容易使用。

因此,docker的最佳做法是尽可能限制容器的访问:

  • 删除/不添加任何不需要的功能/特权
  • 绑定-只挂载真正需要的文件/目录
  • 可能时使用非根用户。

虽然在docker中以根用户身份启动容器是默认的,但大多数应用程序实际上并不需要以根用户身份启动。那么,在不需要根特权的情况下,为什么要授予它们呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72078975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档