我试图挂载overlayfs而不是C++代码的根。我希望能够发生此mount并仅对我自己的进程及其后代可见:

if(-1 == mount("overlay", "./mnt", "overlay", MS_MGC_VAL, "lowerdir=/,upperdir=./upper,workdir=./work"))
    std::cerr << "e: " << errno << std::endl;
    ....

不幸的是,我得到的错误是Operation not permitted
我怎样才能做到这一点?
即使是简单的tmpfs挂载也不能不成为root用户。我在内核4.4.0-53上运行。

最佳答案

一个人可以通过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上找到。

关于c++ - 如何在我的进程空间中没有根而 “mount”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41110784/

10-13 08:10