如何掛載FUSE(例如unionfs)以便所有使用者都可以存取它?

如何掛載FUSE(例如unionfs)以便所有使用者都可以存取它?

我正在嘗試使用 unionfs 為我們的開發伺服器創建一些開發工具的多個(100+)實例。這是我正在使用的腳本:

PROJECT=$1
DEPLOYMENT=$2
TOOL=$3

DIR_TOOL="/var/www/tools/${TOOL}"
DIR_CONFIG="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/config"
DIR_TMP="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/tmp"
DIR_MERGED="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/merged"

mkdir -p "${DIR_CONFIG}"
mkdir -p "${DIR_TMP}"
mkdir -p "${DIR_MERGED}"

unionfs -o cow "${DIR_TMP}"=RW:"${DIR_CONFIG}"=RO:"${DIR_TOOL}"=RO "${DIR_MERGED}"

然後像這樣使用它:

create-tool-overlay.sh "project-1" "staging" "phpmyadmin"

一切正常,但僅限於我們的manager用戶。如果我嘗試像任何其他用戶一樣訪問該資料夾,包括www-data(需要此訪問權限的人)和root(應該有權訪問所有內容的人),我會得到permission denied.如果我嘗試ls在這個資料夾上運行,我會得到這個奇怪的輸出:

root@app-1:/var/www/tools-instances/project-1/staging/phpmyadmin# ls -al
ls: cannot access 'merged': Permission denied
total 32
drwxrwxr-x+ 5 manager manager 4096 Dec 16 15:51 .
drwxrwxr-x+ 3 manager manager 4096 Dec 14 15:29 ..
drwxrwxr-x+ 2 manager manager 4096 Dec 14 15:29 config
d?????????? ? ?       ?          ?            ? merged
drwxrwxr-x+ 2 manager manager 4096 Dec 16 15:51 tmp

答案1

您使用的可執行檔unionfs建立了一個檔案系統在使用者空間(保險絲)。管理檔案系統的進程在特定使用者下運行(在您的情況下manager:),其他使用者無權存取。向其他使用者授予存取權限的安全性較低。閱讀安全問題

您可以降低安全性。看man 8 fuse。該選項allow_root將允許 root 使用檔案系統。該選項allow_other將允許任何人使用該檔案系統。這些選項是相互排斥的,看來您想要後者。請注意,您需要放置user_allow_other才能作為普通用戶/etc/fuse.conf使用。這是我的 Kubuntu [我的]中allow_other預設的相關評論:fuse.confformatting

user_allow_other- 使用allow_other掛載選項作為 root 可以正常工作,以便讓它也可以作為您需要的使用者user_allow_other工作。 /etc/fuse.conf(此選項允許使用者使用該選項。)如果您希望所有者以外的使用者存取已安裝的保險絲,則allow_other需要。allow_other該選項必須單獨出現在一行上。沒有任何價值,只有選項的存在。

您在調用時allow_other作為選項參數(的一部分)傳遞給.在你的情況下,它將是這樣的:-ounionfs

unionfs -o cow,allow_other …

請注意,如果檔案系統在特定的常規使用者下運行,那麼它將只能(對底層儲存)執行該使用者可以執行的操作。例如,如果您運行unionfs並允許使用檔案系統,那麼建立的任何檔案仍然屬於該manager檔案系統。其他限制可能會顯現出來。allow_otherwww-datawww-datamanager

在下運行檔案系統root會有所幫助,但請參閱已經連結的答案root不建議在下面跑步。

一般來說,FUSE 被設計為一種通用方式,供沒有 root 存取權的使用者掛載和使用檔案系統他們自己,而不打擾實際管理員。要與其他使用者一起使用檔案系統,正確的方法是獲得核心和管理員的支援mount

AFAIK 可以將 UnionFS 作為核心模組(而不是 FUSE),但它不在主線核心中,您需要自己建置它。如果我理解正確的話,在核心中實現的 UnionFS 的行為應該像你期望的那樣。

在我的 Kubuntu 中,我可以使用 OverlayFS(這是其中之一)備擇方案)已經作為內核模組(不是 FUSE)存在。

相關內容