挂载 NFS:所有者是无人:nogroup

挂载 NFS:所有者是无人:nogroup

我使用以下代码从 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。显然,有一个缓存即使重新启动也不会被清除;这将清除它。 (否则你可能会一直认为修复不起作用,即使它起作用了。)

相关内容