2011-02-16 22 views
10

Comencé el desarrollo de un servidor SMB para una máquina antigua basada en Z80. Esta máquina ejecuta un sistema operativo similar a MS-DOS muy simple (sin multitareas, sin concepto de usuarios, solo con el sistema de archivos FAT, sin unicode, 8.3 nombres de archivos) y tiene memoria limitada, por lo tanto, mi primera idea es implementar solo el protocolo central SMB . Usaré el transporte TCP.¿Windows 7 realmente es compatible con el protocolo central SMB?

Por el momento, tengo un código de prueba muy corto que solo responde al comando SMB_COM_NEGOTIATE, indicando que el protocolo central ("PC NETWORK PROGRAM 1.0") es el dialecto deseado. Para probarlo, trato de conectarme desde una máquina con Windows 7, abriendo una ventana del explorador y escribiendo "\\<server IP>" en la barra de direcciones. He verificado con Wireshark que el servidor recibe el comando de negociación y envía una respuesta (aparentemente) correcta.

El problema: tan pronto como el cliente de Windows recibe la respuesta, se muestra un genérico "No se puede tener acceso a los recursos" mensaje de error (con el código de error 0x80004005) y luego no pasa nada (no hay mensajes SMB adicionales son enviados) . Esperaba recibir SMB_COM_TREE_CONNECT o un comando similar.

Estaba pensando que tal vez Windows 7 no es compatible con el protocolo central (es muy antiguo y carece de cualquier característica de seguridad), pero ¿por qué enumera el nombre dialecto central en la solicitud de negociación? Tal vez estoy perdiendo un paso? ¿El servidor debe enviar algún paquete adicional después de la respuesta negociada?

El sistema operativo del cliente es Windows 7 Ultimate 64 bits, y aquí están los Wireshark vertederos tanto de la petición y la respuesta en caso de que alguien puede detectar nada mal en el proceso:

La solicitud:

SMB dialect negotiate request

La respuesta:

SMB dialect negotiate response

ACTUALIZACIÓN: Si selecciono el dialecto NT LM 0.12 en lugar del dialecto central, recibo un comando SESSION_SETUP_AND_REQUESTX del cliente. Aparentemente, parece que, de hecho, el protocolo central no es compatible con Windows 7. De todos modos, se apreciará cualquier información adicional.

Respuesta

4

Creo que Windows 7 es compatible con el protocolo central. Se degrada a SMB 1.0 cuando se conecta a servidores más antiguos según here.

En función de los problemas que presenta Windows 7 con la conexión a servidores Samba, creo que el problema con la especificación del protocolo central se debe a la configuración de estación de trabajo LANMAN/cliente en la máquina con Windows 7.

cambios recomendados serían

  • permitiendo LM y NTLM hashes ser como parte de la política de seguridad están Network security: LAN Manager authentication level Send LM & NTLM responses
  • cambiando el valor 【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa \【LmCompatibilityLevel 】 de la clave de registro a 0 según here
  • Agregar los siguientes parámetros a LanmanWorkStation y NetLogon en el registro HKLM\System\CCS\Services\LanmanWorkstation\Parameters DWORD DomainCompatibilityMode = 1 DWORD DNSNameResolutionRequired = 0

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

    posibles cambios en estos valores, tanto a través del registro y a través de la política de seguridad se enumeran here

Estos cambios deben garantizar LanmanWorkstation no usar la seguridad de sesión NTLMv2.

2

Esta información es básicamente la misma que @ Appleman1234 proporcionada (¡gracias!), Solo un poco más fácil de aplicar.

  1. Exporte su configuración de registro actual para que pueda restaurar lo que tenía si fuera necesario. Coloque el siguiente código en un archivo .bat y exportará a su unidad C: las 3 claves de registro que estamos preparando para modificar.
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 
  1. Un-restringir la configuración del Registro necesarias. A continuación se muestra casi exactamente lo que @ Appleman1234 sugirió, excepto que también permite contraseñas de texto sin formato y deshabilita las firmas de seguridad. Coloque el siguiente código en un archivo .reg e impórtelo a su registro.
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 
Cuestiones relacionadas