Protocolli di condivisione file CIFS e SMB: spiegazione delle differenze

Quando si tratta di selezionare un protocollo per condividere file in rete, nelle interfacce software e nella documentazione si incontrano spesso i termini SMB e CIFS. Alcuni utenti pensano che SMB e CIFS siano la stessa cosa e chiarire la differenza può risultare difficile. Tuttavia, vediamo perché CIFS non può essere usato come sinonimo di SMB. Scopri le differenze tra i protocolli SMB e CIFS e come usare i termini.

NAKIVO for NAS Data Backup

NAKIVO for NAS Data Backup

Fast backup and recovery for gigabytes of data on NAS devices and Windows and Linux file shares. Recover whatever you need and whenever you need in seconds.

Che cos’è SMB?

SMB, o Server Message Block, è un protocollo di rete che opera a livello di applicazione del modello di comunicazione OSI. SMB viene utilizzato per fornire accesso condiviso alle risorse sulla rete. Il protocollo SMB è ampiamente utilizzato per condividere file su file server, condividere file tra computer degli utenti e copiare file tra computer.

Oltre alla manipolazione dei file, altri casi d’uso di SMB sono la messaggistica e la stampa (transazioni remote generiche), nonché la navigazione tra i computer della 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. Sono configurate su file server ed è possibile configurare l’accesso in lettura e scrittura a queste condivisioni. Un file server può avere più condivisioni SMB.

Come funziona SMB: cosa fa SMB?

SMB funziona in base al 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/interrompono le connessioni alle condivisioni file
  • Pacchetti di accesso ai file, che, come suggerisce il nome, accedono alle condivisioni file e manipolano i file
  • Pacchetti di messaggi generici

SMB apre una sessione dopo aver stabilito una connessione e completato l’autenticazione. Quindi i messaggi SMB possono essere trasmessi attraverso questa sessione. Quando avvia una sessione, un client SMB invia un elenco delle sue capacità (le capacità 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 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 il loro invio in un’unica trasmissione per migliorare le prestazioni.

Ulteriori funzionalità includono 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 file.

L’IPC (inter-process connection) è noto anche come connessione di sessione nulla. La IPC$ condivisione creata da Windows viene utilizzata con connessioni temporanee tra client e server. Questa condivisione nascosta viene creata per condividere dati che non possono essere classificati come file/directory e stampanti, ad esempio utenti ed enumerazione delle condivisioni.

I sistemi Windows contengono un client e un server SMB nativi. Tuttavia, le versioni client di Windows hanno un limite al numero di utenti che possono connettersi a un host, a differenza delle versioni 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 del server SMB per Linux. Si noti che Samba consente anche di unire Linux a un dominio Active Directory e permette a Linux di agire come controller di dominio. Il software client SMB è disponibile anche su Linux (gratuitamente) e su altri sistemi operativi.

Che cos’è CIFS?

CIFS, o Common Internet File System, è una particolare implementazione o dialetto di SMB sviluppato da Microsoft nel 1996 dopo il 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. CIFS non è un file system, contrariamente a quanto suggerisce il nome.

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

Dialetti del protocollo SMB

Quando si parla dell’implementazione SMB1 da parte 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 SMB rilasciate dopo CIFS per comprendere meglio la differenza tra CIFS e altri dialetti (versioni) SMB (più recenti).

SMB 2.0

Microsoft ha rilasciato SMB 2.0 (o SMB2) nel 2006 con Windows Vista. Questa versione SMB è più affidabile di 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 migliori grazie ai meccanismi di elaborazione in pipeline, ovvero la possibilità di inviare una richiesta aggiuntiva prima di ottenere la risposta a quella precedente. Il raggruppamento di più azioni in un’unica richiesta riduce il numero di richieste al client, migliorando le prestazioni.

SMB 2.1

SMB 2.1 offre miglioramenti insignificanti 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
  • migliorata la sicurezza
  • aggiunto il supporto per la crittografia end-to-end
  • migliorata l’efficienza della 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 hash SHA-512 per i controlli di integrità pre-autenticazione.

SMB in Windows e Microsoft Server

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

Le colonne e le righe contengono le versioni di Windows che possono eseguire un client SMB o un server SMB (colonne e righe sono intercambiabili). Una cella all’intersezione di una colonna e una riga mostra 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 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 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 continuano a creare confusione tra gli utenti. A tal fine, supponiamo di utilizzare un file server con una condivisione file 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.

Abbiamo la seguente configurazione nei nostri ambienti:

  • 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 SMB1.0/CIFS, andare su Server Manager > Aggiungi ruoli e funzioni > Funzioni.

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

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 una maggiore sicurezza, ma è possibile abilitarlo manualmente se necessario.

Nota: Nel 2017 sono stati sferrati attacchi ransomware su vasta scala in tutto il mondo (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 suoi sistemi operativi da Windows XP a Windows Server 2003, nonostante questi sistemi operativi non fossero versioni ufficialmente supportate all’epoca. Microsoft ha raccomandato di utilizzare SMB 2 e SMB 3 (che supportano l’integrità pre-autenticazione) invece di SMB 1.0/CIFS.

Come accennato in precedenza, il nome del server SMB per Linux è Samba (samba è il nome del pacchetto). Noi utilizziamo un server SMB su Windows. Quindi 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). È da qui che nasce la confusione. La prima versione di questo client per Linux è stata creata in un momento in cui SMB 1.0/CIFS era ampiamente utilizzato. Il protocollo SMB è stato aggiornato, Sono state rilasciate le versioni SMB 2 e 3, ma il nome del client SMB per Linux è rimasto 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 alla sua ubicazione sulla condivisione SMB di Windows Server 2019 per scoprire 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

Connetti alla condivisione file SMB con l’ubicazione su un Server Windows remoto:

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

Nel nostro esempio utilizziamo un account utente amministratore 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? Verificate 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 possiamo vedere nell’output di PowerShell, SMB 3.1.1 viene utilizzato per la nostra connessione da Ubuntu Linux. 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

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

cat /proc/mounts | grep cifs

Come si può vedere 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 altro 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 al nostro 192.168.101.0/24 utilizziamo il comando:

nmap --script smb-protocols 192.168.101.0/24

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

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

Possiamo forzare manualmente l’uso di CIFS aggiungendo il vers=1.0 parametro nel mount in Linux (sul lato client) per utilizzare solo il protocollo SMB 1.0/CIFS durante la connessione 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 chiuso improvvisamente la connessione. Ciò può accadere se il server non supporta la versione SMB che si sta tentando di utilizzare. La versione SMB predefinita è stata recentemente modificata da SMB1 a SMB2.1 e versioni successive.

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

Se lo impostiamo per utilizzare almeno SMB 2.0, allora possiamo connetterci al server (ricordiamo 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 utente in Linux o in altri sistemi operativi, utilizzare smb:// nella barra degli indirizzi quando si definisce il protocollo di rete da utilizzare per la connessione 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

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

Conclusione

Ora che il protocollo CIFS è obsoleto, SMB è uno dei protocolli utilizzati per connettersi allo storage condiviso su file server e NAS (l’altro comunemente utilizzato è NFS). Poiché lo storage condiviso è particolarmente vulnerabile alla corruzione dei dati, al ransomware e ad altre minacce che possono facilmente diffondersi in rete, è importante eseguire il backup dei file e delle cartelle archiviati sulle risorse condivise per evitare la perdita di dati. L’infezione del computer di un solo utente con permessi di scrittura sui file condivisi può causare la perdita di dati per tutti gli utenti.

NAKIVO Backup & Replication & Replication è una soluzione di protezione dei dati che supporta backup incrementali su SMB e NFS dei dati residenti su NAS e file server Windows/Linux.

Try NAKIVO Backup & Replication

Try NAKIVO Backup & Replication

Get a free trial to explore all the solution’s data protection capabilities. 15 days for free. Zero feature or capacity limitations. No credit card required.

Le persone leggono anche