5

我正在尝试使用 Linux 命名空间创建一个沙盒环境。我在https://github.com/swetland/mkbox找到了一个简洁的示例,大致可以满足我的要求,但我希望在沙箱中出现一个可信的 /proc。我怎样才能做到这一点?

我尝试将proc FS绑定安装在“proc”上,但是EINVAL失败了。当我尝试正常挂载“proc”时,它会产生 EPERM。

想法?

4

2 回答 2

6

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

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

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

于 2014-05-02T19:11:14.630 回答
0

我没有仔细查看您的提交,无法确定这是否是您的问题,但EPERM如果您有CLONE_NEWUSER | CLONE_NEWNS但没有,就会发生CLONE_NEWPID。这是因为要挂载proc,需要CAP_SYS_ADMIN在当前 PID 命名空间对应的用户命名空间中,而不是当前用户命名空间。

Linux 4.4,fs/proc/root.c112-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);
于 2016-02-09T18:06:43.257 回答