我在一个有三个 Ubuntu 系统的实验室工作,我想通过 NFS 交叉挂载一些文件系统。然而,虽然系统有一些相同的用户名,但 UID 和 GID 不匹配,因为这三个系统是分开设置的。当我将 NFS 文件系统从一个系统挂载到另一个系统时,所有权显示错误。例如,如果服务器 1 上的 UID 1000 是 alice,而服务器 2 上的相同 UID 1000 是 bob,那么当服务器 1 挂载服务器 2 的导出文件系统时,bob 的文件似乎归 alice 所有。
那么有没有办法让 NFS (v4) 通过关联的用户名在服务器之间转换 UID?通过谷歌搜索,我看到了很多对 Kerberos、LDAP 或 NIS 的引用,对于这样一个简单的任务来说,这似乎是一种过度杀伤,而且可能不可能,因为这些系统不是集中管理的。这个链接似乎表明我问的是不可能的。这是正确的吗?
编辑:我已经尝试了所有/etc/idmapd.conf我能想到或在互联网上找到的配置,虽然 idmapd 进程显然正在运行,但到目前为止我还没有看到任何证据表明 NFS 正在尝试使用它,并且它从未对 NFS 挂载上报告的用户 ID 产生任何影响。
NFSv4 支持 ID 映射。启用后,NFS 将传输用户名而不是数字 ID。主机对同一用户具有不同的数字 uid 不是问题,因为用户名映射到主机上的 uid。
ID 映射始终与 Kerberos 安全模式 ( ) 一起使用sec=krb5。
Id 映射也可以在 AUTH_UNIX(默认)模式下使用sec=sys。我在回答:How to get NFSv4 idmapworking with sec=sys 时解释了配置详细信息。
在没有集中用户管理的情况下,我看到的“最佳”方式是强制所有服务器为每个用户使用相同的 GID 和 UID。现在......我只是在谈论文件和/或目录。
在这种情况下我会做的是:
/etc/passwd和/etc/group匹配所有服务器上的组。最好使用新的 UID 和 GID,以便下一步更快运行这个(需要一些时间):
find / -group <OLD_GID> -exec chgrp <NEW_GID> '{}' \+
find / -user <OLD_UID> -exec chown <NEW_UID> '{}' \+
Run Code Online (Sandbox Code Playgroud)