Debian

如何設置 NFS 以尊重使用者和組權限?

  • September 7, 2014

在兩台伺服器lb1 (nfs-client) 和data-server1 (nfs-kernel-server)之間創建 NFS 共享後,具有 NFS 伺服器權限的使用者無法訪問 NFS 客戶端。

數據伺服器 1 配置:

$ cat /etc/exports
/data  10.132.246.167(rw,no_subtree_check)
$ ls -la / | grep data
drwx--x--x  3 u1   users    4.0K Sep  6 03:55 data/
$ ls -la /data
drwxr-xr-x 3 u1       users    4.0K Sep  6 02:31 prod/
drwxrwsr-x 2 www-data www-data 4.0K Sep  6 02:31 keys/
$ awk -F: '$0=$1 " uid="$3 " gid="$4' /etc/passwd | grep 'root\|u1\|ftp\|www-data'
root uid=0 gid=0
www-data uid=33 gid=33
u1 uid=115 gid=100
ftp uid=999 gid=100

磅1配置:

$ mount 10.132.245.223:/data /data
$ mount
10.132.245.223:/data on /data type nfs4 (rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.132.246.167,minorversion=0,local_lock=none,addr=10.132.245.223)
$ sudo -u u1 ls -la / | grep data
drwx--x--x  3 u1   users    4.0K Sep  6 03:55 data/
$ sudo -u u1 ls -la /data
drwxr-xr-x 3 u1       users    4.0K Sep  6 02:31 prod/
drwxrwsr-x 2 www-data www-data 4.0K Sep  6 02:31 keys/    
$ awk -F: '$0=$1 " uid="$3 " gid="$4' /etc/passwd | grep 'root\|u1\|ftp\|www-data'
root uid=0 gid=0
www-data uid=33 gid=33
u1 uid=115 gid=100
ftp uid=999 gid=100    

在 NFS 伺服器(即 data-server1)上,root、u1 和 ftp 使用者對 /data 的子目錄具有適當的 rwx 權限,並且可以毫無問題地訪問文件系統。但是,在 NFS 客戶端(即 lb1)上,permission denied當試圖簡單地列出/dataNFS 共享中的目錄內容時,root 和 ftp 會出錯。另一方面,使用者 u1 工作完美。

這是我第一次使用 NFS

一切看起來都符合預期。由於/datais rwx--x--x,只有所有者 ,u1才能列出它。其他人可以訪問其中的文件和子目錄,但需要對這些文件和子目錄具有權限。

此外,NFS 客戶端上的使用者 ID 0 映射到伺服器上的使用者 ID 65534(在某些系統上為 -2),除非您在導出行中有 no_root_squash(或者,如果執行 NFSv4,則在伺服器上執行顯式使用者 ID 映射)。以下是exports(5) 手冊頁中的一些詳細資訊:

通常,在訪問 NFS 伺服器上的文件時,客戶端電腦上的 root 使用者也被視為 root 是不可取的。為此,uid 0 通常映射到不同的 id:即所謂的匿名或無人 uid。這種操作模式(稱為“root squashing”)是預設的,可以用 no_root_squash 關閉。

預設情況下,exportfs 選擇 65534 的 uid 和 gid 進行壓縮訪問。這些值也可以被 anonuid 和 anongid 選項覆蓋。

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