使用 share 命令可使 NFS 服务器上的本地文件系统可供挂载。另外,还可以使用 share 命令显示当前在系统上共享的文件系统列表。NFS 服务器必须处于运行状态才能使用 share 命令。
可以共享的对象包括任意目录树。但是,每个文件系统分层结构会受到文件系统所在的磁盘分片或磁盘分区的限制。
如果某个文件系统是一个已共享的更大文件系统的一部分,则不能共享此文件系统。例如,如果 /usr 和 /usr/local 位于同一磁盘分片上,则可以共享 /usr 或 /usr/local。但是,如果这两个目录需要使用不同的共享选项进行共享,则必须将 /usr/local 移到单独的磁盘分片上。
通过读写共享的文件系统的文件句柄,可以获取对只读共享的文件系统的访问权限。但是,这两个文件系统必须位于同一磁盘分片上。要形成更安全的情况,请将那些需要读写的文件系统置于单独的分区或磁盘分片中,使其与需要以只读方式共享的文件系统分隔开来。
只有列出的客户机以读写方式共享文件系统。其他所有请求均被拒绝。有关更多信息,请参见使用 share 命令设置访问列表。可以使用此选项来覆盖 –ro 选项。
可用于 NFS 文件系统的选项包括:
使用此选项,可以将支持 NFS 版本 2 协议的 NFS 服务器配置为对 NFS 版本 2 客户机进行访问控制。如果不使用此选项,则会为所有客户机提供最低访问权限。如果使用此选项,则客户机具有最高访问权限。例如,在使用 –aclok 选项进行共享的文件系统上,如果某个用户具有读取权限,则所有用户均具有读取权限。但是,如果不使用此选项,本应具有访问权限的客户机也会被拒绝访问。确定是允许较多访问还是较少访问取决于已设置的安全系统。有关访问控制列表 (access control list, ACL) 的更多信息,请参见在 Oracle Solaris 11.2 中确保文件的安全和确认文件完整性 中的使用访问控制列表保护 UFS 文件。
可以使用 anon 来选择未验证的用户的用户 ID。如果将 anon 设置为 -1,则服务器会拒绝未验证的用户进行访问。由于通过设置 anon=0 授予 root 访问权限允许未验证的用户具有 root 访问权限,因此请改用 root 选项。
用户访问 NFS URL 时,–index= filename 选项会强制装入 HTML 文件,而不是显示目录列表。如果在 HTTP URL 正在访问的目录中找到 index.html 文件,则此选项会模拟当前浏览器的操作。此选项相当于为 httpd 设置 DirectoryIndex 选项。例如,假定 share 命令报告以下信息:
export_web /export/web nfs sec=sys,public,index=index.html,ro
这些 URL 随后会显示相同的信息:
nfs://server/dir nfs://server/dir/index.html nfs://server//export/web/dir nfs://server//export/web/dir/index.html http://server/dir http://server/dir/index.html
此选项可指定 /etc/nfs/nfslog.conf 中的标记,该文件中包含文件系统的 NFS 服务器日志记录配置信息。必须选择此选项才能启用 NFS 服务器日志记录。
此选项表示应忽略所有启用 setuid 或 setgid 模式的尝试。NFS 客户机不能创建启用了 setuid 或 setgid 位的文件。
–public 选项已添加到 share 命令中,以启用 WebNFS 浏览功能。使用此选项在一台服务器上只能共享一个文件系统。
服务器会向列表中的主机提供 root 访问权限。缺省情况下,服务器不会向任何远程主机提供 root 访问权限。如果选定的安全模式不是 –sec=sys,则只能在列表中包括客户机主机名。有关更多信息,请参见使用 share 命令设置访问列表。
client-name 值用于 AUTH_SYS 验证,以便对照 exportfs(1B) 提供的地址列表来检查客户机的 IP 地址。如果找到匹配项,则可以向共享的文件系统提供 root 访问权限。
对于安全 NFS 模式(如 AUTH_SYS 或 RPCSEC_GSS),服务器会对照访问列表派生的基于主机的主体名称列表来检查客户机的主体名称。客户机主体名称的通用语法为 root@hostname。对于 Kerberos V,语法为 root/hostname.fully.qualified @REALM。使用 hostname 值时,访问列表中的客户机必须具有某个主体名称的凭证。对于 Kerberos V,客户机必须具有其 root/ hostname.fully.qualified@REALM 主体名称的有效密钥表项。有关更多信息,请参见在 Oracle Solaris 11.2 中管理 Kerberos 和其他验证服务 中的配置 Kerberos 客户机。
该选项可设置获取对文件系统的访问权限所需的安全模式。缺省情况下,安全模式为 UNIX 验证。可以指定多种模式,但是每个命令行一次只能使用一种安全模式。每个 –sec= 选项都应用于所有后续的 –rw、–ro、–rw=、–ro=、–root= 和 –window= 选项,直至再遇到 –sec= 为止。使用 –sec=none 可将所有用户映射为用户 nobody。
value 选择 NFS 服务器上某个凭证的最长生命周期(以秒为单位)。缺省值为 30000 秒,即 8.3 小时。
随 share 命令提供的访问列表可以包含要拒绝访问的域名、子网号或项,以及标准 –ro=、–rw= 或 –root= 选项。由于不需要更改名称空间或维护较长的客户机列表,这些扩展简化了单个服务器上的文件访问控制。
以下示例将为大多数系统提供只读访问权限,但是允许 rose 和 lilac 进行读写访问:
# share -F nfs -o ro,rw=rose:lilac /usr/src
以下示例将为 eng 网络组中的任何主机分配只读访问权限。专门为客户机 rose 提供了读写访问权限。
# share -F nfs -o ro=eng,rw=rose /usr/src
要使多台客户机共享一个文件系统,必须在同一行中键入所有选项。如果针对同一对象多次调用 share 命令,将仅应用运行的最后一个命令。以下示例将为三台客户机系统启用读写访问权限,但是仅为 rose 和 tulip 提供以 root 身份访问文件系统的权限。
# share -F nfs -o rw=rose:lilac:tulip,root=rose:tulip /usr/src
共享使用多种验证机制的文件系统时,请确保在正确的安全模式之后包含 –ro、–ro=、–rw、–rw=、–root 和 –window 选项。在本示例中,会为名为 eng 的网络组中的所有主机选择 UNIX 验证。这些主机只能以只读模式挂载文件系统。如果主机 tulip 和 lilac 使用 Diffie-Hellman 验证,则它们能以读写模式挂载文件系统。使用这些选项时,即使主机 tulip 和 lilac 不使用 DH 验证,也能以只读模式挂载文件系统。但是,必须在 eng 网络组中列出这些主机名。
# share -F nfs -o sec=dh,rw=tulip:lilac,sec=sys,ro=eng /usr/src
尽管 UNIX 验证是缺省安全模式,但如果使用 –sec 选项,也不会包含 UNIX 验证。因此,如果要将 UNIX 验证与其他任何验证机制一起使用,就必须包含 –sec=sys 选项。
通过在实际域名的前面添加一个点,可以在访问列表中使用 DNS 域名。点后面的字符串是域名,而不是全限定主机名。以下示例将允许挂载访问 eng.example.com 域中的所有主机:
# share -F nfs -o ro=.:.eng.example.com /export/share/man
在本示例中,单个点与通过 NIS 名称空间匹配的所有主机相匹配。从这些名称服务返回的结果中不包括域名。.eng.example.com 项与所有使用 DNS 进行名称空间解析的主机相匹配。由于 DNS 始终返回全限定主机名,因此如果使用了 DNS 和其他名称空间的组合,则需要较长的项。
通过在实际网络号或网络名的前面添加 at (@) 符号,可以在访问列表中使用子网号。此字符可将网络名与网络组或全限定主机名区分开来。必须在 /etc/networks 或 NIS 名称空间中标识子网。如果 192.168 子网已标识为 eng 网络,则以下各项具有相同效果:
# share -F nfs -o ro=@eng /export/share/man # share -F nfs -o ro=@192.168 /export/share/man # share -F nfs -o ro=@192.168.0.0 /export/share/man
最后两项表明无需包括完整的网络地址。
如果网络前缀不是按字节对齐的,即与无类别域间路由 (Classless Inter-Domain Routing, CIDR) 一样,则可以在命令行中显式指定掩码长度。掩码长度可通过在网络名或网络号后添加一条斜杠和地址前缀中的有效位数进行定义。例如:
# share -f nfs -o ro=@eng/17 /export/share/man # share -F nfs -o ro=@192.168.0/17 /export/share/man
在上述示例中,"/17" 表示地址中的前 17 位将用作掩码。有关 CIDR 的其他信息,请参见 RFC 1519。
另外,还可以通过在项的前面放置 "-" 来选择拒绝访问。请注意,各项是从左到右读取的。因此,必须将拒绝访问项放置在应用了拒绝访问项的项之前:
# share -F nfs -o ro=-rose:.eng.example.com /export/share/man
本示例将允许对 eng.example.com 域中除了名为 rose 的主机之外的任何主机进行访问。