Khối thông báo máy chủ (SMB) giao thức mạng được sử dụng để chia sẻ và truy cập các thư mục, tệp, máy in và các thiết bị khác qua mạng (cổng TCP 445). Trong bài viết này, chúng ta sẽ xem xét phiên bản (phương ngữ) nào của SMB có sẵn trong các phiên bản Windows khác nhau (và cách chúng liên quan đến samba phiên bản trên Linux); cách kiểm tra phiên bản SMB đang sử dụng trên máy tính của bạn; và cách bật hoặc tắt phương ngữ SMBv1, SMBv2 và SMBv3.
Nội dung:
- 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 các phương ngữ SMB đã sử dụng bằng Get-SMBConnection
- Ngừng sử dụng Giao thức SMBv1 không an toàn
- Cách bật và tắt SMBv1, SMBv2 và SMBv3 trên Windows?
Phiên bản Giao thức SMB trong Windows
Có một số phiên bản của giao thức SMB (phương ngữ) liên tục xuất hiện 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 (được 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 được hỗ trợ trong Samba)
- SMB 3.1.1 - Windows Server 2016 và Windows 10 (không được hỗ trợ trong Samba)
Trong giao tiếp mạng SMB, máy khách và máy chủ sử dụng phiên bản giao thức SMB tối đa được hỗ trợ bởi cả máy khách và máy chủ.
Bảng tóm tắt về khả năng tương thích của phiên bản SMB trông như thế này. Sử dụng bảng này, bạn có thể xác định phiên bản của giao thức SMB được chọn khi các phiên bản Windows khác nhau tương tác:
Hệ điều hànhWindows 10, Win Server 2016Windows 8.1, Win Server 2012 R2Windows 8, Server 2012Windows 7, Server 2008 R2Windows Vista, Server 2008Windows XP, Server 2003 trở về trướcWindows 10, Windows Server 2016SMB 3.1.1SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0Windows 8.1, Server 2012 R2SMB 3.02SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0Windows 8, Server 2012SMB 3.0SMB 3.0SMB 3.0SMB 2.1SMB 2.0SMB 1.0Windows 7, Server 2008 R2SMB 2.1SMB 2.1SMB 2.1SMB 2.1SMB 2.0SMB 1.0Windows Vista, Server 2008SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 1.0Windows XP, 2003 trở về trướcSMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0Ví dụ:nếu máy khách chạy Windows 8.1 kết nối với máy chủ tệp có Windows Server 2016, giao thức SMB 3.0.2 sẽ được sử dụng.
Theo bảng, Windows XP và Windows Server 2003 chỉ có thể sử dụng SMB 1.0 để truy cập các thư mục và tệp được chia sẻ. SMBv1 bị tắt trong các phiên bản Windows Server mới hơn (2012 R2 / 2016). Vì vậy, nếu bạn vẫn đang sử dụng các thiết bị Windows XP và Windows Server 2003 trên mạng của mình, chúng sẽ không thể truy cập các thư mục được chia sẻ trên máy chủ tệp chạy Windows Server 2016.
Nếu Windows Server 2019/2016 với SMB v1.0 bị vô hiệu hóa được sử dụng làm bộ điều khiển miền thì máy khách Windows XP / Server 2003 sẽ không thể truy cập các thư mục SYSVOL và NETLOGON trên bộ điều khiển miền và xác thực bằng AD.
Bạn có thể gặp lỗi sau khi cố gắng kết nối với thư mục được chia sẻ trên máy chủ tệp đã tắt SMBv1:
Tên mạng được chỉ định không còn nữa
Làm thế nào để Kiểm tra Phiên bản SMB trên Windows?
Hãy xem cách tìm ra phiên bản SMB nào được bật trên thiết bị Windows của bạn.
Trên Windows 10 / 8.1 và Windows Server 2019/2016 / 2012R2, bạn có thể kiểm tra trạng thái của các phương ngữ khác nhau của giao thức SMB bằng PowerShell:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
Lệnh này trả về rằng giao thức SMB1 bị vô hiệu hóa (EnableSMB1Protocol = True
) và các giao thức SMB2 và SMB3 được bật (EnableSMB1Protocol = False
).
Trên Windows 7, Vista và 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ố nào có tên SMB1
hoặc SMB2
trong khóa đăng ký này, thì giao thức SMBv1 và SMBv2 được bật theo mặc định.
Cũng trên các phiên bản Windows này, bạn có thể kiểm tra phương ngữ ứng dụng khách SMB nào được phép kết nối với máy chủ từ xa:
sc.exe query mrxsmb10
SERVICE_NAME:mrxsmb10TYPE:2 FILE_SYSTEM_DRIVERSTATE:4 CHẠY (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE:0 (0x0) SERVICE_EXIT_CODE:0 (0x0) CHECKPOINT:0 (0x0) CHECKPOINT:0 (0x0) CHECKPOINT:0 (0x0)
sc.exe query mrxsmb20
SERVICE_NAME:mrxsmb20TYPE:2 FILE_SYSTEM_DRIVERSTATE:4 CHẠY (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE:0 (0x0) SERVICE_EXIT_CODE:0 (0x0) CHECKPOINT:0 (0x0) CHECKPOINT:0 (0x0) CHECKPOINT:0 (0x0)Trong cả hai trường hợp, các dịch vụ đang chạy (
STATE = 4 Running
). Điều này có nghĩa là thiết bị Windows hiện tại có thể kết nối với cả máy chủ SMBv1 và SMBv2.Kiểm tra các phương ngữ SMB đã sử dụng bằng Get-SMBConnection
Khi giao tiếp qua SMB, các máy tính sử dụng phiên bản SMB tối đa được hỗ trợ bởi cả máy khách và máy chủ.
Get-SMBConnection
Lệnh ghép ngắn PowerShell có thể được sử dụng để kiểm tra phiên bản SMB được sử dụng để truy cập máy tính từ xa:
Phiên bản SMB được sử dụng để kết nối với máy chủ từ xa ( Tên máy chủ ) được liệt kê trong Phương ngữ cột.
Bạn có thể hiển thị thông tin về các phiên bản SMB được sử dụng để truy cập một máy chủ cụ thể:
Get-SmbConnection -ServerName srvfs01
Nếu bạn muốn hiển thị nếu mã hóa SMB đang được sử dụng (được giới thiệu trong SMB 3.0):
Trên Linux, bạn có thể hiển thị danh sách các kết nối SMB và phương ngữ được sử dụng trong samba bằng lệnh:
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
$ sudo smbstatus
Ở phía máy chủ SMB của Windows, bạn có thể hiển thị danh sách các phiên bản của giao thức SMB mà máy khách hiện đang sử dụng. Chạy lệnh:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
Trong ví dụ này, có 898 máy khách được kết nối với máy chủ bằng SMB 2.1 (Windows 7 / Windows 2008 R2) và 8 khách hàng SMB 3.02.
Bạn có thể sử dụng PowerShell để cho phép kiểm tra các phiên bản SMB được sử dụng cho kết nối:
Set-SmbServerConfiguration –AuditSmb1Access $true
Các sự kiện kết nối SMB sau đó có thể được xuất từ nhật ký của Trình xem sự kiện:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
Ngừng sử dụng Giao thức SMBv1 không an toàn
Trong vài năm qua, Microsoft đã vô hiệu hóa một cách có hệ thống giao thức SMB 1.0 cũ trong tất cả các sản phẩm vì lý do bảo mật. Điều này là do số lượng lớn các lỗ hổng nghiêm trọng trong giao thức này (hãy nhớ các sự cố với wannacrypt và petya ransomware, đã khai thác một lỗ hổng trong giao thức SMBv1). Microsoft và các công ty CNTT khác thực sự khuyên bạn nên ngừng sử dụng SMBv1 trong mạng của mình.
Tuy nhiên, việc tắt SMBv1 có thể gây ra sự cố khi truy cập các tệp và thư mục được chia sẻ trên các phiên bản mới hơn của Windows 10 (Windows Server 2016/2019) từ các máy khách cũ (Windows XP, Windows Server 2003), hệ điều hành của bên thứ ba (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, các bản phân phối Linux cũ), thiết bị NAS cũ.
Nếu không còn thiết bị kế thừa nào trên mạng của bạn chỉ hỗ trợ SMBv1, hãy đảm bảo tắt phương ngữ SMB này trong Windows.
Nếu bạn có máy khách chạy Windows XP, Windows Server 2003 hoặc các thiết bị khác chỉ hỗ trợ SMBv1, chúng nên được cập nhật hoặc cách ly.
Cách bật và tắt SMBv1, SMBv2 và SMBv3 trên Windows?
Hãy xem các cách để bật và tắt các phiên bản SMB khác nhau trên Windows. Chúng tôi sẽ đề cập đến quản lý máy khách và máy chủ SMB (chúng là các thành phần khác nhau của Windows).
Windows 10, 8.1 và Windows Server 2019/2016 / 2012R2 :
Tắt máy khách và máy chủ SMBv1:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Chỉ tắt máy chủ SMBv1:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
Bật máy khách và máy chủ SMBv1:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Chỉ bật máy chủ SMBv1:
Tìm hiểu thêm về giao thức SMBv1 trên Windows 10 và Windows Server 2016/2019.
Set-SmbServerConfiguration -EnableSMB1Protocol $true
Tắt máy chủ SMBv2 và SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Bật máy chủ SMBv2 và SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Windows 7, Vista và Windows Server 2008 R2 / 2008 :
Tắt máy chủ SMBv1:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
Bật máy chủ SMBv1:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
Tắt ứng dụng SMBv1:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabledBật ứng dụng SMBv1:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= autoTắt máy chủ SMBv2:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force
Bật máy chủ SMBv2:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
Tắt ứng dụng SMBv2:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabledBật ứng dụng SMBv2:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= autoBạn có thể vô hiệu hóa máy chủ SMBv1 trên các máy tính tham gia miền bằng cách triển khai tham số đăng ký sau thông qua GPO:
- Khóa:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters
- Tên:SMB1
- Loại:REG_DWORD
- Giá trị:0
Đặt tham số đăng ký SMB2=0
để tắt máy chủ SMBv2.
Để vô hiệu hóa ứng dụng khách SMBv1, bạn cần phổ biến cài đặt đăng ký sau:
- Khóa:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ mrxsmb10
- Tên:Bắt đầu
- Loại:REG_DWORD
- Giá trị:4