
我正在嘗試使用 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.conf
formatting
user_allow_other
- 使用allow_other
掛載選項作為 root 可以正常工作,以便讓它也可以作為您需要的使用者user_allow_other
工作。/etc/fuse.conf
(此選項允許使用者使用該選項。)如果您希望所有者以外的使用者存取已安裝的保險絲,則allow_other
需要。allow_other
該選項必須單獨出現在一行上。沒有任何價值,只有選項的存在。
您在調用時allow_other
作為選項參數(的一部分)傳遞給.在你的情況下,它將是這樣的:-o
unionfs
unionfs -o cow,allow_other …
請注意,如果檔案系統在特定的常規使用者下運行,那麼它將只能(對底層儲存)執行該使用者可以執行的操作。例如,如果您運行unionfs
並允許使用檔案系統,那麼建立的任何檔案仍然屬於該manager
檔案系統。其他限制可能會顯現出來。allow_other
www-data
www-data
manager
在下運行檔案系統root
會有所幫助,但請參閱已經連結的答案。root
不建議在下面跑步。
一般來說,FUSE 被設計為一種通用方式,供沒有 root 存取權的使用者掛載和使用檔案系統他們自己,而不打擾實際管理員。要與其他使用者一起使用檔案系統,正確的方法是獲得核心和管理員的支援mount
。
AFAIK 可以將 UnionFS 作為核心模組(而不是 FUSE),但它不在主線核心中,您需要自己建置它。如果我理解正確的話,在核心中實現的 UnionFS 的行為應該像你期望的那樣。
在我的 Kubuntu 中,我可以使用 OverlayFS(這是其中之一)備擇方案)已經作為內核模組(不是 FUSE)存在。