我怎样才能" mount"在我的进程空间内没有root?

时间:2016-12-12 22:30:21

标签: c++ c linux linux-kernel mount

我尝试在我的C ++代码中挂载 overlayfs 而不是 root ;我希望能够让这个require Logger; Logger.info "hello"发生并且只为我自己的进程及其后代可见:

mount

不幸的是,我得到的错误是if(-1 == mount("overlay", "./mnt", "overlay", MS_MGC_VAL, "lowerdir=/,upperdir=./upper,workdir=./work")) std::cerr << "e: " << errno << std::endl; .... 。 我怎样才能做到这一点? 即使是简单的Operation not permitted挂载也不能 root ;我在内核tmpfs上运行。

1 个答案:

答案 0 :(得分:0)

可以通过user namespaces以编程方式执行;通过调用:

clone(child_func, ..., CLONE_NEWNS | CLONE_NEWUSER | SIGCHLD, ...);
...
int child_func(void* args) {
    mount("overlay", "./mnt", "overlay", MS_MGC_VAL, "lowerdir=/,upperdir=./upper,workdir=./work");
    ...
}

理想情况下,您还需要设置/proc/<pid>/uid_map/proc/<id>/gid_map以便更好地执行。 可能在man pages上找到最好的例子。