2011-02-16 85 views
10

我已經開始爲舊的基於Z80的機器開發SMB服務器。這臺機器運行一個非常簡單的MS-DOS操作系統(沒有多任務,沒有用戶概念,只有FAT文件系統,沒有unicode,只有8.3文件名),並且內存有限,因此我的第一個想法是隻實現SMB核心協議。我將使用TCP傳輸。Windows 7實際上是否支持SMB核心協議?

至於現在,我只是一個非常短的測試代碼,只是回覆SMB_COM_NEGOTIATE命令,表明核心協議(「PC NETWORK PROGRAM 1.0」)是所需的方言。爲了測試它,我嘗試通過打開瀏覽器窗口並在地址欄中輸入"\\<server IP>"從Windows 7機器進行連接。我用Wireshark驗證過,服務器接收到協商命令併發送(顯然)正確的響應。

問題:只要Windows客戶端接收響應,它顯示了一個通用的「無法訪問資源」錯誤消息(錯誤代碼0x80004005的),然後什麼也沒有發生(沒有進一步的SMB發送消息) 。我期待收到SMB_COM_TREE_CONNECT或類似的命令。我以爲Windows 7可能不支持核心協議(它很舊,它缺少任何安全功能),但是爲什麼它在協商請求中列出核心方言名稱?也許我錯過了一些步驟?協商響應後,服務器是否必須發送任何附加數據包?

客戶端操作系統是Windows 7旗艦版64位,這裏的請求,並在情況下,任何人的響應可以發現什麼不對的過程中雙方的Wireshark的轉儲:

請求:

SMB dialect negotiate request

響應:

SMB dialect negotiate response

更新:如果我選擇NT LM 0.12方言而不是核心方言,則會從客戶端收到SESSION_SETUP_AND_REQUESTX命令。顯然,Windows 7似乎確實不支持核心協議。無論如何,任何額外的信息將不勝感激。

回答

4

我相信Windows 7確實支持核心協議。根據here連接到較舊的服務器時,它會降級到SMB 1.0。

根據Windows 7連接到Samba服務器時遇到的問題,我認爲指定核心協議的問題是由於Windows 7機器上的LANMAN工作站/客戶端設置所致。

修改建議將

  • 使LM和NTLM哈希是作爲安全策略的一部分 Network security: LAN Manager authentication level Send LM & NTLM responses
  • 更改註冊表鍵的【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa \【LmCompatibilityLevel 】值設置爲0按照here
  • 將以下參數添加到註冊表中的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

    雙方通過註冊,並通過安全策略這些設置可能更改上市here

這些變化應確保LanmanWorkstation不使用NTLMv2會話安全。

2

此信息與@ Appleman1234提供的(謝謝!)基本相同,只是更容易申請。

  1. 導出您當前的reg設置,以便您可以在必要時恢復您的設置。將下面的代碼放到.bat文件中,它會將我們準備修改的3個註冊表項導出到您的C:驅動器。
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