在非特权命名空间沙箱中挂载proc

时间:2014-05-01 22:12:04

标签: linux sandbox linux-namespaces

我尝试使用Linux命名空间创建沙盒环境。我在https://github.com/swetland/mkbox找到了一个简洁的例子,它大致做了我想要的,但我希望在沙盒中出现一个可靠的/ proc。我怎么能这样做?

我尝试将proc FS挂载到" proc",但是在EINVAL中失败了。当我尝试安装" proc"通常,它会产生EPERM。

想法?

2 个答案:

答案 0 :(得分:6)

一位本地大师为我解决了这个问题:proc必须使用(未记录的?)MS_REC标志,如下所示:

    ok(mount, "/proc", "proc", NULL, MS_REC|MS_BIND, NULL);

如果没有设置CLONE_PIDNS,绑定挂载只会做一些有用的事情。显然。

答案 1 :(得分:0)

我没有仔细查看您的承诺,以确定这是否是您的问题,但如果您有EPERMCLONE_NEWUSER | CLONE_NEWNS,则会CLONE_NEWPID。这是因为为了挂载proc,您需要在与当前PID命名空间相对应的用户命名空间中使用CAP_SYS_ADMIN,而不是当前用户命名空间。

Linux 4.4,fs/proc/root.clines 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);