Debian
如何設置 NFS 以尊重使用者和組權限?
在兩台伺服器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
當試圖簡單地列出/data
NFS 共享中的目錄內容時,root 和 ftp 會出錯。另一方面,使用者 u1 工作完美。這是我第一次使用 NFS
一切看起來都符合預期。由於
/data
isrwx--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 選項覆蓋。