ค้นหาเว็บไซต์

จะตรวจสอบ เปิด หรือปิดใช้งานเวอร์ชันโปรโตคอล SMB บน Windows ได้อย่างไร


โปรโตคอลเครือข่าย Server Message Block (SMB) ใช้เพื่อแชร์และเข้าถึงโฟลเดอร์ ไฟล์ เครื่องพิมพ์ และอุปกรณ์อื่นๆ ผ่านเครือข่าย (พอร์ต TCP 445) ในบทความนี้ เราจะดูว่าเวอร์ชันใด (ภาษาถิ่น) ของ SMB ที่พร้อมใช้งานในเวอร์ชันต่างๆ ของ Windows (และความเกี่ยวข้องกับเวอร์ชัน samba บน Linux) วิธีตรวจสอบเวอร์ชัน SMB ที่ใช้งานบนคอมพิวเตอร์ของคุณ และวิธีเปิดหรือปิดใช้งานภาษาถิ่น SMBv1, SMBv2 และ SMBv3

รุ่นโปรโตคอล SMB ใน Windows

มีโปรโตคอล SMB (ภาษาถิ่น) หลายเวอร์ชันที่ปรากฏใน Windows เวอร์ชันใหม่ (และแซมบ้า) อย่างสม่ำเสมอ :

  • 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 ใช้เพื่อใช้งานโปรโตคอล SMB ใน Linux/Unix Samba 4.14 และใหม่กว่าใช้ SMB 2.1 เป็นค่าเริ่มต้น

ในการสื่อสารเครือข่าย SMB ไคลเอ็นต์และเซิร์ฟเวอร์ใช้เวอร์ชันโปรโตคอล SMB สูงสุดที่ทั้งไคลเอ็นต์และเซิร์ฟเวอร์รองรับ

ตารางสรุปความเข้ากันได้ของเวอร์ชัน SMB มีลักษณะดังนี้ เมื่อใช้ตารางนี้ คุณสามารถกำหนดเวอร์ชันของโปรโตคอล SMB ที่เลือกไว้เมื่อ Windows รุ่นต่างๆ โต้ตอบกัน:

Operating SystemWindows 10, Win Server 2016Windows 8.1, Win Server 2012 R2Windows 8,Server 2012Windows 7,Server 2008 R2Windows Vista,Server 2008Windows XP, Server 2003 and earlier
Windows 10, Windows Server 2016SMB 3.1.1SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8.1, Server 2012 R2SMB 3.02SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8, Server 2012SMB 3.0SMB 3.0SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 7, Server 2008 R2SMB 2.1SMB 2.1SMB 2.1SMB 2.1SMB 2.0SMB 1.0
Windows Vista, Server 2008SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 1.0
Windows XP, 2003 and earlierSMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0

ตัวอย่างเช่น ถ้าคอมพิวเตอร์ไคลเอ็นต์ที่ใช้ Windows 8.1 เชื่อมต่อกับไฟล์เซิร์ฟเวอร์ด้วย Windows Server 2016 ก็จะใช้โปรโตคอล SMB 3.0.2

ตามตาราง Windows XP และ Windows Server 2003 สามารถใช้ SMB 1.0 เท่านั้นในการเข้าถึงโฟลเดอร์และไฟล์ที่ใช้ร่วมกัน SMBv1 ถูกปิดใช้งานใน Windows Server เวอร์ชันใหม่กว่า (2012 R2/2016) ดังนั้น หากคุณยังคงใช้อุปกรณ์ Windows XP และ Windows Server 2003 บนเครือข่าย อุปกรณ์เหล่านั้นจะไม่สามารถเข้าถึงโฟลเดอร์ที่ใช้ร่วมกันบนไฟล์เซิร์ฟเวอร์ที่ใช้ Windows Server 2016

หากใช้ Windows Server 2019/2016 ที่ปิดใช้งาน SMB v1.0 เป็นตัวควบคุมโดเมน ไคลเอนต์ Windows XP/Server 2003 จะไม่สามารถเข้าถึงโฟลเดอร์ SYSVOL และ NETLOGON บนตัวควบคุมโดเมนและตรวจสอบสิทธิ์ด้วย AD

คุณอาจได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามเชื่อมต่อกับโฟลเดอร์ที่ใช้ร่วมกันบนเซิร์ฟเวอร์ไฟล์โดยปิดใช้งาน SMBv1:

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 = True

) และเปิดใช้งานโปรโตคอล SMB2 และ SMB3 (

EnableSMB1Protocol = False

).

โปรดทราบว่าโปรโตคอล 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

ในคีย์รีจิสทรีนี้ โปรโตคอล SMBv1 และ SMBv2 จะถูกเปิดใช้งานตามค่าเริ่มต้น

นอกจากนี้ ในเวอร์ชัน 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 Dialects ที่ใช้ด้วย Get-SMBConnection

เมื่อสื่อสารผ่าน SMB คอมพิวเตอร์จะใช้เวอร์ชัน SMB สูงสุดที่ไคลเอนต์และเซิร์ฟเวอร์รองรับ เดอะ

Get-SMBConnection

สามารถใช้ PowerShell cmdlet เพื่อตรวจสอบเวอร์ชัน SMB ที่ใช้ในการเข้าถึงคอมพิวเตอร์ระยะไกลได้:

เวอร์ชัน SMB ที่ใช้ในการเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล (ชื่อเซิร์ฟเวอร์) แสดงอยู่ในคอลัมน์ ภาษาถิ่น

คุณสามารถแสดงข้อมูลเกี่ยวกับเวอร์ชัน SMB ที่ใช้ในการเข้าถึงเซิร์ฟเวอร์เฉพาะได้:

Get-SmbConnection -ServerName srvfs01

หากคุณต้องการแสดงว่ามีการใช้การเข้ารหัส SMB หรือไม่ (แนะนำใน SMB 3.0):

Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName

บน Linux คุณสามารถแสดงรายการการเชื่อมต่อ SMB และใช้ภาษาถิ่นในแซมบ้าได้โดยใช้คำสั่ง:

$ sudo smbstatus

ที่ฝั่งเซิร์ฟเวอร์ Windows SMB คุณสามารถแสดงรายการเวอร์ชันของโปรโตคอล SMB ที่ไคลเอ็นต์กำลังใช้อยู่ เรียกใช้คำสั่ง:

Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique

คุณสามารถใช้ PowerShell เพื่อเปิดใช้งานการตรวจสอบเวอร์ชัน SMB ที่ใช้สำหรับการเชื่อมต่อ:

Set-SmbServerConfiguration -AuditSmb1Access $true

เหตุการณ์การเชื่อมต่อ SMB สามารถส่งออกจากบันทึกตัวแสดงเหตุการณ์:

Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit

หยุดใช้โปรโตคอล SMBv1 ที่ไม่ปลอดภัย

ในช่วงไม่กี่ปีที่ผ่านมา Microsoft ได้ปิดใช้งานโปรโตคอล SMB 1.0 แบบดั้งเดิมในผลิตภัณฑ์ทั้งหมดอย่างเป็นระบบด้วยเหตุผลด้านความปลอดภัย นี่เป็นเพราะช่องโหว่ที่สำคัญจำนวนมากในโปรโตคอลนี้ (โปรดจำไว้ว่าเหตุการณ์ที่เกิดขึ้นกับ Wannacrypt และ Petya Ransomware ซึ่งใช้ประโยชน์จากช่องโหว่ในโปรโตคอล SMBv1) Microsoft และบริษัทไอทีอื่นๆ ขอแนะนำอย่างยิ่งให้คุณหยุดใช้ SMBv1 ในเครือข่ายของคุณ

อย่างไรก็ตาม การปิดใช้งาน SMBv1 อาจทำให้เกิดปัญหาในการเข้าถึงไฟล์และโฟลเดอร์ที่ใช้ร่วมกันบน Windows 10 เวอร์ชันใหม่กว่า (Windows Server 2016/2019) จากไคลเอนต์รุ่นเก่า (Windows XP, Windows Server 2003), ระบบปฏิบัติการของบริษัทอื่น (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, Linux distros เก่า), อุปกรณ์ NAS เก่า

หากไม่มีอุปกรณ์รุ่นเก่าเหลืออยู่ในเครือข่ายของคุณที่รองรับเฉพาะ SMBv1 อย่าลืมปิดใช้งานภาษาถิ่น SMB นี้ใน Windows

หากคุณมีไคลเอ็นต์ที่ใช้ Windows XP, Windows Server 2003 หรืออุปกรณ์อื่นๆ ที่รองรับเฉพาะ SMBv1 ควรอัปเดตหรือแยกไคลเอ็นต์ออก

วิธีเปิดใช้งานและปิดใช้งาน SMBv1, SMBv2 และ SMBv3 บน Windows

มาดูวิธีเปิดใช้งานและปิดใช้งาน SMB เวอร์ชันต่างๆ บน Windows เราจะครอบคลุมการจัดการไคลเอนต์และเซิร์ฟเวอร์ SMB (เป็นส่วนประกอบ Windows ที่แตกต่างกัน)

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

เรียนรู้เพิ่มเติมเกี่ยวกับโปรโตคอล SMBv1 บน Windows 10 และ Windows Server 2016/2019

ปิดใช้งานเซิร์ฟเวอร์ 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 บนคอมพิวเตอร์ที่เข้าร่วมโดเมนได้โดยการปรับใช้พารามิเตอร์รีจิสทรีต่อไปนี้ผ่าน GPO:

  • คีย์: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

  • ชื่อ: SMB1

  • ประเภท: REG_DWORD

  • ค่า: 0

ตั้งค่าพารามิเตอร์รีจิสทรี

SMB2=0

เพื่อปิดใช้งานเซิร์ฟเวอร์ SMBv2

หากต้องการปิดใช้งานไคลเอนต์ SMBv1 คุณต้องเผยแพร่การตั้งค่ารีจิสทรีต่อไปนี้:

  • คีย์: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10

  • ชื่อ: สตาร์ท

  • ประเภท: REG_DWORD

  • มูลค่า: 4

เมื่อปิดใช้งานการสนับสนุนการแชร์ไฟล์ SMB 1.0/CIFS บน Windows คุณอาจพบข้อผิดพลาด 0x80070035 ไม่พบเส้นทางเครือข่าย ได้รับข้อผิดพลาดเมื่อเข้าถึงโฟลเดอร์ SMB ที่ใช้ร่วมกัน และปัญหาเกี่ยวกับการค้นพบเครือข่าย ในกรณีนี้ คุณต้องใช้บริการ Discovery แทนบริการ Computer Browser (ลิงก์)

บทความที่เกี่ยวข้อง