如何在不成为 root 用户的情况下在我的流程空间内"mount"?
How can I "mount" within my process space without being root?
我正在尝试安装 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
,以更好地执行。最好的例子可以在人类页面上找到。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- 无法解析命名空间成员"线程"
- 位置实用程序例程与使用类型相同的命名空间
- Metal - 线程本地的命名空间变量?
- 主线程中块作用域static与命名空间作用域thread_local的初始化和销毁顺序
- Apache 崩溃并显示错误 R6016 没有足够的空间来存储线程数据
- 线程的单独堆栈空间的重要性
- 多线程时,您该怎么做才能停止堆栈空间
- 如何使用 vc++ 找出当前线程堆栈上还剩下多少空间
- 命名空间中的全局变量 - 线程中的值不同
- std::线程在用户或内核空间中进行管理
- 在C++命名空间中,当在头中声明的非成员子例程前面加前缀时,“static”限定符是否有任何作用
- 在窗口中移动或指定线程堆栈空间
- 多线程搜索的解决方案空间很大
- ToUnicode是否调用ToUnicodeEx?ToUnicodeEx在内核空间线程上更改了什么
- 用户空间线程库