Protocolli di condivisione file CIFS e SMB: spiegazione delle differenze

Quando si tratta di scegliere un protocollo per la condivisione di file in rete, capita spesso di imbattersi nei termini SMB e CIFS nelle interfacce dei software e nella documentazione. Alcuni utenti pensano che SMB e CIFS siano la stessa cosa, e può risultare difficile individuare chiaramente la differenza. Tuttavia, vediamo perché CIFS non può essere usato come sinonimo di SMB. Scopri le differenze tra i protocolli SMB e CIFS e come utilizzare correttamente questi termini.

NAKIVO per il backup dei dati su NAS

NAKIVO per il backup dei dati su NAS

Backup e ripristino rapidi di gigabyte di dati su dispositivi NAS e condivisioni file su Windows e Linux. Ripristina tutto ciò che ti serve, quando ti serve, in pochi secondi.

Che cos’è SMB?

SMB, ovvero Server Message Block, è un protocollo di rete che opera a livello applicativo del modello di comunicazione OSI. SMB viene utilizzato per fornire l’accesso condiviso alle risorse in rete. Il protocollo SMB è ampiamente utilizzato per condividere file su file server, scambiare file tra computer degli utenti e copiare file da un computer all’altro.

Oltre alla gestione dei file, altri casi d’uso di SMB includono la messaggistica e la stampa (transazioni remote di carattere generale), nonché la navigazione tra i computer presenti in rete. IBM ha sviluppato SMB nel 1983 e da allora il protocollo è stato migliorato più volte.

Che cos’è la condivisione file SMB?

Le condivisioni file SMB sono directory su un host remoto rese disponibili tramite il protocollo SMB. Vengono configurate sui file server ed è possibile impostare l’accesso in lettura e scrittura a tali condivisioni. Un file server può avere più condivisioni file SMB.

Come funziona SMB: a cosa serve SMB?

SMB funziona secondo il principio della rete client-server. Il protocollo utilizza una serie di pacchetti di dati contenenti una richiesta inviata da un client o una risposta inviata da un server. I client possono connettersi a un server utilizzando un indirizzo IP o un nome host. Questi pacchetti di dati SMB possono essere classificati come:

  • Pacchetti di controllo della sessione, che stabiliscono o interrompono le connessioni alle condivisioni file
  • Pacchetti di accesso ai file, che, come suggerisce il nome, accedono alle condivisioni file e gestiscono i file
  • Pacchetti di messaggi generali

SMB apre una sessione dopo aver stabilito una connessione e completato l’autenticazione. A questo punto i messaggi SMB possono essere trasmessi attraverso questa sessione. All’avvio di una sessione, un client SMB invia un elenco delle proprie funzionalità (le funzionalità dipendono dalla versione SMB del client).

Il protocollo SMB può funzionare:

  • direttamente tramite TCP utilizzando la porta 445 (senza NetBIOS) – questo è l’approccio moderno.
  • tramite l’API NetBIOS utilizzando le porte UDP 137 e 138 e le porte TCP 137 e 139 – questo è l’approccio legacy utilizzato fino a Windows 2000. Le prime versioni di SMB utilizzavano NetBIOS su TCP/IP per il trasporto.

Il protocollo SMB supporta il batching, ovvero il raggruppamento di più messaggi e la loro trasmissione in un’unica operazione per migliorare le prestazioni.

Tra le funzionalità aggiuntive figurano i meccanismi di blocco dei file per proteggere i file condivisi quando più utenti aprono lo stesso file. Il blocco dei file consente di evitare che più utenti scrivano contemporaneamente sui dati, causando incongruenze nei dati all’interno di un file. L’IPC (Inter-Process Connection) è noto anche come connessione a sessione nulla. La condivisione IPC ” “$ creata da Windows viene utilizzata per le connessioni temporanee tra client e server. Questa condivisione nascosta viene creata per condividere dati che non possono essere classificati come file/cartelle e stampanti, ad esempio gli utenti e l’enumerazione delle condivisioni.

I sistemi Windows contengono un client e un server SMB nativi. Tuttavia, le versioni client di Windows presentano un limite al numero di utenti che possono connettersi a un host, a differenza delle versioni di Windows Server, che non hanno tali limitazioni.

  • Windows XP e Vista – massimo 10 connessioni simultanee
  • Windows 7 e Windows 10 – massimo 20 connessioni simultanee

Un server SMB su Linux viene installato configurando Samba, che è un’implementazione gratuita di server SMB per Linux. Si noti che Samba consente anche di aggiungere Linux a un dominio Active Directory e permette a Linux di fungere da controller di dominio. Il software client SMB è disponibile anche su Linux (gratuitamente) e su altri sistemi operativi.

Che cos’è il CIFS?

Il CIFS, o Common Internet File System, è una particolare implementazione o dialetto di SMB sviluppato da Microsoft nel 1996 in seguito al rilascio di Windows 95. Un dialetto è una versione e non un protocollo indipendente separato. Un dialetto è un insieme di pacchetti di messaggi inviati/ricevuti per la comunicazione tra host che definisce una particolare versione del protocollo. Il CIFS non è un file system, contrariamente a quanto suggerisce il nome.

La specifica del protocollo CIFS si basa sul protocollo SMB originale, ma con alcune funzioni aggiuntive introdotte da Microsoft. Microsoft ha implementato connessioni dirette tramite TCP e la porta 445 senza utilizzare NetBIOS su TCP (che era utilizzato nelle prime implementazioni di SMB 1). CIFS è un’implementazione di SMB 1 e non un protocollo separato per la condivisione dei file.

Dialetti del protocollo SMB

Quando si parla dell’implementazione SMB1 di Microsoft, è possibile utilizzare il termine CIFS. In tutti gli altri casi, e in generale, SMB è il termine corretto per riferirsi a questo protocollo di rete. Diamo un’occhiata più da vicino alle versioni di SMB rilasciate dopo CIFS per comprendere meglio la differenza tra CIFS e altri (più recenti) dialetti (versioni) SMB.

SMB 2.0

Microsoft ha rilasciato SMB 2.0 (o SMB2) nel 2006 con Windows Vista. Questa versione di SMB è più affidabile rispetto a SMB 1.0/CIFS e non è CIFS. Il numero di comandi necessari per trasferire i file è stato ridotto da oltre 100 a 20. Le prestazioni sono superiori grazie ai meccanismi di elaborazione in pipeline, ovvero alla possibilità di inviare una richiesta aggiuntiva prima di ricevere la risposta alla precedente. Raggruppare più azioni in un’unica richiesta riduce il numero di richieste inviate a un client, migliorando così le prestazioni.

SMB 2.1

SMB 2.1 offre miglioramenti trascurabili in termini di prestazioni e meccanismi di blocco rispetto a SMB 2.0. Questa versione del protocollo è stata rilasciata con Windows 7 e Windows Server 2008 R2.

SMB 3.0

Inizialmente, questa versione del protocollo era denominata SMB 2.2, ma è stata successivamente rinominata SMB 3.0 con Windows 8. La versione SMB 3.0:

  • ha aggiunto SMB Direct (accesso diretto alla memoria), SMB Multichannel e SMB Failover
  • ha migliorato la sicurezza
  • ha aggiunto il supporto per la crittografia end-to-end
  • ha migliorato l’efficienza di rete riducendo la latenza

SMB 3.0.2

SMB 3.0.2 o 3.02 è disponibile a partire da Windows 8.1 e Windows Server 2012 R2. In questa versione, la compatibilità con SMB 1.0 può essere disattivata per migliorare la sicurezza.

SMB 3.1.1

Questa versione è disponibile a partire da Windows 10 e Windows Server 2016. I miglioramenti includono una crittografia più avanzata (AES 128 GCM e AES 128 CCM) e l’hash SHA-512 per i controlli di integrità pre-autenticazione.

SMB in Windows e Microsoft Server

SMB è disponibile in Windows a partire da Windows 3.1 (Windows for Workgroups). Le versioni di SMB e la compatibilità con le diverse versioni di Windows sono illustrate nella tabella.

Le colonne e le righe contengono le versioni di Windows in grado di eseguire un client SMB o un server SMB (colonne e righe sono intercambiabili). Una cella all’intersezione tra una colonna e una riga indica quale versione del protocollo SMB viene utilizzata per la comunicazione tra le rispettive versioni di Windows.

Windows 10

Server 2016 e versioni successive

Windows 8.1

Server 2012 R2

Windows 8

Server 2012

Windows 7

Server 2008 R2

Windows Vista

Server 2008

Win XP, Server 2003 e versioni precedenti
Windows 10

Server 2016 e versioni successive

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 e versioni precedenti SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

CIFS vs SMB: l’origine della confusione

Scopriamo con un esempio perché i termini CIFS e SMB vengono ancora confusi dagli utenti. Per farlo, supponiamo di utilizzare un file server con una condivisione SMB configurata su Windows Server 2019 e una macchina Linux che si connette a questo file server tramite il protocollo SMB. Ubuntu 20.04 è la distribuzione Linux che utilizziamo in questo esempio. Si noti che la configurazione è la stessa per Ubuntu 22.

Nei nostri ambienti abbiamo la seguente configurazione:

  • Windows Server 2019: 192. 168.101.209
  • Linux Ubuntu 20.04: 192. 168.101.210
  • Condivisione SMB su Windows Server: 192.168.101.209share

In Windows Server 2019, il protocollo SMB 1.0/CIFS è disabilitato per impostazione predefinita. Per verificare queste impostazioni e abilitare/disabilitare manualmente il client e il server SMB 1.0/CIFS, visitare Server Manager > Add Roles and Features > Features.

Sul nostro computer con Windows Server 2019 manteniamo SMB 1.0/CIFS disabilitato. Ciò significa che per impostazione predefinita viene utilizzato SMB 3, con la possibilità di passare a SMB 2 per garantire la compatibilità con i client che utilizzano versioni (dialetti) SMB 2.

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

Il protocollo CIFS è disabilitato per impostazione predefinita nelle versioni moderne di Windows, come Windows 10, per garantire una maggiore sicurezza; è possibile abilitarlo manualmente se necessario.

Nota: Nel 2017 sono stati sferrati attacchi ransomware su vasta scala a livello mondiale (WannaCry e NotPetya) sfruttando le vulnerabilità di SMB 1. Questi exploit sono stati denominati EternalBlue, EternalRomance ed EternalChampion. Microsoft ha rilasciato patch di sicurezza per i propri sistemi operativi a partire da Windows XP e Windows Server 2003, nonostante all’epoca tali sistemi operativi non fossero più ufficialmente supportati. Microsoft ha raccomandato l’utilizzo di SMB 2 e SMB 3 (che supportano l’integrità pre-autenticazione) al posto di SMB 1.0/CIFS. Come accennato in precedenza, il nome del server SMB per Linux è Samba ( samba è il nome del pacchetto). Su Windows utilizziamo un server SMB. Pertanto, in questo esempio non abbiamo bisogno di Samba, ma piuttosto di un client SMB per Ubuntu Linux.

Un client SMB per Linux è incluso in Linux CIFS Utils ( cifs-utils è il nome del pacchetto). È proprio da qui che nasce la confusione. La prima versione di questo client per Linux è stata creata in un’epoca in cui SMB 1.0/CIFS era ampiamente utilizzato. Il protocollo SMB è stato aggiornato, sono state rilasciate le versioni 2 e 3 di SMB, ma il nome del client SMB per Linux rimane lo stesso e il pacchetto che include il client SMB si chiama ancora CIFS Utils. Il pacchetto cifs-utils non fa parte di samba .

Ci collegheremo da Linux utilizzando CIFS Utils a una condivisione SMB situata su Windows Server 2019 per verificare se CIFS è ancora in uso. Per installare CIFS Utils, eseguire il seguente comando con privilegi di root:

sudo apt-get install cifs-utils

Creare una directory da utilizzare come punto di montaggio per la condivisione SMB:

mkdir /mnt/share

Connettersi alla condivisione file SMB situata su un file server Windows remoto:

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

Nel nostro esempio utilizziamo un account utente amministratore di Windows a scopo didattico.

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

CIFS vs SMB – quale dei due viene utilizzato nella sessione corrente per la connessione al file server? Verifica la versione SMB dei client connessi alla condivisione SMB su Windows Server con il comando PowerShell su Windows Server 2019:

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

Come si può vedere dall’output di PowerShell, per la nostra connessione da Ubuntu Linux viene utilizzato SMB 3.1.1. SMB 1.0/CIFS non viene utilizzato quando ci connettiamo con cifs-utils e il comando mount.cifs a un file server configurato su Windows Server 2019.

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

Possiamo anche verificare la versione del protocollo SMB in /proc/mounts con il comando cat /proc/mounts in Linux. Possiamo utilizzare il seguente comando per filtrare solo i risultati necessari:

cat /proc/mounts | grep cifs

Come si vede nell’output, la versione del protocollo per la connessione alla condivisione file è contrassegnata come cifs, ma la versione visualizzata è 3.1.1 (vers=3.1.1), che non è una versione di CIFS. Questo è un ulteriore esempio che mostra come i termini SMB e CIFS possano creare confusione.

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

In realtà, viene utilizzato SMB 3.1.1 e non CIFS. Possiamo dimostrarlo con un altro metodo utilizzando nmap, uno strumento gratuito di rilevamento della rete utilizzato per l’analisi e la risoluzione dei problemi.

Per installare nmap in Ubuntu, eseguire il comando come root:

sudo apt-get install nmap

Per eseguire la scansione di tutti gli host online e connessi alla nostra rete 192.168.101.0/24 , utilizziamo il comando:

nmap --script smb-protocols 192.168.101.0/24

. Ci interessa visualizzare il risultato relativo a 192.168.101.209, che è l’indirizzo IP del nostro Windows Server 2019 che funge da file server. Il sistema Linux è connesso alla condivisione file su questo server. Nell’output vediamo che i dialetti dei protocolli SMB supportati dal nostro Windows Server sono 2.02, 2.10, 3.00, 3.02 e 3.11. Non è presente SMB 1.0/CIFS, anche se il termine CIFS viene ancora utilizzato nei file di configurazione e nei comandi di Linux.

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

È possibile forzare manualmente l’uso di CIFS aggiungendo il parametro vers=1.0 nel comando mount in Linux (dal lato client) per utilizzare esclusivamente il protocollo SMB 1.0/CIFS quando ci si connette a una condivisione file su un server remoto.

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

o

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

Il risultato è il seguente:

Il server ha interrotto bruscamente la connessione. Ciò può accadere se il server non supporta la versione SMB che si sta tentando di utilizzare. La versione predefinita di SMB è stata recentemente modificata da SMB1 a SMB2.1 e successive .

Questo risultato corrisponde ai risultati precedenti della nostra indagine su SMB vs CIFS nei sistemi operativi moderni. CIFS non viene utilizzato e SMB 1.0/CIFS è disabilitato sul nostro Windows Server.

Se impostiamo l’utilizzo di almeno SMB 2.0, allora possiamo collegarci al server (ricordate l’elenco dei dialetti SMB supportati dal nostro Windows Server 2019 visualizzato in 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

Quando si utilizza l’interfaccia grafica in Linux o in altri sistemi operativi, utilizzare smb:// nella barra degli indirizzi quando si definisce il protocollo di rete da utilizzare per collegarsi a una condivisione file su un server remoto.

Quando si immette l’indirizzo di una condivisione file SMB, è necessario utilizzare:

smb://server-name/share-name

Non utilizzare:

cifs://server-name/share-name

poiché il client tenterà di connettersi utilizzando il protocollo SMB1.0/CIFS, che potrebbe essere disabilitato sul server (ammesso che il client supporti la sintassi cifs:// ).

Conclusione

Ora che il protocollo CIFS è obsoleto, SMB è uno dei protocolli utilizzati per connettersi allo spazio di archiviazione condiviso su file server e NAS (l’altro comunemente utilizzato è NFS). Poiché lo spazio di archiviazione condiviso è particolarmente vulnerabile al danneggiamento dei dati, al ransomware e ad altre minacce che possono diffondersi facilmente in rete, assicuratevi di eseguire il backup di file e cartelle archiviati su risorse condivise per evitare la perdita di dati. L’infezione del computer anche di un solo utente con autorizzazioni di scrittura sui file condivisi può causare la perdita di dati per tutti gli utenti. NAKIVO Backup & Replication è una soluzione per la protezione dei dati che supporta il backup incrementale tramite SMB e NFS dei dati presenti su dispositivi NAS e file server Windows/Linux.

Prova NAKIVO Backup & Replication

Prova NAKIVO Backup & Replication

Richiedi una prova gratuita per scoprire tutte le funzionalità di protezione dei dati offerte dalla soluzione. 15 giorni gratuiti. Nessuna limitazione in termini di funzionalità o capacità. Non è obbligatoria alcuna carta di credito.

Le persone leggono anche