是否有 Linux vfs 工具允许在用户空间的不同位置(如 mount --bind)绑定目录?

是否有 Linux vfs 工具允许在用户空间的不同位置(如 mount --bind)绑定目录?

对于用户进程,我想在其他位置安装一个目录,但在没有 root 权限的用户空间中。类似 mount --bind /origin /dest 的东西,但带有 vfs 包装器。就像用户模式微调的 chroot。

该程序会将系统调用包装到文件中以“替换”所需的路径。可以使用如下命令行调用它:

bindvfs /fake-home:/home ls /home

我确信这已经存在了! :)

答案1

您可以使用普罗特与您的示例几乎相同的方式:

proot -b /fake-home:/home ls /home

与 BindFS/FUSE 不同,PRoot 能够绑定不属于您的文件和目录。

答案2

鹦鹉程序可以执行您所要求的操作:拦截系统调用并重定向某些路径(例如,所有以 开头的路径/anonftp都被重新映射以通过 FTP 透明地访问远程文件)。它也完全在用户空间中运行。

然而,尽管有一系列令人印象深刻的常见和不常见的网络协议,但parrot没有任何模块可以像您要​​求的那样进行简单的文件系统->文件系统重写。如果您了解一些 C 语言编程,那么添加起来应该非常简单。

或者,绑定文件系统(它运行在保险丝),就像 mount --bind用户空间中的 a 一样工作。 (但这与您在问题中提到的/home重定向相反。)/fake-home

答案3

VFS 已经允许非 root 挂载文件系统。您可以将userusers选项添加到 fstab 条目并确保vfs.usermount=1位于/etc/sysctl.

然而,这些都不会为您提供类似 chroot 的控件。该bind选项不会更改权限或允许“备用”访问,这是相同文件系统和内容的第二个 mtab 条目。绑定安装中的修改会影响原始安装。

在进一步行动之前,我会确保你澄清你的最终目标。

答案4

mount_namespaces将允许你不mount --bind被其他进程看到。但通常mount --bind仅限于 root 用户(出于安全原因)。因此,为了使 mount_namespaces 对非 root 用户有用,您应该首先使用用户命名空间成为新名称空间中的“本地根”,然后将允许此操作。

您可以在 shell 中像这样使用它 - 这个示例具体显示了在准备 chroot 目录时使用用户和挂载空间(并且该chroot操作通常也是特权的):

unshare --user --map-root-user --mount-proc --pid --fork
mkdir -p newroot/dev
mount --rbind /dev newroot/dev
....other chroot preparation....
chroot newroot
su - user1

请注意,我正在使用mount --rbind(而不是),因为如果目录包含其他安装点(在我的情况下确实如此),mount --bind则只有这才适用于新的 user&mount 命名空间。/dev/

也许对此的解释是用户不应该有办法看到通常非特权用户看不到的东西,即被“子安装”隐藏的子目录。请勿剥离底座,仅--rbind允许。

相关内容