Linux

如何讓 NFSv4 idmap 與 sec=sys 一起工作?

  • December 11, 2019

我有一個通過NFS 為一些文件夾提供服務的伺服器(Debian)和一個連接到 NFS 伺服器(使用 NFSv4)並安裝該導出文件夾的客戶端(Debian)。到目前為止一切都很好,我可以連接和修改文件夾的內容。但是使用者完全搞砸了。據我了解,這是由於 NFS 使用 UID 來設置權限,並且由於來自客戶端伺服器的使用者的 UID不同,所以會發生這種情況,這仍然是意料之中的。但據我了解,通過啟用 NFSv4,IDMAPD 應該啟動並使用使用者名而不是 UID。使用者確實存在於伺服器客戶端上一方面,他們只是有不同的UID。但無論出於何種原因,IDMAPD 不起作用或似乎沒有做任何事情。

所以這是我到目前為止所做的:

在伺服器端:

  • 安裝 nfs-kernel-server
  • 使用正確的導出設置填充 /etc/exports –> /rfolder ip/24(rw,sync,no_subtree_check,no_root_squash)
  • 並將 /etc/default/nfs-common 更改為NEED_IDMAPD=yes

在客戶端

  • 安裝了 nfs-common
  • 並將 /etc/default/nfs-common 更改為NEED_IDMAPD=yes
  • 並使用“ mount -t nfs4 ip:/rfolder /media/lfolder ”安裝文件夾

重新啟動並重新啟動了幾次,但仍然沒有。當我從伺服器創建一個包含使用者A的文件夾時,在客戶端上我看到文件夾所有者是某個使用者X。當我使用使用者A從客戶端創建文件時,在伺服器端它說它來自某個使用者Y

我用 HTOP 檢查了 rpc.idmap 程序正在伺服器上執行,確實如此。儘管在客戶端上它似乎沒有執行。通過嘗試在客戶端上手動啟動服務,我收到一條錯誤消息,指出 IDMAP 需要執行 nfs-kernel-server 依賴項。所以我將它安裝在Client端,現在我在****ClientServer上都執行了 rpc.idmap 程序。兩個都重啟了,問題依舊。

知道這裡有什麼問題嗎?或者如何正確配置它?

sec=sys在使用預設 AUTH_SYS 身份驗證(掛載選項)而不是 Kerberos的掛載上使用 NFSv4 id 映射時,有幾件事需要注意。

**注意:**使用AUTH_SYSidmapping 僅轉換使用者/組名稱。仍然會根據本地 UID/GID 值檢查權限。獲得使用使用者名的權限的唯一方法是使用 Kerberos。

在最近的核心中,只有伺服器使用 rpc.idmapd(記錄在 中man rpc.idmapd)。使用 idmap 時,使用者名以user@domain格式傳輸。除非在 中配置了域名/etc/idmapd.conf,否則 idmapd 使用系統的 DNS 域名。為了使 idmap 正確映射使用者,客戶端和伺服器上的域名需要相同。

其次,核心預設禁用 NFSv4sec=sys掛載的 id 映射。將參數設置為 false 啟用掛載的 id 映射。nfs4_disable_idmapping``sec=sys

在伺服器上:

echo "N" > /sys/module/nfsd/parameters/nfs4_disable_idmapping

和客戶端:

echo "N" > /sys/module/nfs/parameters/nfs4_disable_idmapping

您需要nfsidmap -c在客戶端上清除 idmap 記憶體,以使更改在已掛載的 NFSv4 文件系統上可見。

要使這些更改永久生效,請在以下位置創建配置文件/etc/modprobe.d/

伺服器( modprobe.d/nfsd.conf) 上:

options nfsd nfs4_disable_idmapping=N

客戶 ( )上modprobe.d/nfs.conf

options nfs nfs4_disable_idmapping=N

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