我正在尝试使用Linux命名空间创build一个沙盒环境。 我已经在https://github.com/swetland/mkboxfind了一个简洁的例子,大概是我想要的,但我想要一个可信的/ proc出现在沙箱里面。 我怎样才能做到这一点?
我尝试绑定安装proc FS“proc”,但失败与EINVAL。 当我试图正常安装“proc”时,它会产生EPERM。
想法?
一位当地的大师为我指出了这个问题:proc必须使用MS_REC(无证书的)MS_REC标志,如下所示:
ok(mount, "/proc", "proc", NULL, MS_REC|MS_BIND, NULL);
如果没有设置CLONE_PIDNS,绑定挂载只会做一些有用的事。
我并没有仔细查看你的承诺,以确定这是否是你的问题,但是如果你有CLONE_NEWUSER | CLONE_NEWNS
CLONE_NEWUSER | CLONE_NEWNS
但不是CLONE_NEWPID
。 这是因为要安装proc
,需要在当前PID名称空间对应的用户名空间中使用CAP_SYS_ADMIN
,而不是当前用户名空间。
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);