Linux

不同客戶端上的 GlusterFS 權限

  • August 31, 2016

我在使用 GlusterFS 替換現有的非 HA NFS 設置以在機器之間共享數據時遇到問題。先說一下配置:

概念驗證 glusterfs 是具有 2 台機器和一個複製卷的設置。然後有 2 個客戶端導入此卷。一個客戶端是供客戶連接和發送文件的 SFTP 伺服器,另一個是執行我們的應用程序的伺服器。

我遇到的問題是關於使用者和權限的。連接到 SFTP 伺服器的使用者將被監禁在特定目錄(chroot)中,並且 SFTP 需要嚴格的權限(該目錄必須由 root 使用者擁有,並且 root 是唯一允許寫入權限的使用者)同時應用程序,作為特定使用者執行,在另一台伺服器上將需要對目錄樹的完全訪問權限。

我要替換的設置使用 NFS,並且導出在兩個客戶端上安裝了不同的所有權/權限(在安裝時使用 uid 和 gid 選項);這樣兩台伺服器上的使用者就擁有了他們需要的權限。

GlusterFS,另一方面,AFAIK,不允許在每台機器上安裝具有特定所有權的捲。我知道 GlusterFS 符合 POSIX,我可以使用標準權限系統和 ACL

我已經考慮和/或測試了幾個選項,但沒有一個讓我滿意。

  • 使用 ACL:當給應用伺服器的使用者添加讀/寫權限時,它會認為該權限是一個“組”權限,SFTP 會報錯。
  • 在機器上創建一個普通使用者:不是很靈活,依賴系統管理員來維護普通使用者,當轉移到生產環境時,情況會變得複雜,因為需要更多的系統進行互動。
  • 掛載到不同的地方並綁定到正確的目錄。但是後來我發現我無法更改所有權…
  • 使用 NFS/Ganesha 或 SAMBA。這太過分了,我可以安裝 glusterfs 客戶端,我不想使用必須配置和維護的其他層。

卷本身及其所有內容歸使用者 root 和組 root 所有。

你們有更好的主意嗎?或者知道 GlusterFS 的一個功能可以讓我進行更簡單的設置?

提前致謝。

我想我找到了一個可以接受的解決方案。我忘記了 SFTP 守護程序的行為。確實,SFTP 需要 jail 目錄由使用者 root 擁有,並且只有 root 才有寫權限。但是子目錄可以有任何權限。

我沒有將 ACL 配置到 gluster 卷的根目錄,而是僅針對 jail 目錄的內容更改 ACL,以這種方式:

客戶端 1 - 應用伺服器

root@appsrv$ cd /path/to/gluster/volume
root@appsrv$ chown -R root:root *
root@appsrv$ chmod -R 2750 *
root@appsrv$ ls -la
total 6
drwxr-x--- 14 root    root      ./
drwxr-xr-x  4 appuser appgroup  ../
drwxr-xr-x  3 root    root      .trashcan/
drwxr-s---  5 root    root      User1/
drwxr-s---  5 root    root      User2/
drwxr-s---  5 root    root      User3/

root@appsrv$ setfacl -Rm u:appuser:rwx */*
root@appsrv$ setfacl -Rm g:appgroup:rx */*
root@appsrv$ setfacl -Rdm u:appuser:rwx */*
root@appsrv$ setfacl -Rdm g:appgroup:rx */*

root@appsrv$ ls -la
total 6
drwxr-x---  14 root    root      ./
drwxr-xr-x   4 appuser appgroup  ../
drwxr-xr-x   3 root    root      .trashcan/
drwxr-s---+  5 root    root      User1/
drwxr-s---+  5 root    root      User2/
drwxr-s---+  5 root    root      User3/

客戶端 2 - SFTP 伺服器

root@sftpsrv$ cd /path/to/gluster/volume
root@sftpsrv$ setfacl -Rm g:sftpgroup:rx *
root@sftpsrv$ setfacl -Rm g:sftpgroup:rwx */input
root@sftpsrv$ setfacl -Rdm g:sftpgroup:rx *
root@sftpsrv$ setfacl -dRm g:sftpgroup:rwx */input

root@sftpsrv$ ls -la
total 6
drwxr-x---  14 root root ./
drwxr-xr-x   4 root root ../
drwxr-xr-x   3 root root .trashcan/
drwxr-x---+  5 root root User1/
drwxr-x---+  5 root root User2/
drwxr-x---+  5 root root User3/

現在 SFTP 可以正常工作並且不會抱怨權限,並且應用程序伺服器在需要的地方具有完全訪問權限

引用自:https://serverfault.com/questions/800226