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

退出打印视图

更新时间: 2014 年 7 月
 
 

share 命令

使用 share 命令可使 NFS 服务器上的本地文件系统可供挂载。另外,还可以使用 share 命令显示当前在系统上共享的文件系统列表。NFS 服务器必须处于运行状态才能使用 share 命令。

可以共享的对象包括任意目录树。但是,每个文件系统分层结构会受到文件系统所在的磁盘分片或磁盘分区的限制。

如果某个文件系统是一个已共享的更大文件系统的一部分,则不能共享此文件系统。例如,如果 /usr/usr/local 位于同一磁盘分片上,则可以共享 /usr/usr/local。但是,如果这两个目录需要使用不同的共享选项进行共享,则必须将 /usr/local 移到单独的磁盘分片上。

通过读写共享的文件系统的文件句柄,可以获取对只读共享的文件系统的访问权限。但是,这两个文件系统必须位于同一磁盘分片上。要形成更安全的情况,请将那些需要读写的文件系统置于单独的分区或磁盘分片中,使其与需要以只读方式共享的文件系统分隔开来。


注 -  有关取消共享文件系统之后再重新共享此系统时 NFS 版本 4 如何运行的信息,请参阅在 NFS 版本 4 中取消共享和重新共享文件系统

share 选项

可与 –o 标志一起使用的一些选项如下所示:

rw|ro

所有客户机都将以读写方式或只读方式共享 pathname 文件系统。

rw=access-list

只有列出的客户机以读写方式共享文件系统。其他所有请求均被拒绝。有关更多信息,请参见使用 share 命令设置访问列表。可以使用此选项来覆盖 –ro 选项。

特定于 NFS 的 share 选项

可用于 NFS 文件系统的选项包括:

aclok

使用此选项,可以将支持 NFS 版本 2 协议的 NFS 服务器配置为对 NFS 版本 2 客户机进行访问控制。如果不使用此选项,则会为所有客户机提供最低访问权限。如果使用此选项,则客户机具有最高访问权限。例如,在使用 –aclok 选项进行共享的文件系统上,如果某个用户具有读取权限,则所有用户均具有读取权限。但是,如果不使用此选项,本应具有访问权限的客户机也会被拒绝访问。确定是允许较多访问还是较少访问取决于已设置的安全系统。有关访问控制列表 (access control list, ACL) 的更多信息,请参见在 Oracle Solaris 11.2 中确保文件的安全和确认文件完整性 中的使用访问控制列表保护 UFS 文件


注 -  要使用 ACL,请确保客户机和服务器运行的软件支持 NFS 版本 3 协议和 NFS_ACL 协议。如果该软件仅支持 NFS 版本 3 协议,则客户机可获取正确的访问权限,但不能处理 ACL。如果该软件支持 NFS_ACL 协议,则客户机可获取正确的访问权限,并且可处理 ACL。
anon=uid

可以使用 anon 来选择未验证的用户的用户 ID。如果将 anon 设置为 -1,则服务器会拒绝未验证的用户进行访问。由于通过设置 anon=0 授予 root 访问权限允许未验证的用户具有 root 访问权限,因此请改用 root 选项。

index=filename

用户访问 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
log=tag

此选项可指定 /etc/nfs/nfslog.conf 中的标记,该文件中包含文件系统的 NFS 服务器日志记录配置信息。必须选择此选项才能启用 NFS 服务器日志记录。

nosuid

此选项表示应忽略所有启用 setuidsetgid 模式的尝试。NFS 客户机不能创建启用了 setuidsetgid 位的文件。

public

–public 选项已添加到 share 命令中,以启用 WebNFS 浏览功能。使用此选项在一台服务器上只能共享一个文件系统。

–root=access-list

服务器会向列表中的主机提供 root 访问权限。缺省情况下,服务器不会向任何远程主机提供 root 访问权限。如果选定的安全模式不是 –sec=sys,则只能在列表中包括客户机主机名。有关更多信息,请参见使用 share 命令设置访问列表


Caution

注意  -  授予其他主机 root 访问权限会涉及许多安全问题。请慎用 –root= 选项。


–root=client-name

client-name 值用于 AUTH_SYS 验证,以便对照 exportfs(1B) 提供的地址列表来检查客户机的 IP 地址。如果找到匹配项,则可以向共享的文件系统提供 root 访问权限。

–root=hostname

对于安全 NFS 模式(如 AUTH_SYSRPCSEC_GSS),服务器会对照访问列表派生的基于主机的主体名称列表来检查客户机的主体名称。客户机主体名称的通用语法为 root@hostname。对于 Kerberos V,语法为 root/hostname.fully.qualified @REALM。使用 hostname 值时,访问列表中的客户机必须具有某个主体名称的凭证。对于 Kerberos V,客户机必须具有其 root/ hostname.fully.qualified@REALM 主体名称的有效密钥表项。有关更多信息,请参见在 Oracle Solaris 11.2 中管理 Kerberos 和其他验证服务 中的配置 Kerberos 客户机

–sec=mode[:mode]

该选项可设置获取对文件系统的访问权限所需的安全模式。缺省情况下,安全模式为 UNIX 验证。可以指定多种模式,但是每个命令行一次只能使用一种安全模式。每个 –sec= 选项都应用于所有后续的 –rw–ro–rw=–ro=–root=–window= 选项,直至再遇到 –sec= 为止。使用 –sec=none 可将所有用户映射为用户 nobody

window=value

value 选择 NFS 服务器上某个凭证的最长生命周期(以秒为单位)。缺省值为 30000 秒,即 8.3 小时。

使用 share 命令设置访问列表

share 命令提供的访问列表可以包含要拒绝访问的域名、子网号或项,以及标准 –ro=–rw=–root= 选项。由于不需要更改名称空间或维护较长的客户机列表,这些扩展简化了单个服务器上的文件访问控制。

以下示例将为大多数系统提供只读访问权限,但是允许 roselilac 进行读写访问:

# share -F nfs -o ro,rw=rose:lilac /usr/src

以下示例将为 eng 网络组中的任何主机分配只读访问权限。专门为客户机 rose 提供了读写访问权限。

# share -F nfs -o ro=eng,rw=rose /usr/src

注 -  不能同时指定不带参数的 rwro。如果未指定读写选项,则缺省情况下会为所有客户机指定读写访问权限。

要使多台客户机共享一个文件系统,必须在同一行中键入所有选项。如果针对同一对象多次调用 share 命令,将仅应用运行的最后一个命令。以下示例将为三台客户机系统启用读写访问权限,但是仅为 rosetulip 提供以 root 身份访问文件系统的权限。

# share -F nfs -o rw=rose:lilac:tulip,root=rose:tulip /usr/src

共享使用多种验证机制的文件系统时,请确保在正确的安全模式之后包含 –ro–ro=–rw–rw=–root–window 选项。在本示例中,会为名为 eng 的网络组中的所有主机选择 UNIX 验证。这些主机只能以只读模式挂载文件系统。如果主机 tuliplilac 使用 Diffie-Hellman 验证,则它们能以读写模式挂载文件系统。使用这些选项时,即使主机 tuliplilac 不使用 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 的主机之外的任何主机进行访问。