So sánh các giao thức chia sẻ tệp CIFS và SMB: Giải thích sự khác biệt
Khi nói đến việc lựa chọn giao thức để chia sẻ tệp qua mạng, bạn thường bắt gặp các thuật ngữ SMB và CIFS trong giao diện phần mềm và tài liệu hướng dẫn. Một số người dùng cho rằng SMB và CIFS là một, và việc phân biệt rõ ràng sự khác biệt giữa hai khái niệm này có thể khá khó khăn. Tuy nhiên, hãy cùng tìm hiểu lý do tại sao CIFS không thể được coi là từ đồng nghĩa với SMB. Tìm hiểu về sự khác biệt giữa các giao thức SMB và CIFS cũng như cách sử dụng các thuật ngữ này.
SMB là gì?
SMB (Server Message Block) là một giao thức mạng hoạt động ở lớp ứng dụng của mô hình truyền thông OSI. SMB được sử dụng để cung cấp quyền truy cập chung vào các tài nguyên qua mạng. Giao thức SMB được sử dụng rộng rãi để chia sẻ tệp trên máy chủ tệp, chia sẻ tệp giữa các máy tính người dùng và sao chép tệp giữa các máy tính.
Ngoài việc thao tác với tệp, các trường hợp sử dụng khác của SMB bao gồm nhắn tin và in ấn (giao dịch từ xa đa năng), cũng như duyệt các máy tính trong mạng. IBM đã phát triển SMB vào năm 1983, và kể từ đó giao thức này đã được cải tiến nhiều lần.
SMB file share là gì?
Chia sẻ tệp SMB là các thư mục trên máy chủ từ xa được cung cấp thông qua giao thức SMB. Chúng được cấu hình trên máy chủ tệp, và quyền truy cập đọc và ghi có thể được cấu hình cho các chia sẻ này. Một máy chủ tệp có thể có nhiều chia sẻ SMB.
Cách SMB hoạt động: SMB làm gì?
SMB hoạt động dựa trên nguyên tắc mạng client-server. Giao thức sử dụng một tập hợp các gói dữ liệu chứa yêu cầu được gửi bởi client hoặc phản hồi được gửi bởi server. Khách hàng có thể kết nối với máy chủ bằng cách sử dụng địa chỉ IP hoặc tên máy chủ. Các gói dữ liệu SMB này có thể được phân loại như sau:
- Gói điều khiển phiên, dùng để thiết lập/ngừng kết nối với các chia sẻ tệp
- Gói truy cập tệp, như tên gọi, dùng để truy cập các chia sẻ tệp và thao tác với các tệp
- Gói tin nhắn chung
SMB mở một phiên sau khi thiết lập kết nối và hoàn tất xác thực. Sau đó, các tin nhắn SMB có thể được truyền qua phiên này. Khi khởi tạo phiên, máy khách SMB gửi danh sách các khả năng của mình (khả năng phụ thuộc vào phiên bản SMB của máy khách).
Giao thức SMB có thể hoạt động:
- trực tiếp qua TCP bằng cách sử dụng cổng 445 (không qua NetBIOS) – đây là phương pháp hiện đại.
- qua API NetBIOS bằng cách sử dụng các cổng UDP 137 và 138 cùng các cổng TCP 137 và 139 – đây là phương pháp cũ được sử dụng cho đến Windows 2000. Các phiên bản đầu tiên của SMB sử dụng NetBIOS qua TCP/IP để truyền tải.
Giao thức SMB hỗ trợ tính năng gộp, tức là nhóm nhiều tin nhắn lại và gửi chúng trong một lần truyền để cải thiện hiệu suất.
Các chức năng bổ sung bao gồm cơ chế khóa tệp để bảo vệ các tệp được chia sẻ khi nhiều người dùng mở cùng một tệp. Khóa tệp giúp tránh tình trạng nhiều người dùng ghi dữ liệu đồng thời và gây ra sự không nhất quán dữ liệu trong tệp. IPC (kết nối giữa các tiến trình) còn được gọi là kết nối phiên null. Thư mục chia sẻ IPC $ do Windows tạo ra được sử dụng cho các kết nối tạm thời giữa máy khách và máy chủ. Thư mục chia sẻ ẩn này được tạo ra để chia sẻ dữ liệu không thể phân loại là tệp/thư mục hay máy in, ví dụ như danh sách người dùng và danh sách thư mục chia sẻ.
Hệ thống Windows có sẵn client và server SMB gốc. Tuy nhiên, các phiên bản Windows dành cho client có giới hạn về số lượng người dùng có thể kết nối với một máy chủ, trong khi các phiên bản Windows Server không có giới hạn này.
- Windows XP và Vista – tối đa 10 kết nối đồng thời
- Windows 7 và Windows 10 – tối đa 20 kết nối đồng thời
Một server SMB trên Linux được cài đặt bằng cách cấu hình Samba, đây là một triển khai server SMB miễn phí cho Linux. Lưu ý rằng Samba cũng cho phép bạn kết nối Linux với miền Active Directory và cho phép Linux hoạt động như một máy chủ miền. Phần mềm khách SMB cũng có sẵn trên Linux (miễn phí) và trên các hệ điều hành khác.
CIFS là gì?
CIFS (Hệ thống Tệp Internet Chung) là một biến thể cụ thể của SMB do Microsoft phát triển vào năm 1996 sau khi phát hành Windows 95. Một biến thể là một phiên bản và không phải là một giao thức độc lập riêng biệt. Một phương ngữ là tập hợp các gói tin được gửi/nhận để giao tiếp giữa các máy chủ, định nghĩa một phiên bản giao thức cụ thể. CIFS không phải là hệ thống tệp, trái với tên gọi của nó.
Thông số kỹ thuật giao thức CIFS dựa trên giao thức SMB gốc nhưng có thêm một số tính năng do Microsoft bổ sung. Microsoft đã triển khai kết nối trực tiếp qua TCP và cổng 445 mà không sử dụng NetBIOS qua TCP (được sử dụng trong các triển khai SMB 1 đầu tiên). CIFS là một triển khai của SMB 1 và không phải là một giao thức chia sẻ tệp riêng biệt.
Các biến thể giao thức SMB
Khi đề cập đến triển khai SMB 1 của Microsoft, chúng ta có thể sử dụng thuật ngữ CIFS. Trong tất cả các trường hợp khác và nói chung, SMB là thuật ngữ chính xác để chỉ giao thức mạng này. Hãy xem xét kỹ hơn các phiên bản SMB được phát hành sau CIFS để hiểu rõ hơn về sự khác biệt giữa CIFS và các phương ngữ (phiên bản) SMB khác (mới hơn).
SMB 2.0
Microsoft đã phát hành SMB 2.0 (hoặc SMB2) vào năm 2006 cùng với Windows Vista. Phiên bản SMB này đáng tin cậy hơn SMB 1.0/CIFS và nó không phải là CIFS. Số lượng lệnh cần thiết để truyền tệp đã giảm từ hơn 100 xuống còn 20. Hiệu suất được cải thiện nhờ cơ chế xử lý theo luồng (pipeline), tức là khả năng gửi yêu cầu tiếp theo trước khi nhận được phản hồi cho yêu cầu trước đó. Việc gộp nhiều thao tác vào một yêu cầu giúp giảm số lượng yêu cầu gửi đến máy khách, từ đó nâng cao hiệu suất.
SMB 2.1
SMB 2.1 mang lại những cải thiện không đáng kể về hiệu suất và cơ chế chặn so với SMB 2.0. Phiên bản giao thức này được phát hành cùng với Windows 7 và Windows Server 2008 R2.
SMB 3.0
Ban đầu, phiên bản giao thức này được gọi là SMB 2.2, nhưng sau đó được đổi tên thành SMB 3.0 cùng với Windows 8. Phiên bản SMB 3.0:
- thêm SMB Direct (truy cập trực tiếp vào bộ nhớ), SMB Multichannel và SMB Transport Failover
- cải thiện bảo mật
- thêm hỗ trợ mã hóa đầu cuối
- cải thiện hiệu suất mạng bằng cách giảm độ trễ
SMB 3.0.2
SMB 3.0.2 hoặc 3.02 đã có sẵn kể từ Windows 8.1 và Windows Server 2012 R2. Trong phiên bản này, tính năng tương thích với SMB 1.0 có thể được tắt để nâng cao bảo mật.
SMB 3.1.1
Phiên bản này có sẵn từ Windows 10 và Windows Server 2016. Các cải tiến bao gồm mã hóa tốt hơn (AES 128 GCM và AES 128 CCM) và hàm băm SHA-512 cho kiểm tra tính toàn vẹn trước xác thực.
SMB trong Windows và Microsoft Server
SMB có sẵn trong Windows kể từ Windows 3.1 (Windows for Workgroups). Các phiên bản SMB và khả năng tương thích với các phiên bản Windows khác nhau được giải thích trong bảng.
Các cột và hàng chứa các phiên bản Windows có thể chạy máy khách SMB hoặc máy chủ SMB (các cột và hàng có thể hoán đổi cho nhau). Một ô tại giao điểm của cột và hàng hiển thị phiên bản giao thức SMB nào được sử dụng để giao tiếp giữa các phiên bản Windows tương ứng.
| Windows 10
Server 2016 và các phiên bản mới hơn |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win XP, Server 2003 và các phiên bản cũ hơn | |
| Windows 10
Server 2016 và các phiên bản mới hơn |
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 |
| Win XP, Server 2003 và các phiên bản cũ hơn | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS so với SMB: Nguồn gốc có thể gây nhầm lẫn
Hãy cùng tìm hiểu qua một ví dụ tại sao các thuật ngữ CIFS và SMB vẫn còn gây nhầm lẫn cho người dùng. Để làm điều đó, giả sử chúng ta đang sử dụng một máy chủ tệp có chia sẻ SMB được cấu hình tại Windows Server 2019 và một máy Linux kết nối với máy chủ tệp này qua giao thức SMB. Ubuntu 20.04 là bản phân phối Linux chúng ta sử dụng trong ví dụ này. Lưu ý rằng cấu hình này cũng áp dụng cho Ubuntu 22.
Chúng ta có cấu hình sau trong môi trường của mình:
- Windows Server 2019: 192. 168.101.209
- Linux Ubuntu 20.04: 192. 168.101.210
- Thư mục chia sẻ SMB trên Windows Server: 192.168.101.209share
Trong Windows Server 2019, giao thức SMB 1.0/CIFS bị tắt theo mặc định. Để kiểm tra cài đặt này và bật/tắt máy khách và máy chủ SMB 1.0/CIFS theo cách thủ công, hãy truy cập Server Manager > Add Roles and Features > Features.
Chúng tôi giữ SMB 1.0/CIFS bị tắt trên máy Windows Server 2019 của mình. Điều này có nghĩa là SMB 3 được sử dụng theo mặc định với khả năng chuyển sang SMB 2 để tương thích với các máy khách sử dụng các phiên bản (biến thể) SMB 2.
Giao thức CIFS bị vô hiệu hóa theo mặc định trong các phiên bản Windows hiện đại như Windows 10 để tăng cường bảo mật, và bạn có thể kích hoạt nó thủ công nếu cần thiết.
Lưu ý: Năm 2017, các cuộc tấn công ransomware quy mô lớn trên toàn cầu (WannaCry và NotPetya) đã được thực hiện bằng cách khai thác lỗ hổng của SMB 1. Các lỗ hổng này được đặt tên là EternalBlue, EternalRomance và EternalChampion. Microsoft đã phát hành các bản vá bảo mật cho các hệ điều hành của mình, bắt đầu từ Windows XP và Windows Server 2003, mặc dù thực tế là các hệ điều hành này không phải là phiên bản được hỗ trợ chính thức vào thời điểm đó. Microsoft khuyến nghị sử dụng SMB 2 và SMB 3 (hỗ trợ tính toàn vẹn trước khi xác thực) thay vì sử dụng SMB 1.0/CIFS. Như đã đề cập ở trên, tên của máy chủ SMB trên Linux là Samba ( samba là tên gói phần mềm). Chúng ta sử dụng máy chủ SMB trên Windows. Vì vậy, trong ví dụ này, chúng ta không cần Samba, mà cần một trình khách SMB cho Ubuntu Linux.
Trình khách SMB cho Linux được tích hợp trong Linux CIFS Utils ( cifs-utils là tên gói phần mềm). Đây chính là nguồn gốc của sự nhầm lẫn. Phiên bản đầu tiên của trình khách này cho Linux được tạo ra vào thời điểm SMB 1.0/CIFS được sử dụng rộng rãi. Giao thức SMB đã được cập nhật, các phiên bản SMB 2 và 3 đã được phát hành, nhưng tên của trình khách SMB trên Linux vẫn giữ nguyên, và gói chứa trình khách SMB vẫn được gọi là CIFS Utils. Gói cifs-utils không thuộc về samba .
Chúng ta sẽ kết nối từ Linux bằng CIFS Utils đến một chia sẻ SMB trên Windows Server 2019 để xác định xem CIFS có còn được sử dụng hay không. Để cài đặt CIFS Utils, hãy chạy lệnh sau với quyền root:
sudo apt-get install cifs-utils
Tạo một thư mục để sử dụng làm điểm gắn kết cho chia sẻ SMB:
mkdir /mnt/share
Kết nối đến chia sẻ tệp SMB trên máy chủ tệp Windows từ xa:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
Trong ví dụ này, chúng tôi sử dụng tài khoản người dùng quản trị viên Windows vì mục đích giảng dạy.
CIFS so với SMB – phiên bản nào được sử dụng trong phiên hiện tại để kết nối với máy chủ tệp? Kiểm tra phiên bản SMB của các client kết nối với chia sẻ SMB trên Windows Server bằng lệnh PowerShell trên Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Như có thể thấy trong kết quả PowerShell, SMB 3.1.1 được sử dụng cho kết nối từ Ubuntu Linux. SMB 1.0/CIFS không được sử dụng khi chúng ta kết nối với , cifs-utils, và lệnh mount.cifs đến máy chủ tệp được cấu hình trên Windows Server 2019.
Chúng ta cũng có thể kiểm tra phiên bản giao thức SMB trong /proc/mounts, bằng lệnh cat /proc/mounts trên Linux. Chúng ta có thể sử dụng lệnh sau để lọc ra kết quả cần thiết:
cat /proc/mounts | grep cifs
Như chúng ta thấy trong kết quả, phiên bản giao thức để kết nối với chia sẻ tệp được đánh dấu là cifs, nhưng phiên bản hiển thị là 3.1.1 (vers=3.1.1), đây không phải là phiên bản của CIFS. Đây là một ví dụ nữa cho thấy sự nhầm lẫn giữa các thuật ngữ SMB và CIFS.
Trên thực tế, SMB 3.1.1 được sử dụng chứ không phải CIFS. Chúng ta có thể chứng minh điều này bằng một phương pháp khác bằng cách sử dụng nmap, một công cụ phát hiện mạng miễn phí dùng để phân tích và khắc phục sự cố.
Để cài đặt nmap trong Ubuntu, hãy chạy lệnh với quyền root:
sudo apt-get install nmap
Để quét tất cả các máy chủ đang trực tuyến và kết nối với mạng của chúng tôi 192.168.101.0/24 , chúng tôi sử dụng lệnh:
nmap --script smb-protocols 192.168.101.0/24
Chúng tôi quan tâm đến kết quả của 192.168.101.209, đây là địa chỉ IP của máy chủ Windows Server 2019 đang hoạt động như một máy chủ tệp. Hệ điều hành Linux được kết nối với thư mục chia sẻ trên máy chủ này. Trong kết quả, chúng ta thấy rằng các phiên bản giao thức SMB được máy chủ Windows của chúng ta hỗ trợ là 2.02, 2.10, 3.00, 3.02 và 3.11. Không có SMB 1.0/CIFS, mặc dù thuật ngữ CIFS vẫn được sử dụng trong các tệp cấu hình và lệnh của Linux.
Chúng ta có thể ép sử dụng CIFS thủ công bằng cách thêm tham số ` vers=1.0 ` vào lệnh ` mount ` trong Linux (tại phía client) để chỉ sử dụng giao thức SMB 1.0/CIFS khi kết nối với một thư mục chia sẻ trên máy chủ từ xa.
mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
hoặc
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
Kết quả như sau:
Máy chủ đã ngắt kết nối đột ngột. Điều này có thể xảy ra nếu máy chủ không hỗ trợ phiên bản SMB mà bạn đang cố gắng sử dụng. Phiên bản SMB mặc định gần đây đã được thay đổi từ SMB1 sang SMB2.1 trở lên .
Kết quả này trùng khớp với các kết quả trước đó của cuộc điều tra so sánh SMB và CIFS trên các hệ điều hành hiện đại. CIFS không được sử dụng, và SMB 1.0/CIFS đã bị vô hiệu hóa trên máy chủ Windows của chúng tôi.
Nếu chúng ta thiết lập để sử dụng ít nhất SMB 2.0, thì chúng ta có thể kết nối với máy chủ (hãy nhớ danh sách các phương ngữ SMB được hỗ trợ bởi Windows Server 2019 của chúng tôi được hiển thị tại nmap ):
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
Khi sử dụng giao diện người dùng đồ họa trong Linux hoặc các hệ điều hành khác, hãy sử dụng smb:// trong dòng địa chỉ khi xác định giao thức mạng sẽ được sử dụng để kết nối với một chia sẻ tệp trên máy chủ từ xa.
Khi nhập địa chỉ vào một thư mục chia sẻ SMB, bạn nên sử dụng:
smb://server-name/share-name
Không sử dụng:
cifs://server-name/share-name
vì máy khách sẽ cố gắng kết nối bằng giao thức SMB1.0/CIFS, có thể bị vô hiệu hóa trên máy chủ (nếu máy khách thậm chí hỗ trợ cú pháp cifs:// ).
Kết luận
Hiện nay, khi giao thức CIFS đã lỗi thời, SMB là một trong những giao thức được sử dụng để kết nối với bộ nhớ chia sẻ trên máy chủ tệp và NAS (giao thức phổ biến khác là NFS). Do bộ nhớ chia sẻ đặc biệt dễ bị tổn thương trước sự hỏng hóc dữ liệu, ransomware và các mối đe dọa khác có thể dễ dàng lây lan qua mạng, hãy đảm bảo sao lưu các tệp và thư mục được lưu trữ trên tài nguyên chia sẻ để tránh mất dữ liệu. Việc lây nhiễm máy tính của ngay cả một người dùng có quyền ghi vào các tệp chia sẻ cũng có thể gây ra mất dữ liệu cho tất cả người dùng. NAKIVO Backup & Replication là một giải pháp bảo vệ dữ liệu hỗ trợ sao lưu gia tăng qua SMB và NFS cho dữ liệu được lưu trữ trên các thiết bị NAS và máy chủ tệp Windows/Linux.





