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

Dor*_*har 9 mount fuse non-root-user

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

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

fra*_*san 10

各种 FUSE 实用程序都可以做到这一点。例如,bindfs可以将目录挂载到不同的位置,类似于mount --bind所做的事情。

bindfs --no-allow-other /source/directory /mount/point
Run Code Online (Sandbox Code Playgroud)

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

卸载:

fusermount -u /mount/point
Run Code Online (Sandbox Code Playgroud)

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

在 Linux 上,执行绑定安装mount --bind不会有这些缺点。但它至少需要 root 权限一次才能编辑您的fstab. 有关该主题的更详细介绍,
参阅链接的问答。


Hax*_*iel 3

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

/path/to/original/dir  /path/to/bind/dir  none  bind,rw,user,noauto  0 0 
Run Code Online (Sandbox Code Playgroud)

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

  • 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详情请参阅。