在 Oracle® Solaris 11.2 中管理网络文件系统

退出打印视图

更新时间: 2014 年 7 月
 
 

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 服务器。服务器从客户机收到 known_user@example.com 后,就会将该字符串映射为底层文件系统可以识别的本地 UID 123456。此功能假设网络中的每个 UID 和 GID 都是唯一的,并且客户机中的 NFS 版本 4 域与服务器上的 NFS 版本 4 域匹配。

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

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

  • 如果用户不在服务器上,即使在同一 NFS 版本 4 域配置中,服务器也会拒绝远程过程调用 (remote procedure call, RPC) 并向客户机返回错误消息。这种情况将限制远程用户可以执行的操作。

  • 如果用户同时存在于客户机和服务器中,但它们的域不匹配,服务器将拒绝属性修改操作(例如 SETATTR),这些操作要求服务器将传入的用户字符串映射为底层文件系统可以识别的整数值。要使 NFS 版本 4 客户机和服务器运行正常,它们的 NFS 版本 4 域(即 @ 符号后的字符串部分)应相互匹配。

  • 如果 NFS 版本 4 客户机不能识别来自服务器的用户名或组名,则客户机无法将字符串映射为其唯一的 ID(整数值)。在这类情况下,客户机会将传入的用户字符串或组字符串映射为 nobody 用户。映射为 nobody 将为不同的应用程序带来各种问题。对于 NFS 版本 4,修改文件属性的操作将会失败。

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

您可以使用带有 nfsmapid_domain 选项的 sharectl 命令更改客户机和服务器的域名。该选项可为客户机和服务器设置公共域。将覆盖使用本地 DNS 域名的缺省行为。有关任务信息,请参阅设置 NFS 服务

配置文件和 nfsmapid 守护进程

    nfsmapid 守护进程按如下方式使用在 svc:system/name-service/switchsvc:/network/dns/client 中找到的 SMF 配置信息:

  • nfsmapid 使用标准的 C 库函数从后端名称服务中请求口令和组信息。这些名称服务由 svc:system/name-service/switch SMF 服务中的设置控制。对服务属性的任何更改都会影响 nfsmapid 操作。有关 svc:system/name-service/switch SMF 服务的更多信息,请参见 nsswitch.conf(4) 手册页。

  • 为确保 NFS 版本 4 客户机能够从不同的域挂载文件系统,nfsmapid 将依赖于 DNS TXT 资源记录 (resource record, RR) _nfsv4idmapdomain 的配置。有关配置 _nfsv4idmapdomain 资源记录的更多信息,请参见nfsmapid 和 DNS TXT 记录。另外,还要注意以下几点:

    • 应该使用所需的域信息在 DNS 服务器上显式配置 DNS TXT RR。

    • 为了使 resolver 能够找到 DNS 服务器并搜索客户机和服务器 NFS 版本 4 域的 TXT 记录,应配置 svc:system/name-service/switch SMF 服务。

优先级规则

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

  1. 守护进程首先在 SMF 系统信息库中检查指定给 nfsmapid_domain 参数的值。如果找到了值,则指定的值将优先于其他任何设置。指定的值将附加到外发属性字符串上,并与传入属性字符串进行比较。有关过程信息,请参见设置 NFS 服务


    注 -  使用 NFSMAPID_DOMAIN 设置不具备可伸缩性,因此建议不要用于大型部署。
  2. 如果没有为 nfsmapid_domain 指定值,则守护进程会从 DNS TXT RR 中查找域名。nfsmapid 依赖于 /etc/resolv.conf 文件中由 resolver 中的例程集使用的指令。resolver 将在已配置的 DNS 服务器中搜索 _nfsv4idmapdomain TXT RR。请注意,使用 DNS TXT 记录具备更强的伸缩性。出于此原因,继续使用 TXT 记录比在 SMF 系统信息库中设置参数更具优势。

  3. 如果未配置用于提供域名的 DNS TXT 记录,则 nfsmapid 守护进程将使用 /etc/resolv.conf 文件中的 domainsearch 指令所指定的值,最后指定的指令优先级最高。

    在以下示例中,将同时使用 domainsearch 指令。nfsmapid 守护进程使用 search 指令后列出的第一个域,即 example.com

    domain company.example.com
    search example.com abc.def.com
  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			"abc.def"

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

_nfsv4idmapdomain.subnet.example.com.    IN    TXT    "abc.def"
_nfsv4idmapdomain.example.com.           IN    TXT    "abc.def"

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


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

检查 NFS 版本 4 域

为网络的 NFS 版本 4 域分配值之前,请检查是否已为网络配置 NFS 版本 4 域。下面的示例提供了标识网络 NFS 版本 4 域的方法。

  • 要通过 DNS TXT RR 标识 NFS 版本 4 域,请使用 nslookup 命令或 dig 命令:

    以下示例显示了 nslookup 命令的样例输出:

    # nslookup -q=txt _nfsv4idmapdomain
    Server:         10.255.255.255
    Address:        10.255.255.255#53
    
    _nfsv4idmapdomain.company.example.com text = "example.com"

    以下示例显示了 dig 命令的样例输出:

    # dig +domain=company.example.com -t TXT _nfsv4idmapdomain
    ...
    ;; QUESTION SECTION:
    ;_nfsv4idmapdomain.company.example.com. IN    TXT
    
    ;; ANSWER SECTION:
    _nfsv4idmapdomain.company.example.com. 21600 IN TXT   "example.com"
    
    ;; AUTHORITY SECTION:
    ...

    有关设置 DNS TXT RR 的信息,请参见nfsmapid 和 DNS TXT 记录

  • 如果网络未设置 NFS 版本 4 DNS TXT RR,请使用以下命令从 DNS 域名中标识 NFS 版本 4 域:

    # egrep domain /etc/resolv.conf
    domain company.example.com
  • 如果未配置 /etc/resolv.conf 文件以为客户机提供 DNS 域名,请使用以下命令从网络 NFS 版本 4 域配置中标识域:

    # cat /system/volatile/nfs4_domain
    example.com
  • 如果正在使用其他名称服务(如 NIS),请使用以下命令标识为网络配置的命名服务的域。

    # domainname
    it.company.example.com

配置 NFS 版本 4 缺省域

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

在 Oracle Solaris 11 发行版中,可以通过键入以下命令设置缺省 NFS 域版本:

# sharectl set -p nfsmapid_domain=example.com nfs 

注 -  由于 DNS 固有的普遍存在性和可伸缩性,使用 DNS TXT 记录配置大型 NFS 版本 4 部署域始终是首选和强烈建议的方法。请参见nfsmapid 和 DNS TXT 记录
在 Solaris 10 发行版中配置 NFS 版本 4 缺省域

在 NFS 版本 4 的初始 Solaris 10 发行版中,如果您的网络包括多个 DNS 域,但只有单个 UID 和 GID 名称空间,则所有客户机都必须对 nfsmapid_domain 使用同一个值。对于使用 DNS 的站点,nfsmapid 通过从您指定给 _nfsv4idmapdomain 的值中获取域名来解决此问题。有关更多信息,请参见nfsmapid 和 DNS TXT 记录。如果您的网络未配置为使用 DNS,则在第一次系统引导期间,操作系统会使用 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 version 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 的值存在于 SMF 系统信息库中,则您提供的域名将覆盖该值。

有关 nfsmapid 的其他信息