ubuntu – NFSv4用户映射

前端之家收集整理的这篇文章主要介绍了ubuntu – NFSv4用户映射前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题似乎已经多次被问过,但其他答案不知何故并不适用于我.

基本上我只是设置了一个新的NFSv4服务器,我面临着UID和GID在服务器和客户端之间不匹配的经典问题.但是,在我的方案中同步/ etc / passwd和/ etc / group是不可行的.请注意,我在两台计算机上都拥有相同的用户(而不是this question).

因此我正在研究idmap:根据一些消息来源,似乎NFSv4发送用户名(而不是NFSv3发送UID / GID的行为),而idmap的作用是将这些用户名转换为服务器UID / GID.

但是,这似乎不适用于我的情况(下面的设置细节),我认为这是非常标准的(几乎只从repo安装了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安装并配置为导出测试文件夹.

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.x.x(rw,sync,no_subtree_check)

由于服务器和客户端具有不同的主机名,因此我更改了idmapd配置文件中的“域”值.否则,该文件与包管理器安装的文件相同.请注意,此文件内容在服务器和客户端上都是相同的.

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是从repo安装的,并且已安装测试共享.

user1@client:~$sudo apt-get install nfs-common

user1@client:~$mkdir ./test
user1@client:~$sudo mount -t nfs4 192.168.x.x:/srv/nfs/test ./test

测试

首先,我在客户端上创建一个文件,这似乎很好:

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

实验

根据this answer的类似问题,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

Another answer建议修改idmapd配置如下(两台机器上的内容相同):

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安全性.可以在 here找到更详细的描述.

猜你在找的Ubuntu相关文章