C 如何允许子进程创建嵌套的用户命名空间?

C 如何允许子进程创建嵌套的用户命名空间?,c,linux,kernel,C,Linux,Kernel,我使用以下代码在新用户命名空间中创建子进程: pid_t child = syscall (SYS_clone, SIGCHLD | CLONE_NEWNS | CLONE_NEWUSER, NULL, NULL, NULL); 在父进程中,我编写uid\u映射和gid\u映射,并将当前uid和pid映射到自身 在子进程中,我将调用execvp来启动一个新进程,该进程可以使用CLONE\u NEWUSER标志调用unshare,新用户名称空间中不允许该操作 我的问题是,是否允许对由execvp

我使用以下代码在新用户命名空间中创建子进程:

pid_t child = syscall (SYS_clone, SIGCHLD | CLONE_NEWNS | CLONE_NEWUSER, NULL, NULL, NULL);
在父进程中,我编写
uid\u映射
gid\u映射
,并将当前uid和pid映射到自身

在子进程中,我将调用
execvp
来启动一个新进程,该进程可以使用
CLONE\u NEWUSER
标志调用
unshare
,新用户名称空间中不允许该操作

我的问题是,是否允许对由
execvp
启动的进程执行
unshare
操作


我遵循了
user\u namespace
手册页中的示例,并使用
pipe
确保在调用
execvp
之前编写
uid\u映射和
gid\u映射。从
man 2 unshare
中,您似乎遇到了以下问题:

       EPERM  CLONE_NEWUSER was specified in flags, but either  the  effective
              user  ID or the effective group ID of the caller does not have a
              mapping in the parent namespace (see user_namespaces(7)).