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
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,会停用以下功能:
请求复合 - 允许将多个SMB 2请求作为单个网络请求发送
更大的读取和写入 - 更好地使用更快的网络
缓存文件夹和文件属性 - 客户端保留文件夹和文件的本地副本
持久句柄 - 如果存在临时断开连接,则允许连接透明地重新连接到服务器
改进的消息签名 - HMAC SHA-256将MD5替换为散列算法
提高文件共享的可扩展性 - 每个服务器的用户数,共享数和打开文件数大大增加
支持符号链接
客户机操作锁租赁模式 - 限制客户机和服务器之间传输的数据,提高高延迟网络的性能并增加SMB服务器可扩展性
大MTU支持 - 完全使用10Gigabye(GB)以太网
提高能源效率 - 向服务器打开文件的客户端可以睡眠
在Windows 8 和WS 2012 禁用SMBv3.会停用以下功能:
透明故障转移 - 客户端在维护或故障转移期间重新连接而不中断群集节点
Scale Out - 对所有文件集群节点上的共享数据的并发访问
多通道 - 如果客户端和服务器之间有多条路径,则可以聚合网络带宽和容错
SMB直接 - 增加了RDMA网络支持,以实现非常高的性能,低延迟和低CPU利用率
加密 - 提供端到端加密,防止在不可信的网络上被窃听
目录租赁 - 通过缓存改进分支机构的应用程序响应时间
性能优化 - 小型随机读/写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用户无论怎么输入账号和密码,都显示拒绝访问,权限正常。
报错图:
导致问题的关键:共享文件夹启动加密数据
在2012中加密数据访问是加密数据来保护数据传输过程的安全性,以防止篡改和窃听攻击,用的加密算法是AES-128-CCM。所以旧版本SMB2是用HMAC-SHA256根本就不支持。
解决方法:
方法1.去除加密数据访问,即可。(如果不考虑加密问题,则去除选择即可)
方法2.如果考虑加密问题,又想让SMBV2版本的客户端能够正常访问,则在服务器上Powershell输入:
Get-SmbServerConfiguration
RejectUnencryptedAccess参数是如果客户端尝试链接到加密共享文件夹,不支持加密算法的客户端是否被拒绝访问。默认值是True
我们可以将其值配置为false
在powershell 输入:
Set-SmbServerConfiguration -RejectUnencryptedAccess $False
结果就可以了
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/
本文出自 “gs_hao” 博客,谢绝转载!
Windows Server之浅谈SMB以及SMB小案例分享
原文地址:http://gshao.blog.51cto.com/3512873/1893867