系统管理指南:网络服务

share 命令

使用此命令,可以挂载 NFS 服务器上的本地文件系统。另外,还可以使用 share 命令显示当前在系统上共享的文件系统列表。NFS 服务器必须处于运行状态才能使用 share 命令。如果 /etc/dfs/dfstab 中存在一项,则在系统引导过程中会自动启动 NFS 服务器软件。如果 NFS 服务器软件未运行,则此命令不会报告错误,因此必须验证此软件是否正在运行。

可以共享的对象包括任意目录树。但是,每个文件系统分层结构会受到文件系统所在的磁盘分片或磁盘分区的限制。例如,共享根 (/) 文件系统将不会同时共享 /usr,除非这些目录位于相同的磁盘分区或磁盘分片上。标准安装将根目录放在分片 0 上,将 /usr 放在分片 6 上。另外,共享 /usr 时将不会共享在 /usr 的子目录上挂载的其他任何本地磁盘分区。

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

通过读写共享的文件系统的文件句柄,可以获取对只读共享的文件系统的访问。但是,这两个文件系统必须位于同一磁盘分片上。您可以创建更为安全的环境。请将那些需要读写的文件系统放在单独的分区或磁盘分片上,使其与需要只读共享的文件系统分隔开来。


注 –

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


特定于非文件系统的 share 选项

以下是可以用于 -o 标志的一些选项。

rw|ro

pathname 文件系统对所有客户机而言是读写共享还是只读共享。

rw=accesslist

文件系统仅对列出的客户机是读写共享。其他所有请求均被拒绝。从 Solaris 2.6 发行版开始,accesslist 中定义的客户机列表已进行了扩展。有关更多信息,请参见使用 share 命令设置访问列表。可以使用此选项来覆盖 -ro 选项。

特定于 NFS 的 share 选项

以下是可以用于 NFS 文件系统的选项。

aclok

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


注 –

要使用 ACL,请确保客户机和服务器运行的软件支持 NFS 版本 3 协议和 NFS_ACL 协议。如果该软件仅支持 NFS 版本 3 协议,则客户机可获取正确的访问权限,但不能处理 ACL。如果该软件支持 NFS_ACL 协议,则客户机可获取正确的访问权限,并且可处理 ACL。从 Solaris 2.5 发行版开始,Solaris 系统同时支持这两种协议。


anon=uid

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

index=filename

用户访问 NFS URL 时,-index=filename 选项会强制装入 HTML 文件,而不是显示目录列表。如果在 HTTP URL 正在访问的目录中找到 index.html 文件,则此选项会模拟当前浏览器的操作。此选项相当于为 httpd 设置 DirectoryIndex 选项。例如,假定 dfstab 文件项与以下内容类似:


share -F nfs -o ro,public,index=index.html /export/web

这些 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=accesslist

服务器会为列表中的主机提供超级用户访问权限。缺省情况下,服务器不会为任何远程主机提供超级用户访问权限。如果选定的安全模式不是 -sec=sys,则只能在 accesslist 中包括客户机主机名。从 Solaris 2.6 发行版开始,accesslist 中定义的客户机列表已进行了扩展。有关更多信息,请参见使用 share 命令设置访问列表


注意 – 注意 –

授予其他主机超级用户访问权限会涉及广泛的安全问题。请慎用 -root= 选项。


root=client_name

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

root=host_name

对于安全 NFS 模式(如 AUTH_SYS 或 RPCSEC_GSS),服务器会对照访问列表派生的基于主机的主体名称列表来检查客户机的主体名称。客户机主体名称的通用语法为 root@hostname。对于 Kerberos V,语法为 root/hostname.fully.qualified@REALM。使用 host_name 值时,访问列表中的客户机必须具有某个主体名称的凭证。对于 Kerberos V,客户机必须具有其 root/hostname.fully.qualified@REALM 主体名称的有效密钥表项。有关更多信息,请参见《系统管理指南:安全性服务》中的“配置 Kerberos 客户机”

sec=mode[:mode]

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

window=value

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

使用 share 命令设置访问列表

在 Solaris 2.6 之前的发行版中,用于 share 命令的 -ro=-rw=-root= 选项的 accesslist 仅限于主机名或网络组名的列表。从 Solaris 2.6 发行版开始,访问列表还可以包括域名、子网号或拒绝访问的项。由于不必更改名称空间或维护较长的客户机列表,这些扩展简化了单一服务器上的文件访问控制。

以下命令为大多数系统提供只读访问权限,但是允许 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 或 NIS+ 名称空间匹配的所有主机相匹配。 从这些名称服务中返回的结果中不包括域名。“.eng.example.com” 项与所有使用 DNS 进行名称空间解析的主机相匹配。DNS 始终返回全限定主机名。因此,如果使用了 DNS 和其他名称空间的组合,则需要较长的项。

通过在实际网络号或网络名的前面添加 “@”,可以在访问列表中使用子网号。此字符可将网络名与网络组或全限定主机名区分开来。必须在 /etc/networks、NIS 或 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 的主机之外的任何主机进行访问。