系统管理指南:网络服务

nfsmapid 守护进程

版本 4 的 NFS 协议 (RFC3530) 更改了用户标识符或组标识符(UID 或 GID)在客户机与服务器之间的交换方式。该协议要求分别采用 user@nfsv4_domaingroup@nfsv4_domain 格式将文件的属主属性和组属性作为字符串在 NFS 版本 4 客户机与 NFS 版本 4 服务器之间进行交换。

例如,用户 known_user 在 NFS 版本 4 客户机上具有 UID 123456,该客户机的完全限定主机名为 system.example.com。客户机为了向 NFS 版本 4 服务器发出请求,必须将 UID 123456 映射为 known_user@example.com,然后将此属性发送到 NFS 版本 4 服务器。NFS 版本 4 服务器希望接收 user_or_group@nfsv4_domain 格式的用户和组文件属性。服务器从客户机收到 known_user@example.com 后,就会将该字符串映射为基础文件系统可以识别的本地 UID 123456。此功能假设网络中的每个 UID 和 GID 都是唯一的,并且客户机中的 NFS 版本 4 域与服务器上的 NFS 版本 4 域匹配。


注 –

如果服务器不能识别给定的用户名或组名,即使 NFS 版本 4 域匹配,服务器也不能将该用户名或组名映射为其唯一 ID(整数值)。在这类情况下,服务器会将传入的用户名或组名映射为 nobody 用户。为了防止这类情况出现,管理员应避免创建仅在 NFS 版本 4 客户机上存在的特殊帐户。


NFS 版本 4 客户机和服务器都能执行整数到字符串和字符串到整数的转换。例如,在对 GETATTR 操作进行响应时,NFS 版本 4 服务器会将从基础文件系统获取的 UID 和 GID 映射到其各自的字符串说明中,并将此信息发送到客户机。或者,客户机还必须将 UID 和 GID 映射到字符串说明中。例如,在对 chown 命令进行响应时,客户机在将 SETATTR 操作发送到服务器之前会先将新的 UID 或 GID 映射到字符串说明中。

但是请注意,客户机和服务器将以不同的方式对不能识别的字符串做出响应:

配置文件和 nfsmapid

下面介绍了 nfsmapid 守护进程使用 /etc/nsswitch.conf/etc/resolv.conf 文件的方式:

优先级规则

为了使 nfsmapid 能正常工作,NFS 版本 4 客户机和服务器必须具有相同的域。为了确保与 NFS 版本 4 域匹配,nfsmapid 将遵循以下严格的优先级规则:

  1. 守护进程首先从 /etc/default/nfs 文件中查找已为 NFSMAPID_DOMAIN 关键字指定的值。如果找到了值,则指定的值将优先于其他任何设置。指定的值被附加到外发属性字符串上,并与传入属性字符串进行比较。有关 /etc/default/nfs 文件中的关键字的更多信息,请参见/etc/default/nfs 文件的关键字。有关过程信息,请参见设置 NFS 服务


    注 –

    使用 NFSMAPID_DOMAIN 设置不具备可伸缩性,因此建议不要用于大型部署。


  2. 如果未对 NFSMAPID_DOMAIN 指定值,则守护进程会从 DNS TXT RR 中查找域名。nfsmapid 将依赖于 /etc/resolv.conf 文件中由 resolver 中的一组例程所使用的指令。resolver 将在已配置的 DNS 服务器中搜索 _nfsv4idmapdomain TXT RR。请注意,使用 DNS TXT 记录具备更强的伸缩性。出于此原因,继续使用 TXT 记录比在 /etc/default/nfs 文件中设置关键字更好。

  3. 如果没有提供域名的 DNS TXT 记录,则在缺省情况下 nfsmapid 守护进程将使用已配置的 DNS 域。

  4. 如果 /etc/resolv.conf 文件不存在,则 nfsmapid 将按照 domainname 命令的行为获取 NFS 版本 4 域名。具体来说,如果 /etc/defaultdomain 文件存在,则 nfsmapid 将使用与 NFS 版本 4 域对应的文件的内容。如果 /etc/defaultdomain 文件不存在,则 nfsmapid 将使用由网络的已配置命名服务提供的域名。有关更多信息,请参见 domainname(1M) 手册页。

nfsmapid 和 DNS TXT 记录

DNS 普遍存在的这一特性为 NFS 版本 4 域名提供了有效的存储和分配机制。此外,由于 DNS 固有的可伸缩性,因此使用 DNS TXT 资源记录是为大型部署配置 NFS 版本 4 域名的首选方法。您应该在企业级 DNS 服务器上配置 _nfsv4idmapdomain TXT 记录。这类配置可确保任何 NFS 版本 4 客户机或服务器都能通过遍历 DNS 树找到其 NFS 版本 4 域。

以下是用于使 DNS 服务器能够提供 NFS 版本 4 域名的首选项的示例:


_nfsv4idmapdomain		IN		TXT			"foo.bar"

在本示例中,要配置的域名是用双引号引起来的值。请注意未指定 ttl 字段,且未将域附加到 _nfsv4idmapdomain(是 owner 字段中的值)中。此配置使 TXT 记录能够使用区域的颁发机构开始 (Start-Of-Authority, SOA) 记录中的 ${ORIGIN} 项。例如,在域名称空间的不同层次上,该记录的值可能为:


_nfsv4idmapdomain.subnet.yourcorp.com.    IN    TXT    "foo.bar"

_nfsv4idmapdomain.yourcorp.com.           IN    TXT    "foo.bar"

在使用 resolv.conf 文件搜索 DNS 树分层结构方面,此配置为 DNS 客户机提供了更大的灵活性。请参见 resolv.conf(4) 手册页。此功能提高了找到 TXT 记录的概率。为了获得更大的灵活性,较低层的 DNS 子域可以定义其各自的 DNS TXT 资源记录 (resource record, RR)。此功能使较低层的 DNS 子域可以覆盖由顶层 DNS 域定义的 TXT 记录。


注 –

TXT 记录指定的域可以是任意字符串,该字符串不一定与使用 NFS 版本 4 的客户机和服务器的 DNS 域匹配。您可以选择不与其他 DNS 域共享 NFS 版本 4 数据。


在 Solaris 10 发行版中配置 NFS 版本 4 缺省域

从 NFS 版本 4 的 Solaris 10 发行版开始,如果您的网络包括多个 DNS 域,但只有单个 UID 和 GID 名称空间,则所有的客户机都必须对 NFSMAPID_DOMAIN 使用一个值。 对于使用 DNS 的站点,nfsmapid 将通过从为 _nfsv4idmapdomain 指定的值中获取域名来解决此问题。有关更多信息,请参见nfsmapid 和 DNS TXT 记录。如果未将网络配置为使用 DNS,则在首次引导系统期间,Solaris OS 将使用 sysidconfig 实用程序为 NFS 版本 4 域名提供以下提示:


This system is configured with NFS version 4, which uses a 

domain name that is automatically derived from the system's 

name services. The derived domain name is sufficient for most 

configurations. In a few cases, mounts that cross different 

domains might cause files to be owned by nobody due to the 

lack of a common domain name.



Do you need to override the system's default NFS verion 4 domain 

name (yes/no)? [no]

缺省响应为 [no]。如果选择 [no],则将看到以下信息:


For more information about how the NFS version 4 default domain name is 

derived and its impact, refer to the man pages for nfsmapid(1M) and 

nfs(4), and the System Administration Guide: Network Services.

如果选择 [yes],则将看到以下提示:


Enter the domain to be used as the NFS version 4 domain name.

NFS version 4 domain name []:

注 –

如果 NFSMAPID_DOMAIN 的值存在于 /etc/default/nfs 中,则您提供的 [domain_name] 将覆盖该值。


有关 nfsmapid 的其他信息

有关 nfsmapid 的更多信息,请参见以下内容: