Mount
如何在沒有root的情況下掛載本地目錄
假設我有一個使用者完全可以讀取的文件夾。我希望它安裝到我的主文件夾。我不能使用符號連結,因為我希望文件被公開,
~/
並且我希望其他程序“不知道”它是一個掛載。是否有實現此功能的保險絲程序?問題mount
是它需要root權限。我也很感激,如果我能夠掛載這個目錄,而不是在啟動時,而是在需要時 - 那是因為
~/
除非我登錄,否則我是加密的。
您可以使用以下條目設置 /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
。
各種 FUSE 實用程序都可以做到這一點。例如,bindfs可以將目錄掛載到不同的位置,類似於
mount --bind
這樣做。bindfs --no-allow-other /source/directory /mount/point
除非您取消註釋,否則該
--no-allow-other
選項是必需user_allow_other
的/etc/fuse.conf
(但請參閱下面關於 libfuse 的說明以了解安全隱患)。解除安裝:
fusermount -u /mount/point
請注意,FUSE 文件系統目前存在已知問題/限制。值得一提的是,性能成本、無法使用inotify監控源文件系統上發生的文件系統事件以及libfuse GitHub 儲存庫的 README 中列出的安全隱患。
在 Linux 上,執行綁定掛載
mount --bind
不會有這些缺點。但它至少需要一次 root 權限才能編輯您的fstab
. 有關該主題的更詳細介紹,請參閱連結的 Q/A 。