NFSv4 和ID 映射
介绍
ID 映射是将数字 UID 和 GID 向前和向后转换为用户名和组名(字符串)。 NFSv4 通过在线发送用户名和组名而不是数字 UID 和 GID 来引入 ID 映射。 NFSv3 使用数字 UID 和 GID。
现在可以禁用 NFS 客户端和服务器对 NFSv4 的 ID 映射的使用,从而导致使用数字 UID 和 GID。 在 RHEL 6 和更新版本的最新版本中,使用 AUTH_SYS 时可以禁用 ID 映射,但是,使用 AUTH_GSS 时需要 ID 映射。 例如,sec=krb5
如果尝试使用数字 UID 或 GID 失败,NFS 客户端将切换到用户名和组名。 这保留了与不接受数字 UID 和 GID 的 NFS 服务器的向后兼容性。
默认情况下,ID 映射由 NFS 服务器上的rpc.idmapd
和 nfsidmap
处理,或者由 NFS 客户端上的rpc.idmapd
处理。 有关更多详细信息,请参阅他们的手册页。
可以使用以下可调参数禁用 ID 映射:
* NFS client: /sys/module/nfs/parameters/nfs4_disable_idmapping
* NFS server: /sys/module/nfsd/parameters/nfs4_disable_idmapping
背景
协议有两个不同级别,我们指的是用户和组:
- 每个 NFS 请求的 RPC 标头通过对 kerberos 凭证的引用(在 RPCSEC_GSS 情况下)或通过 UID、GID 和补充 GID 列表(在 AUTH_SYS 情况下)来标识谁正在执行该请求。 在 RPC 协议级别,可以设置有限的映射。 它也称为“ID 映射”,在exports(5) 的“用户ID 映射”部分中进行了描述。
- 设置或获取文件所有者、文件组或 ACL 属性的 NFSv4 请求的负载必须引用用户和组。 他们可以使用
user@domain
形式的名称或(最近的)数字 ID。 NFSv2 和 NFSv3 始终使用数字 ID。
本文档侧重于 NFSv4 协议级别,而不是 RPC 协议级别。
在 NFS 客户端和 NFS 服务器之间同步 UID 仍然很重要,否则在 AUTH_SYS 挂载上新创建的文件的权限和所有者可能不正确。
时间线
RHEL 5
- 无法禁用 ID 映射.
- NFS 客户端和 NFS 服务器都使用
rpc.idmapd
。
RHEL 6
NFS客户端
- 在 RHEL 6.3(内核 2.6.32-279.el6)中,ID 映射在 NFS 客户端上默认为禁用。 即
nfs4_disable_idmapping
默认为“Y”。 - 在 RHEL 6.3 之前,ID 映射需要
rpc.idmapd
。 在 RHEL 6.3 中,nfs-utils-1.2.3-26.el6 中引入了nfsidmap
和基于密钥环的 ID 映射。 在 RHEL 6.6 的 nfs-utils-1.2.3-54.el6 中修复了实施中的问题。 如果 RHEL 6.5 或更早版本需要 ID 映射,请使用rpc.idmapd
。
NFS 服务器
- 在 RHEL 6.5 (2.6.32-431.el6) 中,可以在 NFS 服务器上禁用 ID 映射。 但是,
nfs4_disable_idmapping
默认为“N”。 内核 NFS 服务器维护者建议用户通过将nfs4_disable_idmapping
设置为“Y”来禁用新 NFS 服务器上的 ID 映射。 - NFS 服务器使用
rpc.idmapd
进行 ID 映射。
RHEL 7 and RHEL 8
- 默认情况下,NFS 客户端和 NFS 服务器都禁用了 ID 映射。 即
nfs4_disable_idmapping
默认为“Y” - 对于 ID 映射,NFS Client 使用
nfsidmap
,NFS Server 使用rpc.idmapd