share_nfs(1M)
名称
share_nfs - 使 NFS 共享可供远程系统挂载
用法概要
share -F nfs [-a [-o specific_options] [-d description]
pathname [sharename] | [-A]]
zfs set share.nfs=on | off filesystem|share
zfs share -o share.nfs=on | off specific_options
filesystem|filesystem%share
描述
share 实用程序用于定义和发布 NFS 共享,这使本地文件系统可供远程系统挂载。如果 nfsd(1M) 和 mountd(1M) 守护进程尚未运行,该命令会将其启动。
可使用 share 命令创建和发布 ZFS 文件系统共享,但此操作被视为旧操作。有关设置 share.nfs 属性或使用 zfs share 命令创建并发布 NFS 共享的信息,请参见 zfs(1M)。
选项
支持以下选项:
- –F nfs
指定 NFS 文件共享协议。
- –a
发布所有已定义的共享。
- –o specific_options
以逗号分隔的关键字和属性-值-断言列表指定 specific_options,以供 NFS 协议进行解释。缺省情况下,以读写访问权限向所有客户机发布共享,除非使用特定选项覆盖缺省访问权限。specific_options 可以是以下项的任意组合:
- aclok
允许 NFS 服务器对 NFS 版本 2 客户机进行访问控制。在服务器上设置了 aclok 时,将为所有客户机提供最高访问权限。例如,设置 aclok 后,如果有人具有读取权限,则每个用户均具有读取权限。如果未设置 aclok,则为所有客户机提供最低访问权限。
- anon=uid
将 uid 设置为未知用户的有效用户 ID。缺省情况下,为未知用户提供的有效用户 ID 是 UID_NOBODY。如果 uid 设置为 −1,则拒绝访问。
- charset
假定所有客户机使用指定的字符集(请参见以下说明中的列表),对于服务器,文件和路径名将转换为 UTF-8 格式。
- charset=access_list
其中,charset 为以下项之一:euc-cn、euc-jp、euc-jpms、euc-kr、euc-tw、iso8859-1、iso8859-2、iso8859-5、iso8859-6、iso8859-7、iso8859-8、iso8859-9、iso8859-13、iso8859-15、koi8-r。
如果客户机与上述某一属性的 access_list 匹配,将假定客户机使用该字符集,对于服务器,文件和路径名将转换为 UTF-8 格式。
- index=file
当 NFS URL 引用包含 file 的目录时,装入此文件而不是装入包含此文件的目录的列表。
- log[=tag]
为指定的文件系统启用 NFS 服务器日志记录。该可选标记确定相关日志文件的位置。tag 在 /etc/nfs/nfslog.conf 中定义。如果未指定任何 tag,将使用与 /etc/nfs/nfslog.conf 中的全局 tag 关联的缺省值。仅为 NFS 版本 2 和版本 3 请求提供了 NFS 服务器日志记录支持。
- noaclfab
允许 NFS 服务器不将编制的 ACL 返回给 NFS 客户机。NFS 服务器的缺省行为是编制 ACL。如果设置了 noaclfab,则 NFS 服务器不会编制 ACL,如果底层文件系统不支持 POSIX Draft ACL,则适合选择此项。
- none
不允许所有客户机进行访问。ro 或 rw 选项可以覆盖 none。
- none=access_list
不允许与访问列表匹配的所有客户机进行访问。访问列表是一个星号 (*) 时例外,在这种情况下,ro 或 rw 可以覆盖 none。
- nosub
禁止客户机挂载共享目录的子目录。例如,如果使用 nosub 选项在服务器 fooey 上共享 /export,则 NFS 客户机无法执行以下命令:
mount -F nfs fooey:/export/home/mnt
NFS 版本 4 不使用 MOUNT 协议。nosub 选项仅适用于 NFS 版本 2 和版本 3 请求。
- nosuid
缺省情况下,允许客户机在启用了 setuid 或 setgid 模式的共享文件系统上创建文件。指定 nosuid 将导致服务器文件系统忽略任何启用 setuid 或 setgid 模式位的尝试且不给出提示。
- public
将公共文件句柄的位置从 root (/) 移动到启用了 WebNFS 的浏览器和客户机的导出目录。此选项不启用 WebNFS 服务。WebNFS 始终处于启用状态。每个服务器上只允许一个文件系统使用此选项。可以与 public 选项一起使用任何其他选项(包括 –ro=list 和 –rw=list 选项)。
- ro
以只读访问权限向所有客户机发布共享。
- ro=access_list
以只读访问权限向 access_list 中列出的客户机发布共享;覆盖指定客户机的 rw 子选项。请参见下文的 access_list。
- root
所有主机中的 root 用户都具有 root 访问权限。
- root=access_list
只有 access_list 中指定的主机中的 root 用户具有 root 访问权限。请参见下文的 access_list。缺省情况下,没有主机具有 root 访问权限,因此,root 用户会映射到一个匿名用户 ID(请参见上述的 anon=uid 选项)。如果共享文件系统使用的是 UNIX 验证 (AUTH_SYS),则可以使用网络组。
- root_mapping=uid
对于具有 root 访问权限的客户机,将其 root UID 映射到指定的用户 ID。
- rw
以读写访问权限向所有客户机发布共享。
- rw=access_list
以读写访问权限向 access_list 中列出的客户机发布共享;覆盖指定客户机的 ro 子选项。请参见下文的 access_list。
- sec=mode[:mode]. . .
使用指定的一个或多个安全模式发布共享。sec=mode 选项中的 mode 必须是客户机支持的节点名。如果未指定 sec=,使用的缺省安全模式为 AUTH_SYS。可在命令行中指定多个 sec= 选项,尽管一次只能显示一个模式。在 nfssec(5) 中定义了安全模式。
每个 sec= 选项指定了在下一个 sec= 选项前面提供的任何后续 window=, rw, ro, rw=, ro= 和 root= 选项所应用的模式。附加的每个 sec= 会重置安全模式上下文,因此,可为附加的模式提供其他的 window=、rw、ro、rw=、ro= 和 root= 选项。
- sec=none
如果客户机使用 AUTH_NONE 且指定了 sec=none 选项,或者,如果客户机使用的安全模式不是共享文件系统时所用的那个安全模式,则每个 NFS 请求的凭证将被视为未通过验证。有关如何处理未通过验证的请求的说明,请参见 anon=uid 选项。
- secure
此选项已过时,建议使用 sec=dh 选项。
- window=value
以 sec=dh 发布共享时,该项设置 NFS 服务器所允许的 RPC 请求凭证(位于验证头中)的最大生命周期(秒)。如果凭证超过所允许的生命周期,NFS 服务器会拒绝请求。缺省值为 30000 秒(8.3 小时)。
- –d description
提供用于描述要共享的文件系统的注释。
- –A
显示所有定义的共享。
access_list
access_list 参数可以是字符串 “*”(表示所有主机),也可以是由冒号分隔的列表,其组件可以是任意数量的以下项:
- hostname
主机的名称。在 nsswitch hosts 条目中为 DNS 或 LDAP 命名配置了服务器时,任何主机名都必须表示为全限定的 DNS 或 LDAP 名称。指定的主机名必须是此主机的规范名称,并且必须匹配反向查找 NFS 客户机的传入 IP 地址时返回的主机名。
- netgroup
一个网络组包含多个主机名。在 nsswitch hosts 条目中为 DNS 或 LDAP 命名配置了服务器时,网络组中的任何主机名都必须表示为全限定的 DNS 或 LDAP 名称。
- domainname.suffix
要使用域成员关系,服务器必须使用 DNS 或 LDAP 将主机名解析为 IP 地址;即,/etc/nsswitch.conf 中的 hosts 条目必须在 nis 之前指定 dns 或 ldap,因为只有 DNS 和 LDAP 会返回主机的完整域名。其他名称服务(如 NIS)不能用于解析服务器上的主机名,因为将 IP 地址映射到主机名时,它们不返回域信息。例如,
NIS 172.16.45.9 --> "myhost"
和:
DNS or LDAP 172.16.45.9 -->
"myhost.mydomain.mycompany.com"
域名后缀通过前缀句点与主机名和网络组区分开来。例如,
rw=.mydomain.mycompany.com
单个句点可用于匹配不带后缀的主机名。例如,
rw=.
匹配 mydomain,但不匹配 mydomain.mycompany.com。此功能可用于匹配通过 NIS(而不是 DNS 和 LDAP)解析的主机。
- network
-
网络或子网组件位于 at 符号 (@) 之后。可以是名称、IPv4 或 IPv6 地址。如果是名称,将通过 getnetbyname(3C) 将其转换为地址。例如,
=@mynet
等效于:
=@172.16 或 =@172.16.0.0
对于 IPv4 地址,网络前缀采用八位字节对齐的网络掩码,由地址低位部分中的第零个八位字节直至(包括)高位八位字节确定。如果您希望指定单个 IP 地址,请参见下文。如果网络前缀未按字节对齐,语法允许在斜杠 (/) 分隔符后显式指定掩码长度。例如,
=@theothernet/17 或 =@172.16.132/22
其中,掩码是对应 IP 地址中最左侧的连续有效数位。
对于 IPv6 地址,地址必须用一对方括号括起来。否则,出现的第一个 IPv6 分号会被解释为地址之间的分隔符。网络掩码长度在斜杠 (/) 分隔符后显式指定。例如,
=@[fe80::/10]
其中,掩码是对应 IP 网络地址中最左侧的连续有效数位。
指定单个 IP 地址时,也使用上述 @ 表示法,但不指定网络掩码。例如:
=@172.16.132.14
例如,可以通过以下方式指定多个单独的 IP 地址:
root=@172.16.132.20:@[fe80::209:3dff:fe00:c074]
减号 (−) 前缀表示拒绝 access_list 中的该组件访问。系统将按顺序搜索该列表,直至找到允许或拒绝访问的匹配项,或直至到达该列表的末尾。例如,如果主机 terra 位于 engineering 网络组中,则
rw=-terra:engineering
拒绝 terra 访问,但
rw=engineering:-terra
允许 terra 访问。
操作数
支持下列操作数:
- pathname
要共享的文件系统的路径名。
示例
示例 1 定义并发布 NFS 共享
以下示例显示了如何使用传统的 share 命令定义并发布 /export/manuals 文件系统共享。
# share -F NFS /export/manuals
以下示例显示了如何使用 zfs set 命令共享 ZFS 文件系统。
# zfs set share.nfs=on tank/data
以下示例显示了如何使用 share.nfs.public 选项创建指定的 NFS 共享 tank/public%pubshare,而不是在 ZFS 文件系统 tank/public 上设置该选项,因为该属性不可继承。
# zfs create -o mountpoint=/pub tank/public
# zfs share -o share.nfs=on -o share.nfs.public=on tank/public%pubshare
退出状态
将返回以下退出值:
- 0
成功完成。
- >0
出现错误。
文件
- /etc/dfs/fstypes
系统类型列表,缺省为 NFS
- /etc/dfs/sharetab
共享文件系统的系统记录
- /etc/nfs/nfslogtab
日志文件系统的系统记录
- /etc/nfs/nfslog.conf
日志记录配置文件
属性
有关下列属性的说明,请参见 attributes(5):
|
|
可用性
|
service/file-system/nfs
|
|
另请参见
mount(1M)、mountd(1M)、nfsd(1M)、nfslogd(1M)、share(1M)、unshare(1M)、zfs_share(1M)、getnetbyname(3SOCKET)、nfslog.conf(4)、netgroup(4)、attributes(5)、nfssec(5)
附注
使用 share 命令创建和发布的 NFS 共享是永久性的,除非将其取消共享。发布 NFS 共享由以下 SMF 服务管理:
$ svcs | grep share
online Mar_07 svc:/network/shares:default
如果要共享的文件系统是指向有效路径名的符号链接,则将共享该规范路径(符号链接所指的路径)。例如,如果 /export/foo 是 /export/bar 的符号链接 (/export/foo -> /export/bar),则以下 share 命令将导致 /export/bar 成为共享路径名(而不是 /export/foo)。
# share –F nfs /export/foo
对 server:/export/foo 执行 NFS 挂载将导致实际挂载 server:/export/bar。
mountd(1M) 进程允许处理包含符号链接的路径名。这允许处理本身未通过 share_nfs 显式共享的路径。例如,/export/foo 可能是一个引用已专门共享的 /export/bar 的符号链接。当客户机挂载 /export/foo 时,mountd 处理将跟踪该符号链接并以 /export/bar 作为响应。NFS 版本 4 协议不使用 mountd 处理,客户机使用 /export/foo 所产生的效果与它在 NFS 版本 2 和版本 3 中执行此操作的效果不同,客户机尝试挂载 /export/foo 时将收到一个错误。