如何在没有root的情况下挂载本地目录

如何在没有root的情况下挂载本地目录

假设我有一个用户完全可以读取的文件夹。我希望将其安装到我的主文件夹中。我无法使用符号链接,因为我希望文件公开,~/并且我希望其他程序“不知道”它是一个挂载。有没有一个fuse程序可以实现这个功能?问题mount是它需要 root 权限。

我也很感激,如果我能够挂载这个目录,不是在启动时,而是在需要时挂载 - 这是因为~/除非我登录,否则我的目录是加密的。

答案1

各种 FUSE 实用程序都可以做到这一点。例如,绑定文件系统可以将目录安装到不同的位置,类似于mount --bind所做的事情。

bindfs --no-allow-other /source/directory /mount/point

除非您取消注释,--no-allow-other否则需要该选项(但请参阅下面有关 libfuse 的注释以了解安全含义)。user_allow_other/etc/fuse.conf

卸载:

fusermount -u /mount/point

请注意,FUSE 文件系统当前存在已知问题/限制。值得一提的是,性能成本、使用的不可能性inotify监视源文件系统上发生的文件系统事件以及中列出的安全隐患libfuse GitHub 存储库的自述文件。

在 Linux 上,一个绑定挂载执行mount --bind不会有这些缺点。但它至少需要 root 权限一次才能编辑您的fstab.
请参阅链接的 Q/A 了解很多更详细地涵盖该主题。

答案2

您可以使用以下条目设置 /etc/fstab 一次:

/path/to/original/dir  /path/to/bind/dir  none  bind,rw,user,noauto  0 0 

挂载选项按顺序指定以下内容:

  • bind表明该条目是绑定挂载。
  • rw指定该条目将以读写模式挂载。
  • user允许任何非 root 用户挂载文件系统。
  • noauto指定该条目不应mount -a在引导时自动安装 和 。

您需要使用 root 权限进行一次设置。条目就位后,您可以以非 root 用户身份执行安装。只需运行即可mount /path/to/bind/dir

有几点需要注意:

  • 使用该user选项,只有最初安装文件系统的同一用户帐户才能执行卸载。如果涉及多个用户,您可以查看该users选项。man 8 mount详情请参阅。
  • user选项意味着其他三个选项:(noexec不允许执行二进制文件)、nosuid(不遵守 setuid/setgid 位)和nodev(不解释设备)。如果要恢复其中任何功能,请将相应的选项附加到列表末尾。例如,bind,rw,user,noauto,exec。请记住,这些选项存在安全隐患。man 8 mount详情请参阅。

答案3

看这个答案https://unix.stackexchange.com/a/767296/139357它展示了如何使用 unshare 和 nsenter 以非 root 身份进行绑定挂载

该答案将得到改进。

相关内容