我正在尝试使用 Linux 命名空间创建一个沙盒环境。我在https://github.com/swetland/mkbox找到了一个简洁的示例,大致可以满足我的要求,但我希望在沙箱中出现一个可信的 /proc。我怎样才能做到这一点?
我尝试将proc FS绑定安装在“proc”上,但是EINVAL失败了。当我尝试正常挂载“proc”时,它会产生 EPERM。
想法?
我正在尝试使用 Linux 命名空间创建一个沙盒环境。我在https://github.com/swetland/mkbox找到了一个简洁的示例,大致可以满足我的要求,但我希望在沙箱中出现一个可信的 /proc。我怎样才能做到这一点?
我尝试将proc FS绑定安装在“proc”上,但是EINVAL失败了。当我尝试正常挂载“proc”时,它会产生 EPERM。
想法?
一位当地大师为我解决了这个问题:proc 必须使用(未记录的?)MS_REC 标志,如下所示:
ok(mount, "/proc", "proc", NULL, MS_REC|MS_BIND, NULL);
显然,如果没有设置 CLONE_PIDDNS,绑定挂载只会做一些有用的事情。
我没有仔细查看您的提交,无法确定这是否是您的问题,但EPERM
如果您有CLONE_NEWUSER | CLONE_NEWNS
但没有,就会发生CLONE_NEWPID
。这是因为要挂载proc
,需要CAP_SYS_ADMIN
在当前 PID 命名空间对应的用户命名空间中,而不是当前用户命名空间。
Linux 4.4,fs/proc/root.c
第112-117 行:
ns = task_active_pid_ns(current);
options = data;
/* Does the mounter have privilege over the pid namespace? */
if (!ns_capable(ns->user_ns, CAP_SYS_ADMIN))
return ERR_PTR(-EPERM);