Nfs

NFSv4 使用者映射問題

  • July 3, 2015

我想從 NFSv3 切換到 NFSv4 並且遇到 NFSv4 使用者映射問題,因為在某些系統上,眾所周知的 uid 已分配給普通使用者。

有關設置的說明,請參見下文。

問題是如何強制掛載的目錄屬於真實的 uid33而不是 uid 1000


貯存

/mnt/web_dir屬於使用者www-data (uid 33)

網路伺服器

  • storage:/mnt/web_dir安裝到/var/www
  • 使用者www-data有uid33

管理伺服器

  • storage:/mnt/web_dir安裝到/mnt/web_dir
  • 使用者www-data有uid1000
  • 使用者admin有uid33

現在的問題是管理伺服器上的 uid 和使用者名被混淆了,而不是顯示真正的 uid。例如,這給 rsync 帶來了問題。

NFS 儲存上的本地目錄

root@stor /mnt/web_dir $ ls -la
total 8
drwxr-xr-x 2 root     root     4096 Jul  3 14:01 .
drwxr-xr-x 4 root     root     4096 Jul  3 14:01 ..
-rw-r--r-- 1 www-data www-data    0 Jul  3 14:01 index.html

root@stor /mnt/web_dir $ id -u www-data
33

管理伺服器上的 NFS 掛載目錄

root@admin /mnt/webdir $ ls -lah
insgesamt 8,0K
drwxr-xr-x 2 root     root     4,0K Jul  3 13:43 .
drwxr-xr-x 6 root     root     4,0K Jul  3 13:43 ..
-rw-r--r-- 1 www-data www-data    0 Jul  3 13:43 testfile

root@admin /mnt/web_dir $ id -u www-data
1000

root@admin /mnt/web_dir $ ls -ln
insgesamt 0
-rw-r--r-- 1 1000 1000 0 Jul  3 13:43 testfile

配置如下:

root@admin / $ cat /proc/mounts
storage:/mnt/web_dir /var/www nfs4 rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.x.x.x,minorversion=0,local_lock=none,addr=10.x.x.x 0 0

root@stor / $ exportfs -v
/mnt/web_dir
       10.x.x.x(rw,async,wdelay,no_root_squash,no_subtree_check)

root@admin /mnt/web_dir $ cat /etc/idmapd.conf 
[General]

Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

root@admin /mnt/web_dir $ dpkg -l | grep nfs
ii  libnfsidmap2:amd64                    0.25-4                        amd64        NFS idmapping library
ii  nfs-common                            1:1.2.6-4                     amd64        NFS support files common to client and server


root@stor / $ dpkg -l | grep nfs
ii  libnfsidmap2:amd64               0.25-4                        amd64        NFS idmapping library
ii  nfs-common                       1:1.2.6-4                     amd64        NFS support files common to client and server
ii  nfs-kernel-server                1:1.2.6-4                     amd64        support for NFS kernel server

顯然版本很重要,因為我已經使用 Debian Jessie 測試了設置,並且真正的 uid 正在傳遞給 nfs4 客戶端。但是,有問題的伺服器有 Debian 7 並且是最新的。

我很感激任何幫助。謝謝!

這裡的問題是NFS啟動的最高版本是NFS 4.0

root@stor / $ cat /proc/fs/nfsd/versions 
+2 +3 +4 -4.1

因此,客戶端連接時 NFS 4.0(或minorversion=0)是預設版本。

解決方案實際上是使用選項掛載目錄minorversion=1

root@admin / $ cat /proc/mounts
storage:/mnt/web_dir /var/www nfs4 rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.x.x.x,minorversion=1,local_lock=none,addr=10.x.x.x 0 0

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