Protokoły udziału plików CIFS i SMB: wyjaśnienie różnic

Jeśli chodzi o wybór protokołu do udostępniania plików w sieci, w interfejsach oprogramowania i dokumentacji często spotyka się terminy SMB i CIFS. Niektórzy użytkownicy uważają, że SMB i CIFS to to samo, a jednoznaczne określenie różnicy między nimi może być trudne. Przyjrzyjmy się jednak, dlaczego CIFS nie może być traktowany jako synonim SMB. Dowiedz się, czym różnią się protokoły SMB i CIFS oraz jak prawidłowo używać tych terminów.

NAKIVO do tworzenia kopii zapasowych danych z serwerów NAS

NAKIVO do tworzenia kopii zapasowych danych z serwerów NAS

Szybkie tworzenie kopii zapasowych i odzyskiwanie gigabajtów danych na urządzeniach NAS oraz w udziałach plików w systemach Windows i Linux. Odzyskiwanie wszystkiego, czego potrzebujesz, w dowolnym momencie – w ciągu kilku sekund.

Czym jest SMB?

SMB (Server Message Block) to protokół sieciowy działający w warstwie aplikacji modelu komunikacyjnego OSI. Protokół SMB służy do zapewniania współdzielonego dostępu do zasobów w sieci. Protokół SMB jest szeroko stosowany do udzielenia udziału plików na serwerach plików, wymiany plików między komputerami użytkowników oraz kopiowania plików między komputerami.

Oprócz obsługi plików, inne przypadki użycia protokołu SMB obejmują przesyłanie wiadomości i drukowanie (ogólne transakcje zdalne), a także przeglądanie komputerów w sieci. Firma IBM opracowała protokół SMB w 1983 roku i od tego czasu był on wielokrotnie ulepszany.

Czym jest udział plików SMB?

Udostępniane udziały plików SMB to katalogi na zdalnym hoście, które są udostępniane za pośrednictwem protokołu SMB. Są one konfigurowane na serwerach plików, a dostęp do odczytu i zapisu do tych udziałów można skonfigurować. Jeden serwer plików może mieć wiele udziałów plików SMB.

Jak działa SMB: Czym zajmuje się SMB?

SMB działa w oparciu o zasadę sieci klient-serwer. Protokół wykorzystuje zestaw pakietów danych zawierających żądanie wysłane przez klienta lub odpowiedź wysłaną przez serwer. Klienci mogą łączyć się z serwerem, korzystając z adresu IP lub nazwy hosta. Te pakiety danych SMB można podzielić na:

  • Pakiety kontroli sesji, które nawiązują/zamyka połączenia z udziałami plików
  • Pakiety dostępu do plików, które, jak sama nazwa wskazuje, zapewniają dostęp do udziałów plików i umożliwiają manipulowanie plikami
  • Ogólne pakiety komunikatów

Protokół SMB otwiera sesję po nawiązaniu połączenia i zakończeniu uwierzytelniania. Następnie w ramach tej sesji mogą być przesyłane komunikaty SMB. Podczas inicjowania sesji klient SMB wysyła listę swoich możliwości (możliwości zależą od wersji SMB klienta).

Protokół SMB może działać:

  • bezpośrednio przez TCP przy użyciu portu 445 (bez NetBIOS) – jest to podejście nowoczesne.
  • przez interfejs API NetBIOS przy użyciu portów UDP 137 i 138 oraz portów TCP 137 i 139 – jest to podejście starszego typu, stosowane do systemu Windows 2000. Pierwsze wersje protokołu SMB wykorzystywały do transmisji protokół NetBIOS nad TCP/IP.

Protokół SMB obsługuje przetwarzanie wsadowe, czyli grupowanie wielu komunikatów i wysyłanie ich w jednej transmisji w celu poprawy wydajności.

Dodatkowa funkcja obejmuje mechanizmy blokowania plików w celu ochrony plików udostępnionych, gdy wielu użytkowników otwiera ten sam plik. Blokowanie plików pozwala uniknąć jednoczesnego zapisu danych przez wielu użytkowników, co mogłoby spowodować niespójność danych w pliku. IPC (połączenie międzyprocesowe) znane jest również jako połączenie typu „null session”. Udostępniony katalog IPC$ utworzony przez system Windows służy do nawiązywania tymczasowych połączeń między klientami a serwerami. Ten ukryty katalog udostępniony jest tworzony w celu udostępniania danych, których nie można zaklasyfikować jako pliki/katalogi ani drukarki, na przykład użytkowników i listy udostępnionych zasobów.

Systemy Windows zawierają natywnego klienta i serwer SMB. Jednak wersje klienckie systemu Windows mają ograniczenie liczby użytkowników, którzy mogą połączyć się z hostem, w przeciwieństwie do wersji Windows Server, które nie mają takich ograniczeń.

  • Windows XP i Vista – maksymalnie 10 jednoczesnych połączeń
  • Windows 7 i Windows 10 – maksymalnie 20 jednoczesnych połączeń

Serwer SMB w systemie Linux instaluje się poprzez konfigurację Samby, która jest darmową implementacją serwera SMB dla systemu Linux. Należy pamiętać, że Samba umożliwia również dołączenie systemu Linux do domeny Active Directory oraz pozwala systemowi Linux pełnić rolę kontrolera domeny. Oprogramowanie klienckie SMB jest również dostępne w systemie Linux (bezpłatnie) oraz w innych systemach operacyjnych.

Czym jest CIFS?

CIFS, czyli Common Internet File System, to konkretna implementacja lub dialekt protokołu SMB opracowany przez firmę Microsoft w 1996 r. po wydaniu systemu Windows 95. Dialekt jest wersją, a nie oddzielnym, niezależnym protokołem. Dialekt to zbiór pakietów komunikatów wysyłanych/odbieranych w celu komunikacji między hostami, który definiuje konkretną wersję protokołu. W przeciwieństwie do tego, co sugeruje nazwa, CIFS nie jest systemem plików.

Specyfikacja protokołu CIFS opiera się na oryginalnym protokole SMB, ale zawiera dodatkowe funkcje dodane przez firmę Microsoft. Firma Microsoft zaimplementowała połączenia bezpośrednie przez TCP i port 445 bez korzystania z protokołu NetBIOS over TCP (który był używany w pierwszych implementacjach SMB 1). CIFS jest implementacją SMB 1, a nie odrębnym protokołem udostępniania plików.

Dialekty protokołu SMB

Kiedy mówimy o implementacji SMB1 przez firmę Microsoft, możemy używać terminu CIFS. We wszystkich innych przypadkach, a ogólnie rzecz biorąc, prawidłowym terminem odnoszącym się do tego protokołu sieciowego jest SMB. Przyjrzyjmy się bliżej wersjom SMB wydanym po CIFS, aby lepiej zrozumieć różnicę między CIFS a innymi (nowszymi) dialektami (wersjami) SMB.

SMB 2.0

Firma Microsoft przeprowadziła wydanie SMB 2.0 (lub SMB2) w 2006 roku wraz z systemem Windows Vista. Ta wersja SMB jest bardziej niezawodna niż SMB 1.0/CIFS i nie jest to CIFS. Liczba poleceń potrzebnych do przesyłania plików została zmniejszona z ponad 100 do 20. Wydajność jest wyższa dzięki mechanizmom przetwarzania potokowego, czyli możliwości wysłania kolejnego żądania przed otrzymaniem odpowiedzi na poprzednie. Łączenie wielu operacji w jedno żądanie zmniejsza liczbę żądań kierowanych do klienta, co poprawia wydajność.

SMB 2.1

SMB 2.1 zapewnia nieznaczne ulepszenia w zakresie wydajności i mechanizmów blokowania w porównaniu z SMB 2.0. Ta wersja protokołu została wydana wraz z systemami Windows 7 i Windows Server 2008 R2.

SMB 3.0

Początkowo ta wersja protokołu nosiła nazwę SMB 2.2, ale została później przemianowana na SMB 3.0 wraz z systemem Windows 8. Wersja SMB 3.0:

  • wprowadzono SMB Direct (bezpośredni dostęp do pamięci), SMB Multichannel oraz Tryb failover
  • poprawiono bezpieczeństwo
  • dodano wsparcie dla szyfrowania typu end-to-end
  • poprawiono wydajność sieci poprzez zmniejszenie opóźnień

SMB 3.0.2

SMB 3.0.2 lub 3.02 jest dostępny od czasu wprowadzenia systemów Windows 8.1 i Windows Server 2012 R2. W tej wersji można wyłączyć zgodność z protokołem SMB 1.0 w celu zwiększenia bezpieczeństwa.

SMB 3.1.1

Ta wersja stała się dostępna począwszy od systemów Windows 10 i Windows Server 2016. Ulepszenia obejmują lepsze szyfrowanie (AES 128 GCM i AES 128 CCM) oraz funkcję skrótu SHA-512 do sprawdzania integralności przed uwierzytelnieniem.

SMB w systemach Windows i Microsoft Server

Protokół SMB jest dostępny w systemie Windows począwszy od wersji Windows 3.1 (Windows for Workgroups). Wersje protokołu SMB i ich zgodność z różnymi wersjami systemu Windows wyjaśniono w tabeli.

Kolumny i wiersze zawierają wersje systemu Windows, w których można uruchomić klienta SMB lub serwer SMB (kolumny i wiersze są zamienne). Komórka na przecięciu kolumny i wiersza wskazuje, która wersja protokołu SMB jest używana do komunikacji między odpowiednimi wersjami systemu Windows.

Windows 10

Server 2016 i nowsze

Windows 8.1

Server 2012 R2

Windows 8

Server 2012

Windows 7

Server 2008 R2

Windows Vista

Server 2008

Windows XP, Server 2003 i starsze
Windows 10

Server 2016 i nowsze

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 i starsze SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

CIFS a SMB: prawdopodobne źródło nieporozumień

Sprawdźmy na przykładzie, dlaczego użytkownicy wciąż mylą terminy CIFS i SMB. W tym celu załóżmy, że korzystamy z serwera plików z udziałem plików SMB skonfigurowanym na Windows Server 2019 oraz z komputera z systemem Linux łączącego się z tym serwerem plików za pośrednictwem protokołu SMB. W tym przykładzie używamy dystrybucji Ubuntu 20.04. Należy zauważyć, że konfiguracja jest taka sama dla Ubuntu 22.

W naszych środowiskach mamy następującą konfigurację:

  • Windows Server 2019: 192. 168.101.209
  • Linux Ubuntu 20.04: 192. 168.101.210
  • Udział SMB na serwerze Windows Server: 192.168.101.209share

W systemie Windows Server 2019 protokół SMB 1.0/CIFS jest domyślnie wyłączony. Aby sprawdzić te ustawienia oraz ręcznie włączyć lub wyłączyć klienta i serwer SMB 1.0/CIFS, przejdź do Server Manager > Add Roles and Features > Features.

Na naszym komputerze z systemem Windows Server 2019 protokół SMB 1.0/CIFS pozostaje wyłączony. Oznacza to, że domyślnie używany jest protokół SMB 3 z możliwością przełączenia się na SMB 2 w celu zapewnienia zgodności z klientami korzystającymi z wersji (dialektów) SMB 2.

CIFS vs SMB – SMB 1.0/CIFS is disabled by default in Windows Server 2019

Protokół CIFS jest domyślnie wyłączony w nowoczesnych wersjach systemu Windows, takich jak Windows 10, w celu zapewnienia większego bezpieczeństwa, ale w razie potrzeby można go włączyć ręcznie.

Uwaga: W 2017 r. miały miejsce zakrojone na szeroką skalę ataki oprogramowania wymuszającego okup na całym świecie (WannaCry oraz NotPetya), przeprowadzone z wykorzystaniem exploitów wykorzystujących luki w zabezpieczeniach protokołu SMB 1. Exploity te nazwano EternalBlue, EternalRomance i EternalChampion. Firma Microsoft wydała poprawki zabezpieczeń dla swoich systemów operacyjnych, począwszy od Windows XP i Windows Server 2003, mimo że te wersje nie były wówczas oficjalnie wspierane. Microsoft zalecił stosowanie protokołów SMB 2 i SMB 3 (obsługujących integralność przed uwierzytelnieniem) zamiast SMB 1.0/CIFS. Jak wspomniano powyżej, serwer SMB dla systemu Linux nosi nazwę Samba ( samba to nazwa pakietu). W systemie Windows korzystamy z serwera SMB. W tym przykładzie nie potrzebujemy więc Samby, lecz klienta SMB dla systemu Ubuntu Linux.

Klient SMB dla systemu Linux jest zawarty w pakiecie Linux CIFS Utils ( cifs-utils to nazwa pakietu). Stąd właśnie bierze się to zamieszanie. Pierwsza wersja tego klienta dla systemu Linux powstała w czasach, gdy powszechnie stosowano protokół SMB 1.0/CIFS. Protokół SMB został zaktualizowany, pojawiły się wydania SMB 2 i 3, ale nazwa klienta SMB dla systemu Linux pozostała niezmieniona, a pakiet zawierający klienta SMB nadal nosi nazwę CIFS Utils. Pakiet cifs-utils nie jest częścią samba .

Połączymy się z systemu Linux przy użyciu narzędzi CIFS Utils z udziałem SMB znajdującym się na serwerze Windows Server 2019, aby sprawdzić, czy protokół CIFS jest nadal używany. Aby zainstalować narzędzia CIFS Utils, uruchom następujące polecenie z uprawnieniami administratora:

sudo apt-get install cifs-utils

Utwórz katalog, który posłuży jako punkt montowania udziału SMB:

mkdir /mnt/share

Połącz się z udziałem plików SMB znajdującym się na zdalnym serwerze plików Windows:

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator

W naszym przykładzie, w celach edukacyjnych, używamy konta administratora systemu Windows.

What is SMB file share – connecting to the share from Linux

CIFS a SMB – który protokół jest używany w bieżącej sesji do połączenia z udziałem plików? Sprawdź wersję SMB klientów podłączonych do udziału SMB na serwerze Windows Server za pomocą polecenia PowerShell w systemie Windows Server 2019:

Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect

Jak widać na wyjściu PowerShell, do naszego połączenia z systemu Ubuntu Linux używany jest protokół SMB 3.1.1. Protokół SMB 1.0/CIFS nie jest używany, gdy łączymy się za pomocą poleceń ` `, `cifs-utils`, ` ` oraz ` mount.cifs ` z serwerem plików skonfigurowanym na systemie Windows Server 2019.

What is SMB file share – how to check the SMB dialect used

Możemy również sprawdzić wersję protokołu SMB w pliku `/ /proc/mounts` za pomocą polecenia ` cat /proc/mounts ` w systemie Linux. Aby wyfiltrować tylko potrzebne wyniki, możemy użyć następującego polecenia:

cat /proc/mounts | grep cifs

Jak widać w wynikach, wersja protokołu używanego do łączenia się z udziałem plików jest oznaczona jako cifs, ale wyświetlana wersja to 3.1.1 (vers=3.1.1), co nie jest wersją CIFS. To kolejny przykład pokazujący, jak terminy SMB i CIFS mogą być mylone.

CIFS vs SMB – checking which SMB version is used for the current connection

W rzeczywistości używany jest protokół SMB 3.1.1, a nie CIFS. Możemy to udowodnić jeszcze jedną metodą, korzystając z nmap, czyli darmowego narzędzia do wykrywania sieci służącego do analizy i rozwiązywania problemów.

Aby zainstalować nmap w systemie Ubuntu, uruchom polecenie jako użytkownik root:

sudo apt-get install nmap

Aby przeskanować wszystkie hosty, które są online i podłączone do naszej sieci 192.168.101.0/24 , używamy polecenia:

nmap --script smb-protocols 192.168.101.0/24

Interesują nas wyniki dotyczące adresu 192.168.101.209, który jest adresem IP naszego serwera Windows Server 2019 pełniącego rolę serwera plików. System Linux jest podłączony do udziału plików na tym serwerze. W wynikach widzimy, że dialekty protokołów SMB obsługiwane przez nasz serwer Windows Server to 2.02, 2.10, 3.00, 3.02 i 3.11. Nie ma SMB 1.0/CIFS, mimo że termin CIFS jest nadal używany w plikach konfiguracyjnych i poleceniach systemu Linux.

CIFS vs SMB – checking which SMB dialects are supported on the server

Możemy ręcznie wymusić użycie CIFS, dodając parametr ` vers=1.0 ` w poleceniu ` mount ` w systemie Linux (po stronie klienta), aby podczas łączenia się z udziałem plików na zdalnym serwerze używać wyłącznie protokołu SMB 1.0/CIFS.

mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0

lub

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0

Wynik jest następujący:

Serwer nagle zamknął połączenie. Może się to zdarzyć, jeśli serwer nie obsługuje wersji SMB, której próbujesz użyć. Domyślna wersja SMB została niedawno zmieniona z SMB1 na SMB2.1 i nowsze .

Wynik ten pokrywa się z wcześniejszymi wynikami naszego badania porównującego SMB i CIFS w nowoczesnych systemach operacyjnych. Protokół CIFS nie jest używany, a SMB 1.0/CIFS jest wyłączony na naszym serwerze Windows Server.

Jeśli ustawimy, aby używano co najmniej SMB 2.0, wówczas możemy połączyć się z serwerem (pamiętaj o liście dialektów SMB obsługiwanych przez nasz serwer Windows Server 2019 wyświetlonej w nmap ):

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0

Connecting to an SMB share using the SMB2 dialect from Linux

Korzystając z graficznego interfejsu użytkownika w systemie Linux lub innych systemach operacyjnych, należy wpisać smb:// w pasku adresu podczas definiowania protokołu sieciowego, który ma być używany do połączenia się z udziałem plików na serwerze zdalnym.

Podając adres do udziału plików SMB, należy użyć:

smb://server-name/share-name

Nie należy używać:

cifs://server-name/share-name

, ponieważ klient będzie próbował połączyć się przy użyciu protokołu SMB1.0/CIFS, który może być wyłączony na serwerze (o ile klient w ogóle obsługuje składnię cifs:// ).

Wniosek

Ponieważ protokół CIFS jest już przestarzały, SMB jest jednym z protokołów używanych do łączenia się z pamięcią współdzieloną na serwerach plików i urządzeniach NAS (innym powszechnie stosowanym protokołem jest NFS). Ponieważ pamięć współdzielona jest szczególnie narażona na uszkodzenia danych, oprogramowanie wymuszające okup i inne zagrożenia, które mogą łatwo rozprzestrzeniać się w sieci, należy pamiętać o wykonywaniu kopii zapasowych plików i folderów przechowywanych na zasobach współdzielonych, aby uniknąć utraty danych. Zainfekowanie komputera nawet jednego użytkownika posiadającego uprawnienia do zapisu w plikach współdzielonych na udziale plików może spowodować utratę danych u wszystkich użytkowników. NAKIVO Backup & Replication to rozwiązanie do ochrony danych, które umożliwia wykonanie kopii zapasowej przyrostowej za pośrednictwem protokołów SMB i NFS dla danych przechowywanych na serwerach NAS oraz serwerach plików z systemami Windows i Linux.

Wypróbuj NAKIVO Backup & Replication

Wypróbuj NAKIVO Backup & Replication

Skorzystaj z bezpłatnej wersji próbnej, aby zapoznać się ze wszystkimi funkcjami rozwiązania w zakresie ochrony danych. 15 dni za darmo. Bez żadnych ograniczeń dotyczących funkcji ani pojemności. Nie jest wymagana karta kredytowa.

People also read