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 zdolność przesyłania dodatkowego żądania przed uzyskaniem odpowiedzi na poprzednie. Pakowanie wielu działań w jedno żądanie zmniejsza liczbę zapytań do klienta, co poprawia wydajność.

SMB 2.1

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

SMB 3.0

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

  • dodała SMB Direct (bezpośredni dostęp do pamięci), SMB Multichannel oraz Tryb failover SMB Transport
  • poprawiła bezpieczeństwo
  • dodała wsparcie dla szyfrowania end-to-end
  • poprawiła efektywność sieci poprzez zmniejszenie opóźnienia

SMB 3.0.2

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

SMB 3.1.1

Ta wersja stała się dostępna od Windows 10 i Windows Server 2016. Ulepszenia obejmują lepsze szyfrowanie (AES 128 GCM i AES 128 CCM) oraz skróty SHA-512 dla kontroli integralności przed uwierzytelnieniem.

SMB w Windows i Microsoft Server

SMB jest dostępny w Windows począwszy od Windows 3.1 (Windows dla Grup Roboczych). Wersje i zgodność SMB dla różnych wersji Windows są wyjaśnione w tabeli.

Kolumny i wiersze zawierają wersje Windows, które mogą działać jako klient lub serwer SMB (kolumny i wiersze są wymienne). Komórka na przecięciu kolumny i wiersza wyświetla, która wersja protokołu SMB jest używana do komunikacji między odpowiednimi wersjami 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

Win 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, nazwa serwera SMB dla systemu Linux to Samba ( samba to nazwa pakietu). Używamy serwera SMB w systemie Windows. Zatem nie potrzebujemy Samby w tym przykładzie, ale raczej potrzebujemy klienta SMB dla Ubuntu Linux.

Klient SMB dla Linuksa jest zawarty w pakiecie Linux CIFS Utils ( cifs-utils to nazwa pakietu). To właśnie tutaj pojawia się zamieszanie. Pierwsza wersja tego klienta dla Linuksa została stworzona w czasach, gdy SMB 1.0/CIFS był powszechnie używany. Protokół SMB został zaktualizowany, wersje SMB 2 i SMB 3 zostały wydane, ale nazwa klienta SMB dla Linuksa pozostaje taka sama, a pakiet zawierający klienta SMB nadal nazywa się CIFS Utils. Pakiet cifs-utils nie jest częścią samba .

Połączymy się z Linuksa za pomocą CIFS Utils do udziału plików znajdującego się na serwerze Windows Server 2019 aby sprawdzić, czy CIFS nadal jest używany. Aby zainstalować CIFS Utils, wykonaj następujące polecenie jako root:

sudo apt-get install cifs-utils

Utwórz katalog, który będzie używany 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

Używamy konta użytkownika administracyjnego Windows w naszym przykładzie dla celów edukacyjnych.

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

CIFS vs SMB – która jest używana w bieżącej sesji do łączenia z serwerem plików? Sprawdź wersję SMB klientów podłączonych do udziału SMB na serwerze Windows za pomocą polecenia PowerShell na Windows Server 2019:

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

Jak widać w wynikach PowerShell, SMB 3.1.1 jest używany do naszego połączenia z Ubuntu Linux. SMB 1.0/CIFS nie jest używany, gdy łączymy się z cifs-utils i poleceniem mount.cifs z serwerem plików skonfigurowanym na serwerze 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 /proc/mounts za pomocą polecenia cat /proc/mounts w systemie Linux. Możemy użyć następującego polecenia, aby przefiltrować tylko potrzebne wyniki:

cat /proc/mounts | grep cifs

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

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

W rzeczywistości używany jest SMB 3.1.1 a nie CIFS. Możemy to udowodnić jeszcze jedną metodą, używając nmap, który jest darmowym narzędziem do odkrywania sieci używanym do analizy i rozwiązywania problemów.

Aby zainstalować nmap w Ubuntu, uruchom komendę jako root:

sudo apt-get install nmap

Aby skanować wszystkie hosty, które są online i połączone z naszą siecią 192.168.101.0/24 , używamy polecenia:

nmap --script smb-protocols 192.168.101.0/24

Interesuje nas wyświetlenie wyniku dla 192.168.101.209, który jest adresem IP naszego serwera Windows Server 2019 działającego jako serwer udziału plików. Linux jest połączony z udziałem plików na tym serwerze. W wyniku widzimy, że dialekty dla protokołów SMB obsługiwane przez nasz Windows Server to 2.02, 2.10, 3.00, 3.02 i 3.11. Nie ma SMB 1.0/CIFS, chociaż termin CIFS nadal jest używany w plikach konfiguracyjnych i poleceniach Linuksa.

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

Możemy wymusić użycie CIFS ręcznie poprzez dodanie parametru vers=1.0 w poleceniu mount w Linuksie (po stronie klienta), aby używać tylko protokołu SMB 1.0/CIFS przy łączeniu z udziałem plików na zdalnym serwerze.

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

albo

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

Wynik jest następujący:

Serwer gwałtownie zakończył 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 zgadza się z poprzednimi wynikami naszego dochodzenia, dotyczącego SMB i CIFS na współczesnych systemach operacyjnych. CIFS nie jest używany, a SMB 1.0/CIFS jest wyłączony na naszym serwerze Windows.

Jeśli ustawimy użycie przynajmniej SMB 2.0, to możemy połączyć się z serwerem (pamiętaj o liście dialektów SMB obsługiwanych przez nasz Windows Server 2019 wyświetlanych 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

Podczas używania graficznego interfejsu użytkownika w Linuksie lub innym systemie operacyjnym, używaj smb:// w polu adresu przy definiowaniu protokołu sieciowego, jaki ma być użyty do łączenia się z udziałem plików na zdalnym serwerze.

Podczas wprowadzenia adresu do udziału plików SMB, należy użyć:

smb://server-name/share-name

Nie używaj:

cifs://server-name/share-name

ponieważ klient spróbuje połączyć się przy użyciu protokołu SMB1.0/CIFS, który może być wyłączony na serwerze (jeśli klient w ogóle obsługuje składnię cifs://).

Wniosek

Obecnie, gdy protokół CIFS jest przestarzały, SMB jest jednym z protokołów używanych do łączenia się z zasobami magazynowymi na serwerach plików i NAS (innym powszechnie używanym jest NFS). Ponieważ zasoby magazynowe są szczególnie narażone na uszkodzenie danych, oprogramowanie wymuszające okup i inne zagrożenia, które mogą łatwo rozprzestrzeniać się w sieci, upewnij się, że wykonujesz kopię zapasową plików i folderów przechowywanych na udostępnionych zasobach, aby uniknąć utraty danych. Zainfekowanie komputera choćby jednego użytkownika z uprawnieniami do zapisu na udostępnionych plikach może spowodować utratę danych dla 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