Ale*_*chi 3 nfs mapping debian-stretch
我使用以下设置:
NFS 服务器(Ubuntu 16.04 LTS)
NFS客户端
在客户端,用户test
存在与服务器端相同的 UID。但我需要使用用户testmf
而不是用户test
。
我已经阅读了很多文档,以及来自 StackOverflow/StackExchange 的答案,但由于某些原因,没有任何东西对我有用。
许多答案之一是更改文件/etc/idmapd.conf
。
所以这里是两边:
服务器
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
Run Code Online (Sandbox Code Playgroud)
在客户端:
[General]
Verbosity = 9
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if it differs from FQDN minus hostname
# Domain = localdomain
Domain = example.com
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
[Translation]
Method = static
[Static]
test@nfsserver.example.com = testmf
test@192.168.0.1 = testmf
test@nfsserver = testmf
Run Code Online (Sandbox Code Playgroud)
我使用这样的命令在客户端上挂载目录:
mount 192.168.0.1:/home/test/my_exp_dir /home/testmf/my_imp_dir
Run Code Online (Sandbox Code Playgroud)
当我做 als -l /home/testmf/my_imp_dir
我得到这样的东西:
-rw-r--r-- 1 test test 326025780 May 9 2017 allCountries.zip
Run Code Online (Sandbox Code Playgroud)
并不是
-rw-r--r-- 1 testmf testmf 326025780 May 9 2017 allCountries.zip
Run Code Online (Sandbox Code Playgroud)
如果我做到这一点,touch testfile
我就会明白:
-rw-r--r-- 1 test test 326025780 May 9 2017 allCountries.zip
-rw-r--r-- 1 testmf testmf 0 Jun 9 18:57 testfile
Run Code Online (Sandbox Code Playgroud)
或者 ls -ln
-rw-r--r-- 1 1300 1300 326025780 May 9 2017 allCountries.zip
-rw-r--r-- 1 1350 1350 0 Jun 9 18:57 testfile
Run Code Online (Sandbox Code Playgroud)
我试图提高详细程度,但在我的日志中没有任何地方可以看到用户从一个 UID 到另一个 UID 的映射,就像我在某些答案中看到的那样。我可以看到的两件事是内核设置/sys/module/nfs/parameters/nfs4_disable_idmapping
被设置为Y
,即使更改为N
,似乎也没有任何效果。
我发现的第二件事是我的客户端服务器上不存在 2 个条目:
而且我不知道如何添加它,尤其是在 nfsidmap 不可用的情况下。
我已经读到我还需要idmapd
在更改后重新启动服务。但是在 Debian 9 中这是不可能的......或者至少我还没有找到如何去做......
我还更改了文件/etc/default/nfs-common
以设置变量NEED_IDMAPD=yes
,即使在重新启动后它也没有做任何事情......
所以我的问题可能很愚蠢,但是如何在 Debian Stretch 上激活 nfsidmapd?我真的别无选择,搜索关键字和 Debian 的官方文档在这里并没有真正的帮助,除非我完全失明!
预先感谢您的帮助。
nfs id 映射存在很大的混淆。当字符串形式主体(如 test@example.com)必须转换为数字 id 时使用的映射,反之亦然。但是,当您使用 sec=sys 挂载时,您显然会这样做,然后所有请求都使用客户端的本地 UID 和 GID 进行身份验证。IOW,客户端进程的触摸UID 将是服务器上的文件所有者。
第二个混淆是Static可用于定义静态映射。根据手册页:
“静态”转换方法使用 GSS 认证名称到本地用户名的静态列表。
这从字面上预计GSS-认证主体:
if (strcmp(secname, "krb5") != 0 && strcmp(secname, "spkm3") != 0)
return -EINVAL;
Run Code Online (Sandbox Code Playgroud)
由于太多人需要静态映射,这可能必须修复,但是,您无法修复进程 UID 的用法。
要以 NFS 友好的方式解决它,最好的选择是使用 kerberos 并使用 sec=krb5 挂载。在这种情况下,您的进程可以使用一个用户的 kerberos 票证运行,但在本地仍具有不同的 UID。在这种情况下,可以使用静态映射来避免使用 LDAP。
归档时间: |
|
查看次数: |
4994 次 |
最近记录: |