这个问题似乎已经被问了很多次了,但其他的答案不知道怎么适用于我。
基本上我只是build立了一个新的NFSv4服务器,我正面临着UID和GID在服务器和客户端之间不匹配的经典问题。 但是,在我的情况下,同步/ etc / passwd和/ etc / group是不可行的。 请注意,我在两台机器上都有相同的用户(与此问题相反)。
因此,我正在研究idmap:根据一些消息来源,似乎NFSv4发送用户名(而不是NFSv3发送UID / GID的行为),idmap的作用是将这些用户名转换为服务器UID / GID。
但是,这似乎不工作在我的情况下(安装细节下面),我认为非常标准(几乎只有从回购安装的NFS)。
我错过了什么吗? 有没有办法让这个工作没有设置LDAP或Kerberos?
服务器设置
服务器已安装Ubuntu 16.04和两个用户。
user1@server:~$ id user1 uid=1000(user1) gid=1000(user1) groups=1000(user1),27(sudo) user1@server:~$ id user2 uid=1001(user2) gid=1001(user2) groups=1001(user2)
NFS从repo安装并configuration为导出testing文件夹。
user1@server:~$ sudo apt-get install nfs-kernel-server user1@server:~$ sudo cat /proc/fs/nfsd/versions +2 +3 +4 +4.1 +4.2 user1@server:~$ ls -ld /srv/nfs/test/ drwxrwxrwx 2 nobody nogroup 4096 nov 2 17:34 /srv/nfs/test/ user1@server:~$ cat /etc/exports "/srv/nfs/test" 192.168.xx(rw,sync,no_subtree_check)
由于服务器和客户端有不同的主机名,我改变了idmapdconfiguration文件中的“域”值。 否则,该文件与包pipe理器安装的文件相同。 请注意,该文件的内容在服务器和客户端上都是相同的。
user1@server:~$ cat /etc/idmapd.conf [General] Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # set your own domain here, if id differs from FQDN minus hostname Domain = mydomain [Mapping] Nobody-User = nobody Nobody-Group = nogroup
客户端设置
客户端也有Ubuntu 16.04和两个用户,但是具有相同的用户名但是不同的UID / GID 。
user1@client:~$ id user1 uid=1001(user1) gid=1002(user1) groups=1002(user1),27(sudo) user1@client:~$ id user2 uid=1000(user2) gid=1000(user2) groups=1000(user2),27(sudo)
NFS从回购安装,testing共享被挂载。
user1@client:~$ sudo apt-get install nfs-common user1@client:~$ mkdir ./test user1@client:~$ sudo mount -t nfs4 192.168.xx:/srv/nfs/test ./test
testing
首先我在客户端上创build一个文件,这似乎很好:
user1@client:~$ touch test/testfile user1@client:~$ ls -l ./test total 0 -rw-rw-r-- 1 user1 user1 0 nov 2 17:24 testfile
但是当我从服务器查看文件时,我注意到所有者是错误的,而组不存在。
user1@server:~$ ls -l /srv/nfs/test total 0 -rw-rw-r-- 1 user2 1002 0 nov 2 17:24 testfile
实验
根据对类似问题的这个答案 ,应该在服务器上激活如下的id-mapping(注意错误):
user1@server:~$ sudo tee /sys/module/nfsd/parameters/nfs4_disable_idmapping <<< "N" user1@server:~$ sudo nfsidmap -c nfsidmap: 'id_resolver' keyring was not found. user1@server:~$ sudo service rpcidmapd restart Failed to restart rpcidmapd.service: Unit rpcidmapd.service not found. user1@server:~$ sudo service nfs-kernel-server restart
在客户端(注意不存在错误):
user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N" user1@client:~$ sudo nfsidmap -c
但结果很奇怪:
user1@client:~$ touch test/testfile user1@client:~$ ls -l test total 0 -rw-rw-r-- 1 user2 4294967294 0 nov 2 19:16 testfile user1@server:~$ ls -l /srv/nfs/project/ total 0 -rw-rw-r-- 1 user2 1002 0 nov 2 19:16 prova
另一个答案build议修改idmapdconfiguration如下(两台机器上的内容是相同的):
user1@server:~$ cat /etc/idmapd.conf [General] Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # set your own domain here, if id differs from FQDN minus hostname Domain = mydomain [Translation] Method=static [Static] user1@mydomain = user1 [Mapping] Nobody-User = nobody Nobody-Group = nogroup
但是这似乎没有任何区别。
当您不使用Kerberos和安全特性时,NFSv4不会像您想象的那样转换UID和GID。 但它的确如你所描述的那样行事。 原因是NFSv4将使用AUTH_SYS安全性。 更详细的描述可以在这里find。