我尝试使用Linux命名空间创建沙盒环境。我在https://github.com/swetland/mkbox找到了一个简洁的例子,它大致做了我想要的,但我希望在沙盒中出现一个可靠的/ proc。我怎么能这样做?
我尝试将proc FS挂载到" proc",但是在EINVAL中失败了。当我尝试安装" proc"通常,它会产生EPERM。
想法?
答案 0 :(得分:6)
一位本地大师为我解决了这个问题:proc必须使用(未记录的?)MS_REC标志,如下所示:
ok(mount, "/proc", "proc", NULL, MS_REC|MS_BIND, NULL);
如果没有设置CLONE_PIDNS,绑定挂载只会做一些有用的事情。显然。
答案 1 :(得分:0)
我没有仔细查看您的承诺,以确定这是否是您的问题,但如果您有EPERM
但CLONE_NEWUSER | CLONE_NEWNS
,则会CLONE_NEWPID
。这是因为为了挂载proc
,您需要在与当前PID命名空间相对应的用户命名空间中使用CAP_SYS_ADMIN
,而不是当前用户命名空间。
Linux 4.4,fs/proc/root.c
,lines 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);