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