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输入:
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
禁用SMBV1
PS:如果要恢复启用,就用$true值。
在Windows Vista或WS 2008以上版本用PowerShell输入:
禁用SMBV2和SMBV3
禁用SMBV1
PS:Value的值,0表示禁用 ,1表示启用
在客户端禁用SMB协议
禁止SMBV1
启用SMBV1
禁用SMBV2和v3
启用SMBV2和v3
分享下小案例
环境:Windows Server 2012 R2文件服务器
客户端:Windows 7+10
问题描述:在服务器上设置共享文件夹,一开始用Win10客户端测试共享文件夹,正常,后续没继续测试Win7是否正常可以访问,后来开放给用户使用,发现Win7用户无论怎么输入账号和密码,都显示拒绝访问,权限正常。
报错图:
导致问题的关键:共享文件夹启动加密数据
在2012中加密数据访问是加密数据来保护数据传输过程的安全性,以防止篡改和窃听攻击,用的加密算法是AES-128-CCM。所以旧版本SMB2是用HMAC-SHA256根本就不支持。
解决方法:
方法1.去除加密数据访问,即可。(如果不考虑加密问题,则去除选择即可)
方法2.如果考虑加密问题,又想让SMBV2版本的客户端能够正常访问,则在服务器上Powershell输入:
RejectUnencryptedAccess参数是如果客户端尝试链接到加密共享文件夹,不支持加密算法的客户端是否被拒绝访问。默认值是True
我们可以将其值配置为false
在powershell 输入:
结果就可以了
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/