C-带有Clone_Newns标志的克隆之后的安装文件系统



我正在尝试实现以下方案:

  1. clone()带有CLONE_NEWNS标志的主过程(这是指新的安装命名空间)
  2. mount()儿童过程中的新文件系统
  3. 在此过程文件系统中完成的儿童进程均已完成

,但它不如我预期的那样起作用,我仍然在主要过程中看到已安装的文件系统。我在做什么错?

来源在这里https://github.com/dmitrievanthony/sprat/blob/master/src/container.ctainer.c#l47

系统是默认的AWS Ubuntu,

ubuntu@ip-172-31-31-112:~/sprat$ uname -a
Linux ip-172-31-31-112 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

简短答案:看起来像安装传播的类型未正确设置。<<<<<<<<<<<<<</p>


说明

linux内核默认将所有安装座安装到MS_PRIVATE,但是为了方便NSPAWN,SystemD在提前启动到MS_SHARED期间将其覆盖。可以通过查看/proc/$PID/mountinfo可选字段来观察。例如,可能会期望这样的事情:

$ cat /proc/self/mountinfo
  . . .
25 0 8:6 / / rw,relatime shared:1 - ext4 /dev/sda6 rw,errors=remount-ro,data=ordered
                         ^^^^^^
  . . .

请注意上面带下划线的shared:1字段,表明/安装点的当前传播类型是MS_SHARED,并且 peer group id是1(我们不关心Peer Groupid在我们的情况下)。

clone(2)上使用CLONE_NEWNS标志时,创建了一个新的安装命名空间,该名称空间被初始化为呼叫者的安装命名空间的副本。新名称空间的新的,复制的安装点与他们在呼叫者的安装命名空间中的原始安装点相同。

新安装点的传播类型的传播类型的传播类型为 MS_SHARED,也是 MS_SHARED。因此,当您的"包含"进程mount() S上的文件系统上的文件系统时,默认情况下为MS_SHARED。稍后,它下面的所有安装座也被传播到" Main"进程的名称空间,这就是" Main"过程可以看到它们的原因。

为了满足您的请求(对于"主要"过程,不看到"包含"进程的安装点),您所寻求的安装传播类型是MS_SLAVEMS_PRIVATE,具体取决于您是否想要"包含"过程的root安装点分别从其他同龄人那里接收传播事件。显然,MS_PRIVATEMS_SLAVE提供更大的隔离。

因此,在您的情况下,将"包含"过程的root安装点的传播类型更改为 MS_PRIVATEMS_SLAVE >您安装其余的文件系统,所以安装座赢了将传播到" Main"进程的名称空间。


代码

首先,当"包含"过程创建其root安装点时,将尝试正确设置传播类型。

但是,我注意到man 8 mount中的以下内容(引用):

请注意,Linux内核不允许更改多个 带有单个安装座(2)系统调用的传播标志和标志 不能与其他安装选项混合。

由于Util-Linux 2.23 Mount命令允许使用多个 一起传播标志,并与其他安装座一起 操作。此功能是实验性的。传播标志是 由额外安装(2)系统呼叫应用于上的安装座 操作成功。

查看您的代码,即"包含"过程,在 mount() s循环设备上的文件系统后,它向其发出 chroot()。此时,您可以通过注入此mount(2)调用来设置其传播类型:

if (chroot(".") < 0) {
    // handle error
}
if (mount("/", "/", c->fstype, MS_PRIVATE, "") < 0) {
    // handle error
}
if (mkdir(...)) {
    // handle error
}

既然传播类型已设置为 MS_PRIVATE,那么在 /下,"包含"过程的所有后续安装都不会传播,因此在" main"过程的命名空间中不会可见,因为您可以在/proc/mounts中观察到。或/proc/$PID/mountinfo


资源

  • Linux内核的共享子树文档,以获取有关安装传播的更多信息。

  • 迈克尔·克里斯克(Michael Kerrisk)的出色LWN文章比我更好地解释了坐骑名称空间。

相关内容

  • 没有找到相关文章

最新更新