向没有 root 访问权限的 Linux 进程提供虚拟文件系统

tom*_*yvn 7 linux filesystems fuse ld ld-preload

我正在寻找一种向特定 Linux 进程提供用户空间文件系统的方法,但我没有 root 访问权限。

显而易见的答案是 FUSE,但如果没有 root 访问权限,我无法加载内核模块,因此 FUSE 似乎是不可能的(除非有办法 LD_PRELOAD 它?)。

下一个最好的事情似乎是 LD_PRELOAD ,它可以拦截相关的 FS 调用,然后转换它们,就像 FUSE 在 VFS 层所做的那样。

所以我的问题是:

  1. 是否存在像 FUSE 这样支持 LD_PRELOAD 的文件系统?
  2. 如果我 LD_PRELOAD 某个进程的某些 FS 调用拦截是否存在任何陷阱,例如 FS 拦截可能不被分叉或子进程继承?

小智 -3

AFAIK LD_PRELOAD 只能帮助您添加一些额外的库(.so),这些库尚未存在于系统的默认路径中(与文件系统无关)。

考虑到Linux中的正常控制流,所有这些系统调用(与文件系统相关)都将在内核空间中结束,并最终到达指定的文件系统内核模块。FUSE 将其路由回用户空间。我认为你不能在不干扰内核级代码的情况下拦截 VFS。

根据您的要求,您可能需要 libc 的包装器,它将这些文件视为特殊情况并绕过系统调用