如何解析命名空间之间的用户命名空间映射?

如何解析命名空间之间的用户命名空间映射?

假设我在 2 个不同的命名空间中生成 2 个进程,如这篇 LWN 文章

  • 第一个将 ns 内的 UID 0 映射到 ns 外的 UID 1000。
  • 第二个将 ns 内的 UID 200 映射到 ns 外的 UID 1000。

我想出了这个图来形象化它:

在此输入图像描述

问题一:这个数字准确吗?

问题#2:为什么当我ps在“用户命名空间 2”中运行的 bash 进程中发出命令时,我看到“用户命名空间 1”的 bash 进程以 UID 200 运行?我对如何运作有一些想法,但我只是找不到任何地方写的,我想知道该决议的确切步骤。

答案1

我不完全确定你在图1中说明的内容,所以我不知道它是否准确。不过,我可以解释一下问题 2——希望这也能回答问题 1。

“映射”意味着存在一对一的关系。当您将外部(在根命名空间中)1000 映射到命名空间 1 内部的 0 时,这是双向的:内部 0 就是外部 1000。命名空间 2 也是如此,其中外部(根)1000 是内部 200(内部 200 是外部 1000)。

因此,如果您在命名空间 1 中启动一个 uid=0 进程,则外部(在根命名空间中)的 uid 为 1000。当您从命名空间 2 内部查看时,请记住,外部 1000 是内部 200。所以是200。

您可能会在以下位置找到该信息用户命名空间联机帮助页,特别是用户和组映射部分有用。

相关内容