Giao thức mạng Server Message Block (SMB) dùng để chia sẻ và truy cập thư mục, file, máy in và thiết bị khác qua mạng (cổng TCP 445). Bài này xem xét các phiên bản (dialects) SMB có sẵn trong các phiên bản Windows khác nhau (và mối liên quan với phiên bản samba trên Linux); cách kiểm tra phiên bản SMB đang dùng trên máy; và cách bật/tắt các dialect SMBv1, SMBv2, SMBv3.
Mục lục
- Các phiên bản giao thức SMB trong Windows
- Cách kiểm tra phiên bản SMB trên Windows
- Kiểm tra dialect SMB đang dùng với Get-SMBConnection
- Ngừng sử dụng giao thức SMBv1 không an toàn
- Cách bật/tắt SMBv1, SMBv2, SMBv3 trên Windows
Các phiên bản giao thức SMB trong Windows
Có vài phiên bản giao thức SMB (dialects) xuất hiện liên tiếp trong các phiên bản Windows mới (và samba):
- CIFS – Windows NT 4.0
- SMB 1.0 – Windows 2000
- SMB 2.0 – Windows Server 2008 và Windows Vista SP1 (hỗ trợ trong Samba 3.6)
- SMB 2.1 – Windows Server 2008 R2 và Windows 7 (Samba 4.0)
- SMB 3.0 – Windows Server 2012 và Windows 8 (Samba 4.2)
- SMB 3.02 – Windows Server 2012 R2 và Windows 8.1 (không hỗ trợ trong Samba)
- SMB 3.1.1 – Windows Server 2016 và Windows 10 (không hỗ trợ trong Samba)
Samba dùng để triển khai giao thức SMB trong Linux/Unix. Samba 4.14 trở lên dùng SMB 2.1 mặc định.
Trong giao tiếp SMB qua mạng, client và server dùng phiên bản SMB tối đa mà cả hai hỗ trợ.
Bảng tóm tắt tương thích phiên bản SMB như sau. Dùng bảng này xác định phiên bản SMB được chọn khi các phiên bản Windows khác nhau tương tác:
| Hệ điều hành | Win 10, Server 2016 | Win 8.1, Server 2012 R2 | Win 8, Server 2012 | Win 7, Server 2008 R2 | Win Vista, Server 2008 | Win XP, Server 2003 và cũ hơn |
|---|---|---|---|---|---|---|
| Win 10, Server 2016 | SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Win 8.1, Server 2012 R2 | SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Win 8, Server 2012 | SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Win 7, Server 2008 R2 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Win Vista, Server 2008 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
| Win XP, 2003 và cũ hơn | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
Ví dụ: client Windows 8.1 kết nối file server Windows Server 2016 sẽ dùng SMB 3.0.2.
Theo bảng, Windows XP và Windows Server 2003 chỉ dùng SMB 1.0 truy cập thư mục/file chia sẻ. SMBv1 bị tắt trong Windows Server mới (2012 R2/2016). Vì vậy, nếu vẫn dùng thiết bị Windows XP/Server 2003 trong mạng, chúng không truy cập được thư mục chia sẻ trên file server chạy Windows Server 2016.
Nếu Windows Server 2019/2016 tắt SMB v1.0 làm domain controller, client Windows XP/Server 2003 không truy cập được thư mục SYSVOL và NETLOGON trên domain controller và xác thực AD.
Có thể nhận lỗi sau khi thử kết nối thư mục chia sẻ trên file server tắt SMBv1:
The specified network name is no longer available
Cách kiểm tra phiên bản SMB trên Windows
Xem cách tìm phiên bản SMB nào được bật trên thiết bị Windows.
Trên Windows 10/8.1 và Windows Server 2019/2016/2012R2, kiểm tra trạng thái các dialect SMB bằng PowerShell:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
Kết quả trả về SMB1 protocol disabled (EnableSMB1Protocol = False), SMB2 và SMB3 enabled (EnableSMB2Protocol = True).
Trên Windows 7, Vista, Windows Server 2008 R2/2008:
Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}
Nếu không có tham số SMB1 hoặc SMB2 trong khóa registry này, SMBv1 và SMBv2 bật mặc định.
Cũng trên các phiên bản này, kiểm tra dialect SMB client cho phép kết nối đến host từ xa:
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
Cả hai service đều running (STATE = 4 Running). Nghĩa là thiết bị Windows hiện tại có thể kết nối đến cả host SMBv1 và SMBv2.
Kiểm tra dialect SMB đang dùng với Get-SMBConnection
Khi giao tiếp qua SMB, máy tính dùng phiên bản SMB tối đa mà cả client và server hỗ trợ. Cmdlet PowerShell Get-SMBConnection kiểm tra phiên bản SMB dùng để truy cập máy từ xa:
Phiên bản SMB dùng kết nối đến server từ xa (ServerName) liệt kê ở cột Dialect.
Hiển thị thông tin phiên bản SMB dùng truy cập server cụ thể:
Get-SmbConnection -ServerName srvfs01
Muốn xem có dùng mã hóa SMB không (giới thiệu từ SMB 3.0):
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
Trên Linux, hiển thị danh sách kết nối SMB và dialect dùng trong samba:
$ sudo smbstatus
Ở phía server SMB Windows, hiển thị danh sách phiên bản giao thức SMB client đang dùng. Chạy lệnh:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
Ví dụ: 898 client kết nối server dùng SMB 2.1 (Windows 7/2008 R2) và 8 client dùng SMB 3.02.
Dùng PowerShell bật audit phiên bản SMB dùng cho kết nối:
Set-SmbServerConfiguration –AuditSmb1Access $true
Sự kiện kết nối SMB sau đó xuất từ log Event Viewer:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
Ngừng sử dụng giao thức SMBv1 không an toàn
Quá khứ vài năm, Microsoft hệ thống tắt giao thức SMB 1.0 cũ trong tất cả sản phẩm vì lý do bảo mật. Do số lượng lỗ hổng nghiêm trọng trong giao thức này (nhớ sự cố wannacrypt và petya ransomware khai thác lỗ hổng SMBv1). Microsoft và các công ty IT khuyến cáo mạnh mẽ ngừng sử dụng SMBv1 trong mạng của bạn.
Tuy nhiên, tắt SMBv1 có thể gây vấn đề truy cập file/thư mục chia sẻ trên Windows 10 mới (Windows Server 2016/2019) từ client cũ (Windows XP, Windows Server 2003), OS bên thứ ba (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, distro Linux cũ), thiết bị NAS cũ.
Nếu không còn thiết bị cũ chỉ hỗ trợ SMBv1 trong mạng, hãy chắc chắn tắt dialect SMB này trong Windows.
Nếu có client chạy Windows XP, Windows Server 2003, hoặc thiết bị khác chỉ hỗ trợ SMBv1, nên cập nhật hoặc cô lập chúng.
Cách bật/tắt SMBv1, SMBv2, SMBv3 trên Windows
Xem các cách bật/tắt phiên bản SMB khác nhau trên Windows. SMB client và server quản lý riêng biệt (là thành phần Windows khác nhau).
Windows 10, 8.1, Windows Server 2019/2016/2012R2
Tắt SMBv1 client và server:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Tắt chỉ SMBv1 server:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
Bật SMBv1 client và server:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Bật chỉ SMBv1 server:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
Tắt SMBv2 và SMBv3 server:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Bật SMBv2 và SMBv3 server:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Windows 7, Vista, Windows Server 2008 R2/2008
Tắt SMBv1 server:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
Bật SMBv1 server:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
Tắt SMBv1 client:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled
Bật SMBv1 client:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto
Tắt SMBv2 server:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force
Bật SMBv2 server:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
Tắt SMBv2 client:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled
Bật SMBv2 client:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto
Có thể tắt SMBv1 server trên máy tham gia domain bằng cách triển khai tham số registry sau qua GPO:
- Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- Name: SMB1
- Type: REG_DWORD
- Value: 0
Đặt tham số registry SMB2=0 để tắt SMBv2 server.
Để tắt SMBv1 client, triển khai cài đặt registry sau:
- Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
- Name: Start
- Type: REG_DWORD
- Value: 4