重新进入 PID 1 命名空间

重新进入 PID 1 命名空间

我正在尝试输入 PID 名称空间,PID 为 1 的进程位于使用CLONE_NEWPID.我不断收到Invalid argument错误。

换句话说,我用clone()CLONE_NEWPID标志克隆了一个子进程。在子进程中,我打开它/proc/1/ns/pid进行读取,并尝试setns()使用上面打开的描述符来执行。setns()失败并显示Invalid argument.

完整程序代码:https://gist.github.com/k-popov/ef87076785d8264ac66f

是否有某种(安全?)机制阻止进入 PID 1 的命名空间或父级的命名空间。我知道有一个用于用户命名空间的机制,但是 PID 1 呢?

答案1

这是一项安全功能,在PID 命名空间手册页

虽然进程可以自由地进入子 PID 命名空间(例如,使用带有 CLONE_NEWPID 的 setns(2)),但它们不能向另一个方向移动。也就是说,进程不能进入任何祖先命名空间(父、祖父母等)。更改 PID 命名空间是一种单向操作。

相关内容