Поддерживает ли Windows 7 основной протокол SMB? - PullRequest
10 голосов
/ 16 февраля 2011

Я начал разработку SMB-сервера для старой машины на базе Z80.Эта машина работает с очень простой MS-DOS-подобной операционной системой (без многозадачности, без понятия пользователей, только с файловой системой FAT, без юникода, только с именами файлов 8.3) и имеет ограниченную память, поэтому моя первая идея - реализовать только протокол ядра SMB,Я буду использовать транспорт TCP.

На данный момент у меня есть только очень короткий тестовый код, который просто отвечает на команду SMB_COM_NEGOTIATE, указывая, что основной протокол ("PC NETWORK PROGRAM 1.0") является желаемым диалектом.Чтобы проверить это, я пытаюсь подключиться с компьютера с Windows 7, открыв окно обозревателя и введя "\\<server IP>" в адресной строке.Я проверил с помощью Wireshark, что сервер получает команду согласования и отправляет (очевидно) правильный ответ.

Проблема: , как только клиент Windows получает ответ, он показывает общийСообщение об ошибке «Не удается получить доступ к ресурсу» (с кодом ошибки 0x80004005), после чего ничего не происходит (дальнейшие сообщения SMB не отправляются).Я ожидал получить SMB_COM_TREE_CONNECT или подобную команду.

Я думал, что, возможно, Windows 7 не поддерживает основной протокол (он очень старый и вообще не имеет каких-либо функций безопасности), но потом, почему это так?перечислить имя основного диалекта в запросе на переговоры?Может быть, я пропускаю какой-то шаг?Должен ли сервер отправлять какой-либо дополнительный пакет после согласованного ответа?

Клиентская ОС - это Windows 7 Ultimate, 64-битная версия, и вот дампы Wireshark как запроса, так и ответа на случай, если кто-то может обнаружить что-то неправильное впроцесс:

Запрос:

SMB dialect negotiate request

Ответ:

SMB dialect negotiate response

ОБНОВЛЕНИЕ: Если я выберу диалект NT LM 0.12 вместо основного диалекта, я получу команду SESSION_SETUP_AND_REQUESTX от клиента.Таким образом, очевидно, что действительно, основной протокол не поддерживается Windows 7. В любом случае, любая дополнительная информация будет оценена.

Ответы [ 2 ]

4 голосов
/ 03 марта 2012

Я считаю, что Windows 7 поддерживает Core Protocol. Он понижается до SMB 1.0 при подключении к старым серверам согласно здесь .

Исходя из проблем, возникающих в Windows 7 при подключении к серверам Samba, я считаю, что проблема с указанием основного протокола связана с настройками рабочей станции / клиента LANMAN на компьютере с Windows 7.

Рекомендуемые изменения:

  • Включение хешей LM и NTLM в состав политики безопасности Network security: LAN Manager authentication level Send LM & NTLM responses
  • изменив значение 【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa \【LmCompatibilityLevel 】 раздела реестра на 0 согласно здесь
  • Добавление следующих параметров для LanmanWorkStation и NetLogon в реестре HKLM\System\CCS\Services\LanmanWorkstation\Parameters DWORD DomainCompatibilityMode = 1 DWORD DNSNameResolutionRequired = 0

    HKLM\System\CCS\Services\Netlogon\Parameters DWORD RequireSignOnSeal = 0 DWORD RequireStrongKey = 0

    Возможные изменения этих настроек как через реестр, так и через политику безопасности перечислены здесь

Эти изменения должны гарантировать, что LanmanWorkstation не использует безопасность сеанса NTLMv2.

2 голосов
/ 16 января 2015

Эта информация в основном совпадает с предоставленной @ Appleman1234 (спасибо!), Но ее немного проще применить.

  1. Экспортируйте текущие настройки reg, чтобы при необходимости вы могли восстановить то, что имелиПоместите следующий код в файл .bat, и он будет экспортировать на ваш диск C: 3 ключа reg, которые мы собираемся изменить.
reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.Control.Lsa.reg
reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.services.LanmanWorkstation.Parameters.reg
reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.services.Netlogon.Parameters.reg
Не ограничивать необходимые параметры реестра.Ниже почти точно то, что предложил @ Appleman1234, за исключением того, что он также позволяет вводить обычные текстовые пароли и отключать защитные подписи.Поместите следующий код в файл .reg и импортируйте его в свой реестр.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"lmcompatibilitylevel"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]
"EnablePlainTextPassword"=dword:00000001
"EnableSecuritySignature"=dword:00000000
"RequireSecuritySignature"=dword:00000000
"DomainCompatibilityMode"=dword:00000001
"DNSNameResolutionRequired"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
"RequireSignOrSeal"=dword:00000000
"RequireStrongKey"=dword:00000000
"RequireSignOnSeal"=dword:00000000
...