Permissions

等效於 NFS all_squash

  • August 21, 2020

我有一個不尋常的要求,我需要在客戶端上多次掛載相同的文件系統,但每次掛載都根據底層目錄和文件的組權限提供底層數據的不同視圖。

我過去使用 NFS 和 all_squash 和 anongid /etc/exports 選項實現了這一點,使特定的掛載看起來好像使用者具有特定的組 ID。它通過強制訪問使用者組有效地過濾了對底層文件系統的訪問。

不幸的是,我不能在這種情況下使用它,因為文件系統將是 Amazon EFS(實際上是 NFS 伺服器,但沒有任何配置選項)。

我已經查看了 bindfs,它提供了一個 force-group 選項,但這與我想要的相反,因為它強制所有文件都有一個特定的組,而不是強制客戶端有一個特定的組,查看文件不變。

我確實看到提到了一種叫做 filterfs 的東西,但它似乎早已死去。

有沒有人知道一種通過有效地臨時更改使用者組(不使用 sudo,因為使用者是網路伺服器守護程序)來為單個使用者獲取文件系統過濾視圖的方法。

感謝@sourcejedi 為我指明了正確的方向。

在最初的 NFS 設置中,all_squash用於使守護程序使用者看起來具有特定的組(由anongid設置)。對於此範例,假設組 ID 為 601。因此,原始文件系統的此視圖可以根據已掛載文件系統的anongid為 601 對文件/目錄強制執行權限。權限看起來像是在 NFS 掛載級別評估的,獨立於daemon 使用者的實際組權限。另一個具有不同all_squash設置的 NFS 掛載到同一文件系統上,有效地顯示了文件的不同視圖,就好像使用者具有不同的組成員身份一樣。

使用bindfs –map可以通過稍微不同的設置來實現相同的結果。範例配置綁定了一個文件系統,使得底層文件系統中組 ID 為 601 的任何文件/目錄在已掛載的文件系統中似乎都具有組 ID 599:

bindfs --map=@601/@599 --create-for-group=601 --create-for-user=600 --create-with-perms='u=rwD:g=rwD:o=' $FS_ROOT $MOUNT_ROOT/view601

現在,當在守護程序中列出文件時$MOUNT_ROOT/view601,使用者會看到任何具有組 601 而不是組 599 的文件。通過賦予組 gid 599 的守護程序成員身份,權限將根據掛載再次有效地強制執行。如果不同的掛載將 gid 602 映射到 599,則相同底層文件系統中的文件將可供同一使用者使用,前提是它們最初將組 602(而不是 601)現在映射到 599,使它們可用於守護程序。

引用自:https://unix.stackexchange.com/questions/464209