帶有 idmap 的 NFSv4

帶有 idmap 的 NFSv4

NFS 伺服器上出現以下錯誤,您能告訴我如何解決此問題嗎?

細節:

系統:CentOS 版本 6.4,NFS:nfs-utils-1.2.3-36

# cat /etc/idmapd.conf

[General]
Domain = domain.com

[Mapping]
Nobody-User = nobody
Nobody-Group = nobody

[Translation]
Method = nsswitch

Sep  3 08:25:28 snode1 rpc.idmapd[1382]: nss_getpwnam: name '0' does not map into domain 'domain.com'
Sep  3 08:25:29 snode1 rpc.idmapd[1382]: nss_getpwnam: name '500' does not map into domain 'domain.com'

編輯:2013 年 9 月 3 日 10:41

請注意,我使用的是 NFSv4,這些錯誤僅出現在 NFS 伺服器上(而不是 NFS 用戶端)。

伺服器:

# cat /etc/sysconfig/nfs

MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
...
RPCNFSDARGS="-N 2 -N 3"

客戶:

# cat /etc/fstab

server:/     /data  nfs4    defaults,hard,intr,timeo=15,_netdev,noatime,nodiratime,nosuid    0 0

編輯:2014 年英國夏令時間 6 月 11 日星期三 14:52:50

# getent passwd "0" | cut -d: -f1
root
# getent passwd "500" | cut -d: -f1
user1

-

# grep "^passwd" /etc/nsswitch.conf 
passwd:     files

答案1

我將進行一些猜測。如果您在 NFS 伺服器上解析 UID“0”或“500”,您會得到什麼?他們是本地帳戶嗎?

我之所以這麼建議,是因為 NFSv4 在設計上引用了網域內的帳戶名稱,並試圖避免先前版本的 NFS 中的「本地身份驗證」問題。因此,它使用 idmapd(它會翻譯在 NFS 封包中傳遞的帳戶名稱)將使用者名稱翻譯為 UID/GID。

正如您所正確確定的那樣,這看起來就是這裡出現的問題 - 所以我的問題是,您使用的身份驗證網域是什麼,當您查詢它時,您是否得到 UID 0 和 500 的答案?

我見過類似的情況,例如,與客戶端相比,伺服器正在查看 LDAP(好吧,活動目錄)目錄的錯誤分支。因為它無法解析 UID/用戶名關係,所以它崩潰了,並將這些用戶轉換為「nobody」。

您已透過 nsswitch 配置了解析度 - nsswitch 對「passwd」有何說明? (主要在伺服器上,因為這似乎是問題存在的地方)。

編輯:好的,所以根據您的“passwd”,您已經將“文件”作為本地資料庫 - 例如/etc/passwd。這表示您正在透過本機帳戶對應 UID/GID。你不應該曾經在 NFSv4 中使用 UID - 它應該是用戶名。

然而,谷歌搜尋給了我: http://www.spinics.net/lists/linux-nfs/msg38598.html

因此,下一個問題是 - 您是否使用“sys”身份驗證?我根據您的 fstab 猜測您是,此時 - 這似乎是預期的行為 - 您的客戶端正在使用“sys”,因此傳遞 UID/GID。 idmapd 抱怨因為他們不是有效使用者(他們是 UID)。

如果在客戶端上,您「觸摸」了一個 UID 500 或 0 的文件,那麼它在客戶端和伺服器上會是什麼樣子(ls -l 取得用戶名,ls -ln 取得 uid)?如果工作正常,這似乎是 NFSv3 Auth sys 和 NFSv4 之間向後相容性的產物,並且這些訊息是無害的。

您可以考慮升級到 Kerberos 身份驗證或類似身份驗證,但從經驗來看,這並不是一件簡單的事情。 (儘管有一些相當方便的優點)。我連結的該訊息(踪跡)意味著此錯誤訊息在更高版本的內核版本中停止彈出。

答案2

您似乎正在使用 NFSv3,它僅透過網路發送數位使用者和群組標識符。

為了讓 idmapd 運作,您需要使用 NFSv4,它會傳送 idmapper 可以理解的 user@domain 識別碼並對應到本機帳戶(因此您不需要在伺服器和用戶端上使用相同的 uid/gid)。

嘗試使用 -t 選項安裝該共用:

mount -t nfs4 server:/path /mountpoint

答案3

請檢查以下解決方案是否源自gentoo論壇幫你:

 1. On the NFS server, /etc/hostname did not contain the FQDN, just the local hostname.
 2. This particular client had an unconfigured /etc/idmapd.conf. It had Domain = localdomain instead of Domain = FQDN-minus-hostname. 

對於您的設定來說,這看起來像是第二個選項。

Google搜尋確切的錯誤訊息「nss_getpwnam:名稱'0'未對應到網域」為您提供了大量可能對您有所幫助的結果(只是指出了最有希望的)

相關內容