windows共享文件夾使用中的問題(SMB協議)


關於SMB

windows的文件共享,使用的是SMB協議。SMB協議有v1,v2,v3三個版本,其中v1版本是CIFS協議的擴充。
這幾個協議的報文和內容在網上真的是挺難找到說明的。。

問題

最近在接入一個儀器時碰到了問題,儀器是嵌入式系統(連支持人員都找不不到。。),在網上好不容易找到一個設備說明,可以通過windows共享文件夾將里面的內容導出來。

我在win7系統上開放了共享文件夾,經過一系列guest用戶配置、防火牆配置以后,設備可以成功傳輸上文件了。

初步分析

不過想在公司的虛擬機上直接獲取文件夾,而虛擬機使用的是windows server 2012,這時候問題來了,儀器訪問不了2012系統的共享文件夾,一直報錯。
我做了一些對比

  • win7系統,設備始終能存儲文件;
  • 2012系統,設備始終不能訪問;
  • 2012系統,我使用win7電腦是可以訪問的
  • 用xp系統,也能訪問2012系統的共享文件夾(這個操作是后來做的)

抓包分析

陷入了死胡同,從測試來看,推測可能是win7和win2012系統共享文件夾某些設置有區別。無奈使用wireshark抓取報文嘗試分析猜測。
有如下發現

  • 設備訪問使用的是SMBv1版本協議
  • 設備在寫入win7系統時,先后使用open和write指令,
    • open指令打開文件,按道理系統應該返回一個可寫的權限,但是系統返回的是全0(即只讀)
    • write指令寫入時,可以成功(按我的理解應該是不能成功的)
  • 而設備在寫入win2012系統,使用同樣的指令
    • open同樣返回只讀權限
    • write指令則返回失敗

完全一樣的指令流程,win2012上寫入失敗,而win7成功。
而且從報文信息看,win2012寫入失敗是有一定道理的(權限不足),但是為什么會權限不足,我調整了很久的用戶權限策略,依舊沒有改變。

關於這個情況,個人推測可能是某個時期SMB協議的漏洞,win7存在,而在win2012中修復了。

對比分析

同樣抓包了其他windows系統訪問win2012系統時的報文。
發現訪問時,會使用SMB2.1版本協議,與設備不同。

嘗試禁用SMB2.1,限制系統只能使用SMBv1,發現在SMB連接建立過程中,有特殊的NTLMSSP認證過程,而設備沒有這個步驟。
懷疑權限的授予,可能與這個過程有關。

無論如何,我是不可能改設備的代碼的。。只能從自己身上想辦法。

規避方案

設備改不了,只能從服務器這邊想辦法,搜了很久也沒有看到有人碰到類似問題。
windows的SMB我也debug不了,最后決定自己在服務器上開一個SMB服務,同時把windows自帶的SMB服務關掉(Server這個服務,否則端口會沖突)。
SMB服務使用的是這個實現,我把SMBv2/v3,以及windows authentication選項全部關閉。
測試以后終於能用了

心塞(* ̄︿ ̄)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM