SMB 协议
此部分包含以下主题:
有关 SMB 协议的更多信息,请参见以下主题:
有关其他受支持协议的信息,请参见以下各节:
SMB 协议属性
每个共享资源都有特定于协议的属性,这些属性定义了不同的协议针对该共享资源的行为。可以为每个共享资源定义这些属性,也可以从共享资源的项目继承这些属性。下表显示了 SMB 协议属性和可能的值。
表 120 SMB 协议属性
|
|
|
|
Share mode(共享模式)
|
off/on/rw/ro
|
继承
|
|
Resource name(资源名称)
|
resource_name/off/on
|
继承
|
显示 SMB 客户机用来引用此共享资源的名称。资源名称 off 表示没有 SMB 客户机可以访问共享资源,资源名称 on 表示共享资源将随文件系统的名称一起导出。
|
Enable Access-based Enumeration(启用基于访问的枚举)
|
abe
|
继承
|
启用后,执行基于访问的枚举。
|
Enable guest access(启用来宾访问)
|
guestok
|
继承
|
启用后,授予来宾访问权限。默认情况下,该属性处于禁用状态。
|
Is a DFS namespace(是 DFS 名称空间)
|
dfsroot
|
继承
|
指示此共享资源是否置备为单机 DFS 名称空间。
|
Client-side caching policy(客户端高速缓存策略)
|
csc
|
继承
|
指示提供用来支持客户端高速缓存的基于共享资源的配置选项。有关更多信息,请参见 客户端高速缓存属性。
|
伺机锁定策略
|
oplocks
|
继承
|
在共享资源级别启用或禁用伺机锁定。有关更多信息,请参见 伺机锁定属性
|
启用连续可用性
|
cont_avail
|
继承
|
启用后,SMB3 客户机可以为共享资源请求永久文件句柄。这允许设备将与永久文件句柄关联的状态存储在稳定的永久存储中。在发生控制器故障(例如,群集控制器上的接管和故障恢复操作)时,可以透明地恢复状态。连续可用的 SMB 共享资源不能通过 NFS 进行共享,也不能用在打开/关闭次数极高的工作负荷(如主目录)上。建议将连续可用的 SMB 共享资源仅用于那些打开/关闭次数有限的企业应用程序。
|
|
客户端高速缓存属性
"Client-side caching"(客户端高速缓存)属性 (csc) 用于控制共享资源中的文件和程序是否缓存到本地客户机,以供与设备断开连接时脱机使用。
|
|
|
No caching(不进行高速缓存)
|
none
|
对共享资源禁用客户端高速缓存。共享资源中的任何文件或程序均不能脱机使用。此选项阻止客户机上的脱机文件在共享文件夹中生成文件和程序副本。
|
Manual caching(手动进行高速缓存)
|
manual
|
仅指定的文件和程序缓存到本地客户机上,可以脱机使用。这是设置共享文件夹时的默认选项。使用此选项后,默认情况下,文件和程序不能脱机使用。可以控制未连接到网络时要访问的文件和程序。
|
Automatic document caching(文档自动高速缓存)
|
documents
|
可从共享资源访问的所有文件均缓存到本地客户机上,可以脱机使用。本地客户机重新联机时,文件自动重新整合。可从共享资源访问的程序均不可脱机使用,除非之前已经缓存到本地。
|
Automatic program caching(程序自动高速缓存)
|
programs
|
可从共享资源访问的所有程序均缓存到本地客户机上,可以脱机使用。联机时,程序从本地客户机运行。另外,可从共享资源访问的所有文件均缓存到本地客户机上,可以脱机使用。本地客户机重新联机时,文件自动重新整合。
|
|
伺机锁定属性
伺机锁定是一种客户机高速缓存机制,为了便于进行本地高速缓存以降低网络流量并提高性能。属性 (oplocks) 控制服务器在共享资源级别是授予还是拒绝伺机锁定,适用于租用(SMB 2.1 及以上版本)和旧版(SMB 2.0 及以下版本)伺机锁定。
客户机请求对共享资源中的一个文件使用伺机锁定,是授予还是拒绝该请求取决于服务器配置和文件的当前状态。如果客户机尝试访问文件的方式与已对该文件授予的伺机锁定不一致,则会发生冲突。在这种情况下,服务器将先启动一个进程以中断现有伺机锁定,再继续处理冲突的操作。
启用伺机锁定可以改进单个客户机访问共享资源中的文件时的性能。但在有些情况下(例如,多个客户机同时访问同一文件),这可能会造成不必要的开销。因此,可以根据预期的工作负荷模式按共享资源启用或禁用伺机锁定,而不是全局控制。
如果没有在共享资源级别定义伺机锁定属性,则默认为在服务级别设置的全局伺机锁定属性。有关更多信息,请参见SMB 服务属性部分中的“启用伺机锁定”。
|
|
|
|
Enabled(已启用)
|
enabled
|
为共享资源启用伺机锁定
|
set sharesmb="myshare,oplocks=enabled,abe=off,dfsroot=false"
|
Disabled(已禁用)
|
disabled
|
为共享资源禁用伺机锁定
|
set sharesmb="myshare,oplocks=disabled,abe=off,dfsroot=false"
|
<empty>
|
--
|
既未启用也未禁用伺机锁定属性。未设置共享资源级别属性时,使用全局伺机锁定属性。
|
set sharesmb="myshare,abe=off,dfsroot=false"
|
|
SMB 协议共享模式的例外情况
通过设置客户机特定的共享模式或例外情况,可为客户机或客户机集合定义全局共享模式的例外情况。要限制特定客户机的访问,请将全局共享模式设置为 none,然后向逐级缩小的组授予逐级增大的访问权限。例如,可以创建一个共享资源,将其全局共享模式设置为 none(无),即拒绝所有客户机的访问;然后向一部分客户机授予只读访问权限。您还可以更进一步向更少的一部分客户机授予读写访问权限,最终,只有受信任的主机可能具有读写访问权限。
表 121 客户机类型
|
|
|
|
Host(FQDN) or Netgroup(主机 (FQDN) 或网络组)
|
none
|
其 IP 地址解析为指定的全限定名称的单个客户机,或包含客户机的 IP 地址解析为的全限定名称的网络组。
|
caji.sf.example.com
|
DNS Domain(DNS 域)
|
.
|
其 IP 地址解析为以此后缀结尾的全限定名称的所有客户机。
|
sf.example.com
|
IPv4 子网
|
@
|
其 IP 地址位于指定的 IPv4 子网(以 CIDR 表示法表示)内的所有客户机。
|
192.0.2.254/22
|
IPv6 子网
|
@
|
其 IP 地址位于指定的 IPv6 子网(以 CIDR 表示法表示)内的所有客户机。
|
2001:db8:410:d43::/64
|
|
对于每个客户机或客户机集合,请指定客户机对共享资源有只读还是读-写权限。
管理网络组-网络组可用于控制对 SMB 导出的访问权限。但是,网络组的管理可能很复杂。请考虑改用 IP 子网规则或 DNS 域规则。
如果使用网络组,则将通过 NIS 或 LDAP 解析它们,具体取决于启用了哪个服务。如果使用 LDAP,则每个网络组必须位于默认位置 ou=Netgroup,(Base DN),并且必须使用标准模式。
网络组条目的用户名组件通常不会影响 SMB;只有主机名有意义。网络组中包含的主机名必须是规范化的,如果使用 DNS 进行解析,则必须是全限定的。也就是说,SMB 子系统将尝试验证请求方客户机的 IP 地址是否可以解析为与指定的 FQDN,或与指定的网络组之一的某个成员匹配的规范化主机名。该匹配必须为严格匹配,包括所有域组件;否则,将不会匹配该例外并将尝试下一个例外。有关主机名解析的更多信息,请参见 DNS。
从 2013.1.0 软件发行版开始,UNIX 客户机用户最多可以属于 1024 个组,而性能丝毫不减。在以前的发行版中,每个 UNIX 客户机用户最多可以属于 16 个组。
SMB 共享模式以及例外情况选项
在 CLI 中,所有 SMB 共享模式和例外都是通过针对 sharesmb 属性使用单个选项字符串指定的。此字符串是逗号分隔的值列表。作为针对 BUI 介绍的全局共享模式的对应体,它应以 ro、rw、on 或 off 之一开头。
表 122 SMB 共享模式值(BUI 和 CLI)
|
|
|
|
无
|
off
|
禁用共享模式。
|
sharesmb=off
|
on
|
共享资源名称是数据集名称,且可供读写或仅可供读取(如果定义了 rw 或 ro SMB 例外情况)。对于所有其他客户机,将禁用共享模式。
|
sharesmb="on,ro=sf.example.com"
|
<resource name>
|
共享资源名称是资源名称,且可供读写或仅可供读取(如果定义了 rw 或 ro SMB 例外情况)。对于所有其他客户机,将禁用共享模式。
|
sharesmb="myshare,ro=sf.example.com"
|
Read/write(读取/写入)
|
on
|
共享资源名称是数据集名称,并且如果没有 SMB 例外情况,则可供所有客户机读写。
|
sharesmb=on
|
rw
|
共享资源名称是数据集名称,且可供所有客户机读写(为其定义了 ro 例外情况的客户机除外)。
|
sharesmb=rw 或 sharesmb="rw,ro=sf.example.com"
|
<resource name>
|
共享资源名称是资源名称,并且如果没有 SMB 例外情况,则可供所有客户机读写。
|
sharesmb=myshare
|
<resource name>,rw
|
共享资源名称是资源名称,且可供所有客户机读写(为其定义了 ro 例外情况的客户机除外)。可以定义也可以不定义 SMB 例外情况。
|
sharesmb="myshare,rw" 或 sharesmb="myshare,rw,ro=sf.example.com"
|
Read only(只读)
|
ro
|
共享资源名称是数据集名称,且仅可供所有主机读取(为其定义了 rw 例外情况的主机除外)。
|
sharesmb="ro,rw=sf.example.com"
|
<resource name>,ro
|
共享资源名称是资源名称,且仅可供所有客户机读取(为其定义了 rw 例外情况的客户机除外)。可以定义也可以不定义 SMB 例外情况。
|
sharesmb="myshare,ro"或sharesmb="myshare,ro,rw=sf.example.com"
|
|
以下示例将所有客户机的共享模式设置为只读。
set sharesmb=ro
可以通过附加 "option=collection" 格式的文本(其中,"option" 是 ro 或 rw)来指定更多的 SMB 例外情况。您不能对 SMB 例外情况授予 root 用户访问权限。客户机集合是由表 114 中的前缀字符,以及一个 DNS 主机名/域名或 CIDR 网络号指定的。
例如,要授予对 sf.example.com 域中的所有主机的读写权限,您可以使用:
set sharesmb="ro,rw=.sf.example.com"
此示例向 IP 地址为 2001:db8:410:d43::/64 和 192.0.2.254/22 的客户机授予只读访问权限:
set sharesmb="on,ro=@[2001:db8:410:d43::/64]:@192.0.2.254/22"
在任何可以使用单个全限定主机名的位置中都可以使用网络组名称。例如,您可以通过以下方式允许对 "engineering" 网络组进行读写访问:
set sharesmb="ro,rw=engineering"
共享资源级 ACL
共享资源级访问控制列表 (Access Control List, ACL) 与共享资源中文件或目录的 ACL 结合使用来确定该文件的有效权限。默认情况下,此 ACL 向每个人授予完全控制权限。此 ACL 在文件上的 ACL 之上又提供了一个访问控制层,以便实现更加复杂的访问控制配置。只有在通过配置 SMB 资源名称导出文件系统后,才可设置此属性。如果未通过 SMB 协议导出文件系统,则设置共享资源级 ACL 不起任何作用。
启用基于访问权限的枚举后,客户机可以看到它们无法打开的文件的目录条目。只有当客户机无权访问该文件时才会过滤掉目录条目。例如,如果客户机尝试打开某个文件进行读/写访问,但 ACL 只授予了读取访问权限,则打开请求将失败,不过条目列表中仍会包括该文件。
有关 ACL 的更多信息,请参见文件系统的访问控制列表。