В Windows 10 версии 1709, Windows 10 версии 1903, Windows Server версии 1709, Windows Server версии 1903 и более поздних версиях Windows клиент SMB2 больше не поддерживает следующие действия:
- Доступ гостевой учетной записи к удаленному серверу
- Переключение на гостевую учетную запись после ввода недопустимых учетных данных
SMBv2 в этих версиях Windows ведет себя следующим образом:
- Windows 10 Корпоративная и Windows 10 для образовательных учреждений больше не позволяют пользователю подключаться к удаленному общему ресурсу с помощью учетных данных гостя, даже если удаленный сервер запрашивает учетные данные гостя.
- Windows Server 2016 Datacenter и Standard Edition больше не позволяют пользователю подключаться к удаленному общему ресурсу с помощью учетных данных гостя, даже если удаленный сервер запрашивает учетные данные гостей.
- Версии Windows 10 Home и Professional не изменились по сравнению с предыдущим поведением по умолчанию.
С данной проблемой можно столкнуться при использовании старых версий NAS или при доступе к сетевым папкам на старых версиях Windows7/2008 R2 или Windows XP /2003 при использовании анонимного гостевого доступа.
Изменения при использовании протокола SMB связаны с тем, что при доступе под гостевым аккаунтом по протоколу SMBv1/v2 не применяются такие методы защиты трафика, как SMB подписывание и шифрование, что делает вашу сессию уязвимой против MiTM (man-in-the-middle) атак.
Решение со стороны сервера SMB
В данном случае Microsoft рекомендует изменить настройки на удалённом компьютере или NAS устройстве, которое раздаёт сетевые папки. Рекомендуется использовать сетевой пртокол SMBv3, в случае если устройство поддерживает только SMBv2, настроить доступ с аутентификацией.
- NAS устройство — отключите гостевой доступ в настройках устройства
- Samba сервер на Linux — в конфигурационном файле smb.config в разделе [global] необходимо добавить строку
map to guest = never
в разделе с описанием сетевой папки запретить анонимный доступguest ok = no
- Windows — включаем общий доступ к сетевым папкам и принтерам по паролю. В разделе Control Panel\ All Control Panel Items\ Network and Sharing Center\ Advanced sharing settings, для All Networks в разделе Password Protected Sharing (Общий доступ с парольной защитой) изменить значение на «Turn on password protected sharing» (Включить общий доступ с парольной защитой). При этом анонимный (гостевой) доступ к папкам будет отключен. Будет необходимо создать локальных пользователей, предоставить права к сетевым папкам и принтерам и использовать данные учётные записи для подключения к общим папкам.
Решение со стороны клиента SMB (не рекомендуется к использованию, только как временное решение)
Для разрешения гостевого доступа с Вашего компьютера необходимо выполнить следующее: открыть редактор групповых политик gpedit.msc, перейти в следующий раздел Computer Configuration ->Administrative templates -> Network -> Lanman Workstation (Конфигурация компьютера -> Административные шаблоны -> Сеть -> Рабочая станция Lanman), включите политику Enable insecure guest logons (Включить небезопасные гостевые входы)
При использовании Windows 10 Home (в нем нет редактора GPO) для внесения изменений необходимо произвести редактирование реестра:
HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters “AllowInsecureGuestAuth”=dword:1
или через команду:
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters /v AllowInsecureGuestAuth /t reg_dword /d 00000001 /f
Использование протокола старше SMBv2
Клиент SMBv1 по умолчанию отключен начиная с Windows 10 1709. В сетевом окружении данные сетевые папки \сетевые устройства неотображаются и при открытии по UNC пути появляться ошибка 0x80070035. Данная ошибка чётко указывает, что сетевая папка поддерживает только SMBv1 протокол доступа. В этом случае нужно перенастроить удаленное SMB устройство для поддержки как минимум SMBv2 (правильный и безопасный путь).
Если сетевые папки раздает Samba на Linux, вы можете указать минимально поддерживаемую версию SMB в файле smb.conf так:
[global] server min protocol = SMB2_10 client max protocol = SMB3 client min protocol = SMB2_10 encrypt passwords = true restrict anonymous = 2
В Windows 7/Windows Server 2008 R2 вы можете отключить SMBv1 и разрешить SMBv2 так:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
Если ваше устройство (NAS, компьютер под управлением Windows XP, Windows Server 2003), поддерживает только протокол SMBv1, в Windows 10 Вы можете включить отдельный компонент SMB1Protocol-Client. (Крайне не рекомендуется)
Запустите консоль PowerShell и проверьте, что SMB1Protocol-Client отключен (State: Disabled
):
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol-Client
Включите поддержку протокола SMBv1 (потребуется перезагрузка):
Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol-Client
Также вы можете включить/отключить дополнительные компоненты Windows 10 (в том числе SMBv1) из меню optionalfeatures.exe
-> SMB 1.0/CIFS File Sharing Support
В Windows 10 1709 и выше клиент SMBv1 автоматически удаляется, если он не использовался более 15 дней (отвечает компонент SMB 1.0/CIFS Automatic Removal).
Download Windows Speedup Tool to fix errors and make PC run faster
If you want to enable or disable SMBv2 on your Windows 11/10 device then this guide will help you do so. But before that, let’s have a brief introduction about this application; however, if you are already familiar with this application, you can directly go to the section below and use the steps to proceed.
SMB (Server Message Block) is a network file sharing protocol that is actually designed for data sharing across computer devices like files, printers, and more. On the SMB client and in computer networking, there are currently three versions that are supported by Windows 10. These are SMB version 1 (SMBv1), SMB version 2 (SMBv2), and SMB version 3 (SMBv3) – in which SMBv1 is the original implementation of SMB. However, SMB2 is a new version of the old Server Message Block communication protocol and this one is more secure. The latest version of the SMBv3
To enable or disable SMBv2 in Windows 11/10, follow the suggestions below. If you’re going to enable the SMBv2 file transfer protocol on your computer, you first need to check whether your system can install it or not.
To do so, open the Power User Menu using the Windows+X keyboard shortcut
Select Windows PowerShell (Admin) from the menu list.
If the UAC prompt asks you for your approval, click yes and the PowerShell prompt will open.
On the next screen, type the following command and press Enter:
Get-SmbServerConfiguration | Select EnableSMB2Protocol
If the above command runs successfully, it means your computer is able to install SMB2. So proceeding with it, now you can enable this feature by running a simple command.
To do this, type the following command and press Enter to enable it:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Now you will be asked to confirm whether you really want to perform this action. So, press Y and hit Enter. And this will enable the SMB2 protocol on your computer.
Read: How to check SMB version on Windows.
In case the SMB2 protocol is already enabled on your system and now you want to disable it then all you need to do is run the following command in an elevated PowerShell window:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Once you run the above command successfully, press Y and hit Enter.
After performing the above process, the SMB2 protocol is now disabled on your computer.
Disable SMBv2 or SMBv3 for troubleshooting in Windows 11/10
If both SMBv2 and SMBv3 protocols are already enabled, then it would be helpful for troubleshooting if you disable anyone for a while. However, there are also some consequences of disabling these protocols. It can deactivate the following functionality:
- Transparent Failover – clients reconnect without interruption to cluster nodes during maintenance or failover
- Scale Out – concurrent access to shared data on all file cluster nodes
- Multichannel – aggregation of network bandwidth and fault tolerance if multiple paths are available between client and server
- SMB Direct – adds RDMA networking support for very high performance, with low latency and low CPU utilization
- Encryption – Provides end-to-end encryption and protects from eavesdropping on untrustworthy networks
- Directory Leasing – Improves application response times in branch offices through caching
- Performance Optimizations – optimizations for small random read/write I/O.
Related: How to disable SMB1 on Windows.
Digvijay is a Windows enthusiast who likes to write about the Windows OS and software in specific, and technology in general. When he is not working, he would either surf the web or dives into learning tech skills.
Reader Interactions
Server Message Block (SMB) protocol is a network file sharing protocol used in Windows operating system. Using the SMB protocol, an application can access files or other resources at a remote server. In this way, applications can read, create, and update files on the remote server. In Windows 10 Version 1709 or later, SMBv1 protocol is no longer installed by default. Due to security reasons, Microsoft no longer recommends using SMBv1. It is recommended that you use either SMBv2 or above. In this article, we’ll see how to enable/disable SMBv2 in Windows 10?
In case of SMBv1, it was quite easy to enable this protocol via ‘Turn Windows Features On or Off’. However the same is not applicable to SMBv2. You cannot enable or disable this protocol from ‘Turn Windows Features On or Off’. But there is nothing to worry about. You can also enable or disable SMB protocols using some other ways. So here is how you can enable or disable SMBv2 in your Windows 10. Note that by default, SMBv2 is enabled on Windows 10.
Page Contents
How to enable/disable SMBv2 in Windows 10?
Method 1 – Using Windows PowerShell
Follow these steps to enable or disable SMBv2 using PowerShell.
1. Right click Start Button or press + X keys and select Windows PowerShell (Admin).
2. In administrative Windows PowerShell window, paste following and press Enter key:
Get-SmbServerConfiguration | Select EnableSMB2Protocol
If the response of above command is True, then SMBv2 protocol is enabled.
3. To disable SMBv2 protocol on your system, execute following command:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
After this, you’ll need to press Y to confirm this operation. In few seconds, the SMBv2 protocol will be disabled. You can again check the status of protocol using cmdlet mentioned in step 2.
If later you need to enable SMBv2 protocol again, use this command and similarly confirm the operation by pressing Y key:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
So this is how you can manage SMB protocol using PowerShell.
Method 2 – Using Registry
Registry Disclaimer: It is recommended to create a System Restore point first, if you’re not familiar with registry manipulation.
To enable or disable SMBv2 protocol via registry, follow these steps:
1. Run regedit
command to open Registry Editor.
2. In left pane of Registry Editor window, go to:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
3. In right pane of Parameters, set the Value data of SMB2 registry DWORD to 0 to disable SMBv2 protocol. If you want to enable SMBv2 protocol, set its Value data to 1.
4. Close Registry Editor and reboot to make your changes effective.
Check out this video to see how to fix a common issue, when SMBv2 is disabled:
That’s it!
RELATED ARTICLES
Сетевой протокол SMB (Server Message Block) используется для предоставления совместного удаленного доступа к файлам, принтерам и другим устройствам через порт TCP 445. В этой статье мы рассмотрим: какие версии (диалекты) протокола SMB доступны в различных версиях Windows (и как они соотносятся с версиями samba в Linux); как определить версию SMB на вашем компьютере; и как включить/отключить клиент и сервер SMBv1, SMBv2 и SMBv3.
Содержание:
- Версии протокола SMB в Windows
- Как проверить поддерживаемые версии SMB в Windows?
- Вывести используемые версии SMB с помощью Get-SMBConnection
- Об опасности использования SMBv1
- Включение и отключение SMBv1, SMBv2 и SMBv3 в Windows
Версии протокола SMB в Windows
Есть несколько версии протокола SMB (диалектов), которые последовательно появлялись в новых версиях Windows:
Для реализации протокола SMB в Linux/Unix системах используется samba. В скобках мы указали в каких версиях samba поддерживается каждый диалект SMB.
- CIFS — Windows NT 4.0;
- SMB 1.0 — Windows 2000;
- SMB 2.0 — Windows Server 2008 и Windows Vista SP1 (поддерживается в Samba 3.6);
- SMB 2.1 — Windows Server 2008 R2 и Windows 7 (поддерживается в Samba 4.0);
- SMB 3.0 — Windows Server 2012 и Windows 8 (поддерживается в Samba 4.2);
- SMB 3.02 — Windows Server 2012 R2 и Windows 8. 1 (не поддерживается в Samba);
- SMB 3.1.1 – Windows Server 2016 и Windows 10 (не поддерживается в Samba).
Начиная с версии Samba 4.14, по умолчанию используется SMB2.1.
При сетевом взаимодействии по протоколу SMB между клиентом и сервером используется максимальная версия протокола, поддерживаемая одновременно и клиентом, и сервером.
Ниже представлена сводная таблица, по которой можно определить версию протокола SMB, которая выбирается при взаимодействии разных версий Windows:
Операционная система | Win 10, Server 2016 | Windows 8.1, Server 2012 R2 |
Windows 8, Server 2012 |
Windows 7, Server 2008 R2 |
Windows Vista, Server 2008 |
Windows XP, Server 2003 и ниже |
Windows 10 ,
Windows Server 2016 |
SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8.1 , Server 2012 R2 |
SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8 , Server 2012 |
SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 7, Server 2008 R2 |
SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows Vista, Server 2008 |
SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
Windows XP, 2003 и ниже | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
К примеру, при подключении клиентского компьютера с Windows 8.1 к файловому серверу с Windows Server 2016 будет использоваться протокол SMB 3.0.2.
Согласно таблице Windows XP, Windows Server 2003 для доступа к общим файлам и папкам на сервере могут использовать только SMB 1.0, который в новых версиях Windows Server (2012 R2 / 2016) может быть отключен. Таким образом, если в вашей инфраструктуре одновременно используются компьютеры с Windows XP (снятой с поддержки), Windows Server 2003/R2 и сервера с Windows Server 2012 R2/2016/2019, устаревшие клиенты не смогут получить доступ к файлам и папкам на файловом сервере с новой ОС.
Если Windows Server 2016/2012 R2 с отключенным SMB v1.0 используется в качестве контроллера домена, значить клиенты на Windows XP/Server 2003 не смогут получить доступ к каталогам SYSVOL и NETLOGON на контроллерах домена и авторизоваться в AD.
На старых клиентах при попытке подключиться к ресурсу на файловом сервере с отключенным SMB v1 появляется ошибка:
The specified network name is no longer available
Как проверить поддерживаемые версии SMB в Windows?
Рассмотрим, как определить, какие версии протокола SMB поддерживаются на вашем компьютере Windows.
В Windows 10, 8.1 и Windows Server 2019/2016/2012R2 вы можете проверить состояние различных диалектов SMB протокола с помощью PowerShell:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
Данная команда вернула, что протокол SMB1 отключен (
EnableSMB1Protocol=False
), а протоколы SMB2 и SMB3 включены (
EnableSMB1Protocol=True
).
Обратите внимание, что протоколы SMBv3 и SMBv2 тесно связаны между собой. Нельзя отключить или включить отдельно SMBv3 или SMBv2. Они всегда включаются/отключаются только совместно, т.к. используют один стек.
В Windows 7, Vista, Windows Server 2008 R2/2008:
Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}
Если в данной ветке реестра нет параметров с именами SMB1 или SMB2, значить протоколы SMB1 и SMB2 по умолчанию включены.
Также в этих версиях Windows вы можете проверить, какие диалекты SMB разрешено использовать в качестве клиентов с помощью команд:
sc.exe query mrxsmb10
SERVICE_NAME: mrxsmb10 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
sc.exe query mrxsmb20
SERVICE_NAME: mrxsmb20 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
В обоих случаях службы запущены (
STATE=4 Running
). Значит Windows может подключаться как к SMBv1, так и к SMBv2 серверам.
Вывести используемые версии SMB с помощью Get-SMBConnection
Как мы говорили раньше, компьютеры при взаимодействии по протоколу SMB используют максимальную версию, поддерживаемую как клиентом, так и сервером. Для определения версии SMB, используемой для доступа к удаленному компьютеру можно использовать командлет PowerShell
Get-SMBConnection
:
Версия SMB, используемая для подключения к удаленному серверу (ServerName) указана в столбце Dialect.
Можно вывести информацию о версиях SMB, используемых для доступа к конкретному серверу:
Get-SmbConnection -ServerName servername
Если нужно отобразить, используется ли SMB шифрование (появилось в SMB 3.0), выполните:
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
В Linux вывести список SMB подключения и используемые диалекты в samba можно командой:
$ sudo smbstatus
Чтобы на стороне сервера вывести список используемых клиентами версий протокола SMB и количество клиентов, используемых ту или иную версию протокола SMB, выполните команду:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
В нашем примере имеется 825 клиентов, подключенных к серверу с помощью SMB 2.1 (Windows 7/Windows Server 2008 R2) и 12 клиентов SMB 3.02.
С помощью PowerShell можно включить аудит версий SMB, используемых для подключения:
Set-SmbServerConfiguration –AuditSmb1Access $true
События подключения затем можно извлечь из журналов Event Viewer с помощью PowerShell:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
Об опасности использования SMBv1
Последние несколько лет Microsoft из соображений безопасности планомерно отключает устаревший протокол SMB 1.0. Связано это с большим количеством критических уязвимостей в этом протоколе (вспомните историю с эпидемиями вирусов-шифровальщиков wannacrypt и petya, которые использовали уязвимость именно в протоколе SMBv1). Microsoft и другие IT компании настоятельно рекомендуют отказаться от его использования.
Однако отключение SMBv1 может вызвать проблемы с доступом к общий файлам и папкам на новых версиях Windows 10 (Windows Server 2016/2019) с устаревших версий клиентов (Windows XP, Server 2003), сторонних ОС (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, старые версии Linux), различных старых NAS устройствах.
Если в вашей сети не осталось legacy устройств с поддержкой только SMBv1, обязательно отключайте эту версию диалекта в Windows.
В том случае, если в вашей сети остались клиенты с Windows XP, Windows Server 2003 или другие устройства, которые поддерживают только SMBv1, их нужно как можно скорее обновить или тщательно изолировать.
Включение и отключение SMBv1, SMBv2 и SMBv3 в Windows
Рассмотрим способы включения, отключения различных версий SMB в Windows. Мы рассматриваем отдельно включение клиента и сервера SMB (это разные компоненты).
Windows 10, 8.1, Windows Server 2019/2016/2012R2:
Отключить клиент и сервер SMBv1:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Отключить только SMBv1 сервер:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
Включить клиент и сервер SMBv1:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Включить только SMBv1 сервер:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
Отключить сервер SMBv2 и SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Включить сервер SMBv2 и SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Windows 7, Vista, Windows Server 2008 R2/2008:
Отключить SMBv1 сервер:
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" SMB1 -Type DWORD -Value 1 –Force
Отключить 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 сервер:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force
Включить SMBv2 сервер
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
Отключить SMBv2 клиент:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled
Включить SMBv2 клиент:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto
Для отключения сервера SMBv1 на всех компьютерах независимо от версии Windows можно распространить параметр реестра типа REG_DWORD с именем SMB1 и значением 0 (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters)на через GPO.
Для отключения SMBv2 нужно в этой же ветке установить параметр SMB2=0.
Для отключения SMBv1 клиента нужно распространить такой параметр реестра:
- Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
- Name: Start
- Type: REG_DWORD
- Value: 4
При отключении SMB 1.0/CIFS File Sharing Support в Windows вы можете столкнуться с ошибкой “0x80070035, не найден сетевой путь”, ошибкой при доступе к общим папкам, и проблемами обнаружения компьютеров в сетевом окружении. В этом случае вместо служба обозревателя компьютеров (Computer Browser) нужно использовать службы обнаружения (линк).