对于用户进程,我想在其他位置安装一个目录,但在没有 root 权限的用户空间中。类似 mount --bind /origin /dest 的东西,但带有 vfs 包装器。就像用户模式微调的 chroot。
该程序会将系统调用包装到文件中以“替换”所需的路径。可以使用如下命令行调用它:
bindvfs /fake-home:/home ls /home
我确信这已经存在了! :)
答案1
答案2
答案3
VFS 已经允许非 root 挂载文件系统。您可以将user
或users
选项添加到 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
允许。