SMB由来

        服务器消息区块(英语:Server Message Block,缩写为SMB,服务器消息区块),又称网络文件共享系统(英语:Common Internet File System,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功能是使网络上的机器能够计算机文件、打印机、串行端口和通讯等资源。它也提供经认证的进程间通信机能。它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network。

 

SMB版本

OS

Windows 10

WS 2016

Windows 8.1

WS 2012 R2

Windows 8

WS 2012

Windows 7

WS 2008 R2

Windows Vista

WS 2008

Previous

versions

Windows 10

WS 2016

SMB 3.1.1

SMB 3.0.2

SMB 3.0

SMB 2.1

SMB 2.0

SMB 1.0

Windows 8.1

WS 2012 R2

SMB 3.0.2

SMB 3.0.2

SMB 3.0

SMB 2.1

SMB 2.0

SMB 1.0

Windows 8

WS 2012

SMB 3.0

SMB 3.0

SMB 3.0

SMB 2.1


SMB 2.0

SMB 1.0

Windows 7

WS 2008 R2

SMB 2.1


SMB 2.1

SMB 2.1

SMB 2.1

SMB 2.0

SMB 1.0

Windows Vista

WS 2008

SMB 2.0

SMB 2.0

SMB 2.0

SMB 2.0

SMB 2.0

SMB 1.0

Previous

versions

SMB 1.0

SMB 1.0

SMB 1.0

SMB 1.0

SMB 1.0

SMB 1.0

备注:早期的Windows 10 和WS 2016 TP的SMB版本是3.1

 

如何查看SMB版本

在Windows 8或WS 2012 以上,用带管理员的Powershell输入:

Get-SmbConnection

clip_p_w_picpath001[4]

SMB各个版本介绍可以参考:https://en.wikipedia.org/wiki/Server_Message_Block#SMB_3.1.1

SMB 3.1.1 新特性可以参考:https://blogs.technet.microsoft.com/josebda/2015/05/05/whats-new-in-smb-3-1-1-in-the-windows-server-2016-technical-preview-2/

其中比较关注的是SMB 3.1.1 加密算法默认为AES-128-GCM,之前SMB 3.0是用AES-128-CCM。

 

关于客户端SMB升级问题

目前查找的资料显示,客户端自带的SMB协议没办法通过升级来提高SMB版本,也就是意味着在企业规划文件服务器的时候,需要考虑到企业客户端SMB版本,对应的SMB Server,如上面SMB版本列表。

 

关于SMB Server关闭低版本SMB支持操作:

在Windows 7和WS 008 R2,禁用SMBV2,会停用以下功能:

  1. 请求复合 - 允许将多个SMB 2请求作为单个网络请求发送

  2. 更大的读取和写入 - 更好地使用更快的网络

  3. 缓存文件夹和文件属性 - 客户端保留文件夹和文件的本地副本

  4. 持久句柄 - 如果存在临时断开连接,则允许连接透明地重新连接到服务器

  5. 改进的消息签名 - HMAC SHA-256将MD5替换为散列算法

  6. 提高文件共享的可扩展性 - 每个服务器的用户数,共享数和打开文件数大大增加

  7. 支持符号链接

  8. 客户机操作锁租赁模式 - 限制客户机和服务器之间传输的数据,提高高延迟网络的性能并增加SMB服务器可扩展性

  9. 大MTU支持 - 完全使用10Gigabye(GB)以太网

  10. 提高能源效率 - 向服务器打开文件的客户端可以睡眠

在Windows 8 和WS 2012 禁用SMBv3.会停用以下功能:

  1. 透明故障转移 - 客户端在维护或故障转移期间重新连接而不中断群集节点

  2. Scale Out - 对所有文件集群节点上的共享数据的并发访问

  3. 多通道 - 如果客户端和服务器之间有多条路径,则可以聚合网络带宽和容错

  4. SMB直接 - 增加了RDMA网络支持,以实现非常高的性能,低延迟和低CPU利用率

  5. 加密 - 提供端到端加密,防止在不可信的网络上被窃听

  6. 目录租赁 - 通过缓存改进分支机构的应用程序响应时间

  7. 性能优化 - 小型随机读/写I / O的优化

在windows 8或WS 2012以上版本可以用PowerShell输入:

禁用SMBV2和SMBV3

Set-SmbServerConfiguration -EnableSMB2Protocol $false

禁用SMBV1

Set-SmbServerConfiguration -EnableSMB1Protocol $false

PS:如果要恢复启用,就用$true值。

 

在Windows Vista或WS 2008以上版本用PowerShell输入:

禁用SMBV2和SMBV3

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 -Force

禁用SMBV1

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force

PS:Value的值,0表示禁用 ,1表示启用

 

在客户端禁用SMB协议

禁止SMBV1

sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled

启用SMBV1

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto

禁用SMBV2和v3

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled

启用SMBV2和v3

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto

 

分享下小案例

环境:Windows Server 2012 R2文件服务器

客户端:Windows 7+10

问题描述:在服务器上设置共享文件夹,一开始用Win10客户端测试共享文件夹,正常,后续没继续测试Win7是否正常可以访问,后来开放给用户使用,发现Win7用户无论怎么输入账号和密码,都显示拒绝访问,权限正常。

报错图

clip_p_w_picpath001[6]

clip_p_w_picpath001[8]

导致问题的关键:共享文件夹启动加密数据

clip_p_w_picpath001[10]

在2012中加密数据访问是加密数据来保护数据传输过程的安全性,以防止篡改和窃听***,用的加密算法是AES-128-CCM。所以旧版本SMB2是用HMAC-SHA256根本就不支持。

解决方法

方法1.去除加密数据访问,即可。(如果不考虑加密问题,则去除选择即可)

方法2.如果考虑加密问题,又想让SMBV2版本的客户端能够正常访问,则在服务器上Powershell输入:

Get-SmbServerConfiguration

clip_p_w_picpath002[4]

RejectUnencryptedAccess参数是如果客户端尝试链接到加密共享文件夹,不支持加密算法的客户端是否被拒绝访问。默认值是True

我们可以将其值配置为false

在powershell 输入:

Set-SmbServerConfiguration -RejectUnencryptedAccess $False

clip_p_w_picpath003[4]

结果就可以了

clip_p_w_picpath004[4]

PS:方法2的命令是对整个SMBServer配置的,此方法一般是作为过渡用的,如果客户端版本都是SMB 3.1,建议把RejectUnencryptedAccess配置为True

如果对SMB 感兴趣可以参考:https://blogs.technet.microsoft.com/josebda/2015/04/30/smb3-networking-links-for-windows-server-2012-r2/