จะตรวจสอบ เปิด หรือปิดใช้งานเวอร์ชันโปรโตคอล 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 System | Windows 10, Win Server 2016 | Windows 8.1, Win Server 2012 R2 | Windows 8,Server 2012 | Windows 7,Server 2008 R2 | Windows Vista,Server 2008 | Windows XP, Server 2003 and earlier |
| Windows 10, Windows Server 2016 | SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 8.1, Server 2012 R2 | SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 8, Server 2012 | SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 7, Server 2008 R2 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows Vista, Server 2008 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
| Windows XP, 2003 and earlier | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 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 mrxsmb10SERVICE_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 : 0x0sc.exe query mrxsmb20SERVICE_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 $trueWindows 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 (ลิงก์)





