我正在尝试输入 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 命名空间是一种单向操作。