我想从 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 并且是最新的。
我很感激任何帮助。谢谢你!
答案1
这里的问题是激活的最高NFS版本是NFS 4.0
root@stor / $ cat /proc/fs/nfsd/versions
+2 +3 +4 -4.1
因此,当客户端连接 NFS 4.0(或minorversion=0
)时,默认版本为 NFS 4.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