如何在不成为 root 用户的情况下在我的流程空间内"mount"?

How can I "mount" within my process space without being root?

本文关键字:程空间 空间 mount 我的 root 情况下 用户      更新时间:2023-10-16

我正在尝试安装 Overlayfs ,而我的C 代码中却不是 root ;我希望能够实现此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安装座也不会失败。我在内核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,以更好地执行。最好的例子可以在人类页面上找到。