假设我有一个用户完全可以读取的文件夹。我希望将其安装到我的主文件夹中。我无法使用符号链接,因为我希望文件公开,~/
并且我希望其他程序“不知道”它是一个挂载。有没有一个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 身份进行绑定挂载
该答案将得到改进。