我使用以下代码从 shell 安装了 NFS 文件系统:
LINE='nfs.mit.edu:/export/evodesign/beatdb /beatdb nfs tcp,intr,rw 0 0'
grep "$LINE" /etc/fstab >/dev/null || echo $LINE >> /etc/fstab
mkdir /beatdb
mount -a # Remount /etc/fstab Without Reboot in Linux
我将文件显示为无人:无组:
有办法解决这个问题并显示正确的所有者吗?
我使用Ubuntu 12.04。
编辑:
客户端(我无权访问 NFS 服务器):
rpcidmapd
在跑:
rpcinfo -p
:
/etc/idmapd.conf
:
答案1
寻求本地支持或文档听起来是一个非常好的主意:)。
以清单形式,我认为你需要
1) 在客户端系统上创建所需的用户。这可以手动完成,但您应该期望有一个可以配置的自动“目录服务”。它可能是 LDAP。
2)客户端和服务器之间的用户映射。在 NFS4 中(由 tcp 选项暗示)正如 gareth 所提到的,这是由 idmapd 处理的。您只需要设置域以匹配服务器的想法即可。跨域不行,我认为这是Linux的限制。
3) kerberos 向服务器验证您自己的身份(在 NFS4 中可用)。如果您想以“nobody”之外的其他人的身份访问任何文件,那么这绝对是需要的。我建议首先配置和测试 kerberos。配置它包括设置一个域 - 您将在 idmapd.conf 中设置相同的域。
或者使用 NFS3 样式的身份验证,将跳过 3),而不是 2),您只需确保用户的数字 UID 与服务器的数字 UID 匹配即可。这仅在服务器信任客户端的情况下使用:)。
答案2
我追查了类似的问题。设置 /etc/idmapd.conf Verbosity=3 有助于查看 Ubuntu 上的一些问题,但不是全部。以下是我的发现的摘要:
您的 /etc/passwd 和组文件仍然有可能不与提供共享的计算机共享相同的用户/组。这是一个提示,您的本地计算机必须具有类似的用户/组名称映射。 /etc/nsswitch.conf 否则 idmapd 的映射操作将会失败。请注意,如果运行 Verbosity=3,您将在 /var/log/syslog 中看到一个条目,例如:
idmapd[25193]:客户端 64:(组)名称“TheGroupNameYouExpected”-> id“65534
如果您修改 /etc/nsswitch.conf 以映射到文件以外的其他内容(例如 ldap 或 nis),那么您还需要确保 ldap 或 nis 对于您想要 ID 转换的用户名或组名有某种类型的实际条目为了。如果条目不存在,idmapd 将无法成功映射用户/组。
在相关问题中,我发现 RHEL v7 不再需要为 NFS 客户端启用 idmapd.conf 服务:
https://bugzilla.redhat.com/show_bug.cgi?id=1033708#c2
然而,上述线程中存在一个运行问题,即默认情况下,执行自动 ID-用户名映射的服务在内存中保留映射的 id 数量非常少。 idmapd 不会记录错误,只是拒绝翻译超过 200 个用户。您可以从当前的内核设置中验证这一点:
cat /proc/sys/kernel/keys/root_maxkeys
200 很可能是默认设置。要允许 NFS 挂载点正确映射所有可用用户,您需要更改此文件:
/etc/sysctl.conf
并按如下方式添加或修改这些行:
# To ensure we can map all the possible NFS users
kernel.keys.root_maxkeys=65000
kernel.keys.root_maxbytes=1300000
kernel.keys.maxkeys=65000
kernel.keys.maxbytes=1300000
您的系统可能不需要那么多的用户/ID 键映射,因此请根据需要进行调整。这将允许所有 id-name 键在使用 NFS 挂载时保持映射状态。这是另一个相关的帖子,显示了当前的内核设置:
https://bugzilla.redhat.com/show_bug.cgi?id=876705#c20
对于这些值:
cat /proc/sys/kernel/keys/root_maxkeys
cat /proc/sys/kernel/keys/root_maxbytes
cat /proc/sys/kernel/keys/maxkeys
cat /proc/sys/kernel/keys/maxbytes
最有可能的 maxbytes 和 root_maxbytes 必须足够大才能存储所有键:
https://www.kernel.org/doc/Documentation/security/keys.txt
答案3
另一个清单,假设您正在使用 Kerberos 执行 NFSv4:
kinit
,然后看看klist
。您应该看到一张票;如果没有,请首先查找有关如何修复 Kerberos 身份验证的答案。- 在
rpc.gssd
跑?您可能想要启动该服务;另外,在某些发行版上,它不会自动启动,除非您在/etc/fstab
. - 在
rpc.idmapd
跑? (同样,这通常应该由客户端 nfs 服务启动;ls /etc/init.d/
是一个很好的起点。 - 看着
/etc/idmapd.conf
。 “域”部分与您的 NFS 服务器的实际域匹配吗? (...如果没有别的办法,您可以尝试使用 Kerberos 领域。)我见过一些发行版不需要它,而有些发行版则需要它;也许在某些方面,它有更合理的 FQDN 默认值。 - 也添加
GSS_principal_attr = GSSAuthName
到文件中。仅域可能会解决一些所有权问题,但看起来这对于例如目录也是需要的。 - 至少重新启动
rpc.idmapd
一次调整配置。调整配置后不需要重新安装,但这并没有什么坏处。 - 还!
nfsidmap -c
。显然,有一个缓存即使重新启动也不会被清除;这将清除它。 (否则你可能会一直认为修复不起作用,即使它起作用了。)