Lorsqu’il s’agit de choisir un protocole pour partager des fichiers sur le réseau, vous rencontrez souvent les termes SMB et CIFS dans les interfaces logicielles et la documentation. Certains utilisateurs pensent que SMB et CIFS sont la même chose, et identifier clairement la différence peut être difficile. Cependant, examinons pourquoi CIFS ne peut pas être utilisé comme synonyme de SMB. Apprenez les différences entre les protocoles SMB et CIFS et comment utiliser les termes.
Qu’est-ce que SMB?
SMB, ou Server Message Block, est un protocole réseau fonctionnant au niveau de la couche application du modèle de communication OSI. SMB est utilisé pour fournir un accès partagé aux ressources sur le réseau. Le protocole SMB est largement utilisé pour partager des fichiers sur des serveurs de fichiers, partager des fichiers entre des ordinateurs utilisateurs et copier des fichiers entre des ordinateurs.
En plus de manipuler des fichiers, l’autre cas d’utilisation pour SMB est la messagerie et l’impression (transactions à distance à usage général), ainsi que la navigation sur les ordinateurs du réseau. IBM a développé SMB en 1983, et depuis lors, le protocole a été amélioré à plusieurs reprises.
Qu’est-ce qu’un partage de fichiers SMB?
Les partages de fichiers SMB sont des répertoires sur un hôte distant qui sont rendus disponibles via le protocole SMB. Ils sont configurés sur des serveurs de fichiers, et l’accès en lecture et en écriture peut être configuré pour ces partages. Un serveur de fichiers peut avoir plusieurs partages SMB.
Fonctionnement de SMB: Que fait SMB?
SMB fonctionne sur le principe réseau client-serveur. Le protocole utilise un ensemble de paquets de données contenant une demande envoyée par un client ou une réponse envoyée par un serveur. Les clients peuvent se connecter à un serveur en utilisant une adresse IP ou un nom d’hôte. Ces paquets de données SMB peuvent être classés comme suit:
- Paquets de contrôle de session, qui établissent/arrêtent les connexions aux partages de fichiers
- Paquets d’accès aux fichiers, qui, comme son nom l’indique, accèdent aux partages de fichiers et manipulent les fichiers
- Paquets de messages généraux
SMB ouvre une session après avoir établi une connexion et complété l’authentification. Ensuite, des messages SMB peuvent être transmis à travers cette session. Lors de l’initiation d’une session, un client SMB envoie une liste de ses capacités (les capacités dépendent de la version SMB du client).
Le protocole SMB peut fonctionner:
- directement via TCP en utilisant le port 445 (sans NetBIOS) – c’est l’approche moderne.
- via l’API NetBIOS en utilisant les ports UDP 137 et 138 et les ports TCP 137 et 139 – c’est l’approche héritée utilisée jusqu’à Windows 2000. Les premières versions de SMB utilisaient NetBIOS sur TCP/IP pour le transport.
Le protocole SMB prend en charge le regroupement, c’est-à-dire regrouper plusieurs messages et les envoyer en une seule transmission pour améliorer les performances.
Les fonctionnalités supplémentaires incluent les mécanismes de verrouillage de fichiers pour protéger les fichiers partagés lorsque plusieurs utilisateurs ouvrent le même fichier. Le verrouillage des fichiers permet d’éviter que les données ne soient écrites par plusieurs utilisateurs simultanément et de causer des incohérences de données dans un fichier.
IPC (connexion inter-processus) est également connu sous le nom de connexion de session nulle. Le partage IPC$ créé par Windows est utilisé avec des connexions temporaires entre les clients et les serveurs. Ce partage caché est créé pour partager des données qui ne peuvent pas être classées comme des fichiers/répertoires et des imprimantes, par exemple, les utilisateurs et l’énumération des partages.
Les systèmes Windows contiennent un client et un serveur SMB natifs. Cependant, les versions client de Windows ont une limite sur le nombre d’utilisateurs pouvant se connecter à un hôte, contrairement aux versions Windows Server, qui n’ont pas de telles limitations.
- Windows XP et Vista – maximum 10 connexions simultanées
- Windows 7 et Windows 10 – maximum 20 connexions simultanées
Un serveur SMB sur Linux est installé en configurant Samba, qui est une implémentation gratuite de serveur SMB pour Linux. Notez que Samba permet également de joindre Linux à un domaine Active Directory et permet à Linux de se comporter comme un contrôleur de domaine. Un logiciel client SMB est également disponible sur Linux (gratuitement) et sur d’autres systèmes d’exploitation.
Qu’est-ce que CIFS?
CIFS, ou Common Internet File System, est une implémentation ou un dialecte particulier de SMB développé par Microsoft en 1996 après la sortie de Windows 95. Un dialecte est une version et non un protocole indépendant séparé. Un dialecte est un ensemble de paquets de messages envoyés/reçus pour communiquer entre des hôtes qui définit une version de protocole particulière. CIFS n’est pas un système de fichiers, contrairement à ce que son nom suggère.
La spécification du protocole CIFS est basée sur le protocole SMB original mais avec quelques fonctionnalités supplémentaires ajoutées par Microsoft. Microsoft a mis en œuvre des connexions directes via TCP et le port 445 sans utiliser NetBIOS sur TCP (qui était utilisé sur les premières implémentations SMB 1). CIFS est une implémentation de SMB 1 et non un protocole de partage de fichiers séparé.
Dialectes du protocole SMB
Lorsque nous parlons de la mise en œuvre SMB1 par Microsoft, nous pouvons utiliser le terme CIFS. Dans tous les autres cas, et en général, SMB est le terme correct pour désigner ce protocole réseau. Examinons de plus près les versions SMB publiées après CIFS afin de mieux comprendre la différence entre CIFS et les autres (plus récentes) dialectes (versions) SMB.
SMB 2.0
Microsoft a publié SMB 2.0 (ou SMB2) en 2006 avec Windows Vista. Cette version SMB est plus fiable que SMB 1.0/CIFS, et ce n’est pas CIFS. Le nombre de commandes nécessaires pour transférer des fichiers est réduit de plus de 100 à 20. Les performances sont plus élevées grâce aux mécanismes de traitement en pipeline, c’est-à-dire la capacité d’envoyer une demande supplémentaire avant de recevoir la réponse à la précédente. Regrouper plusieurs actions dans une seule demande réduit le nombre de demandes à un client, ce qui améliore les performances.
SMB 2.1
SMB 2.1 apporte des améliorations insignifiantes en termes de performances et de mécanismes de blocage par rapport à SMB 2.0. Cette version du protocole a été publiée avec Windows 7 et Windows Server 2008 R2.
SMB 3.0
Au départ, cette version du protocole était appelée SMB 2.2, mais elle a ensuite été renommée SMB 3.0 avec Windows 8. La version SMB 3.0:
- a ajouté SMB Direct (accès direct à la mémoire), SMB Multicanal et le basculement du transport SMB
- a amélioré la sécurité
- a ajouté la prise en charge du chiffrement de bout en bout
- a amélioré l’efficacité du réseau en réduisant la latence
SMB 3.0.2
SMB 3.0.2 ou 3.02 est disponible depuis Windows 8.1 et Windows Server 2012 R2. Dans cette version, la compatibilité SMB 1.0 peut être désactivée pour améliorer la sécurité.
SMB 3.1.1
Cette version est disponible à partir de Windows 10 et Windows Server 2016. Les améliorations incluent un meilleur chiffrement (AES 128 GCM et AES 128 CCM) et un hachage SHA-512 pour les vérifications d’intégrité de pré-authentification.
SMB dans Windows et Microsoft Server
SMB est disponible dans Windows à partir de Windows 3.1 (Windows pour Workgroups). Les versions SMB et la compatibilité avec différentes versions de Windows sont expliquées dans le tableau.
Les colonnes et les lignes contiennent les versions de Windows pouvant exécuter un client SMB ou un serveur SMB (les colonnes et les lignes sont interchangeables). Une cellule à l’intersection d’une colonne et d’une ligne affiche la version du protocole SMB utilisée pour la communication entre les versions respectives de Windows.
Windows 10
Server 2016 et ultérieur |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win XP, Server 2003 et antérieurs | |
Windows 10
Server 2016 et ultérieur |
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 et antérieurs | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS vs SMB: La Source Probable de la Confusion
Découvrons à l’aide d’un exemple pourquoi les termes CIFS et SMB sont encore confondus par les utilisateurs. Pour ce faire, disons que nous utilisons un serveur de fichiers avec un partage SMB configuré sur Windows Server 2019 et une machine Linux se connectant à ce serveur de fichiers via le protocole SMB. Ubuntu 20.04 est la distribution Linux que nous utilisons dans cet exemple. Notez que la configuration est la même pour Ubuntu 22.
Nous avons la configuration suivante dans nos environnements :
- Windows Server 2019 : 192.168.101.209
- Linux Ubuntu 20.04 : 192.168.101.210
- Partage SMB sur Windows Server : \\192.168.101.209\share
Sur Windows Server 2019, le protocole SMB 1.0/CIFS est désactivé par défaut. Pour vérifier ce paramètre et activer/désactiver le client et le serveur SMB1.0/CIFS manuellement, accédez à Gestionnaire de serveur > Ajouter des rôles et des fonctionnalités > Fonctionnalités.
Nous maintenons SMB 1.0/CIFS désactivé sur notre machine Windows Server 2019. Cela signifie que SMB 3 est utilisé par défaut avec la possibilité de passer à SMB 2 pour la compatibilité avec les clients utilisant des versions (dialectes) SMB 2.
Le protocole CIFS est désactivé par défaut dans les versions récentes de Windows comme Windows 10 pour une meilleure sécurité, et vous pouvez l’activer manuellement si nécessaire.
Remarque : En 2017, des attaques mondiales massives de ransomware (WannaCry et NotPetya) ont été menées en exploitant les vulnérabilités de SMB 1. Ces exploits ont été surnommés EternalBlue, EternalRomance et EternalChampion. Microsoft a publié des correctifs de sécurité pour ses systèmes d’exploitation à partir de Windows XP et Windows Server 2003, bien que ces OS n’étaient pas officiellement pris en charge à ce moment-là. Microsoft recommandait d’utiliser SMB 2 et SMB 3 (prend en charge l’intégrité de la pré-authentification) au lieu d’utiliser SMB 1.0/CIFS.
Comme mentionné ci-dessus, le nom du serveur SMB pour Linux est Samba (samba est le nom du package). Nous utilisons un serveur SMB sur Windows. Donc, nous n’avons pas besoin de Samba dans cet exemple, mais nous avons besoin plutôt d’un client SMB pour Ubuntu Linux.
Un client SMB pour Linux est inclus dans Linux CIFS Utils (cifs-utils est le nom du package). C’est là que vient la confusion. La première version de ce client pour Linux a été créée à une époque où SMB 1.0/CIFS était largement utilisé. Le protocole SMB a été mis à jour, les versions SMB 2 et 3 ont été publiées, mais le nom du client SMB Linux est resté le même, et le package comprenant le client SMB est toujours appelé CIFS Utils. Le package cifs-utils ne fait pas partie de samba.
Nous allons nous connecter depuis Linux en utilisant CIFS Utils à un partage SMB situé sur Windows Server 2019 pour savoir si CIFS est encore utilisé. Pour installer CIFS Utils, exécutez la commande suivante avec des privilèges root:
sudo apt-get install cifs-utils
Créez un répertoire à utiliser comme point de montage pour le partage SMB:
mkdir /mnt/share
Connectez-vous au partage de fichiers SMB situé sur un serveur de fichiers Windows distant:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
Nous utilisons un compte utilisateur administrateur Windows dans notre exemple à des fins éducatives.
CIFS vs SMB – lequel est utilisé dans la session actuelle pour se connecter au serveur de fichiers ? Vérifiez la version SMB des clients connectés au partage SMB sur Windows Server avec la commande PowerShell sur Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Comme nous pouvons le constater dans la sortie PowerShell, SMB 3.1.1 est utilisé pour notre connexion depuis Ubuntu Linux. SMB 1.0/CIFS n’est pas utilisé lorsque nous nous connectons avec cifs-utils et la commande mount.cifs à un serveur de fichiers configuré sur Windows Server 2019.
Nous pouvons également vérifier la version du protocole SMB dans /proc/mounts avec la commande cat /proc/mounts sous Linux. Nous pouvons utiliser la commande suivante pour filtrer uniquement les résultats nécessaires :
cat /proc/mounts | grep cifs
Comme nous pouvons le voir dans la sortie, la version du protocole pour la connexion au partage de fichiers est marquée cifs, mais la version affichée est 3.1.1 (vers=3.1.1), ce qui n’est pas une version de CIFS. Il s’agit d’un exemple supplémentaire montrant comment les termes SMB et CIFS peuvent prêter à confusion.
En fait, c’est SMB 3.1.1 qui est utilisé et non CIFS. Nous pouvons le prouver avec une méthode supplémentaire en utilisant nmap, qui est un outil de découverte réseau gratuit utilisé pour l’analyse et la résolution des problèmes.
Pour installer nmap sur Ubuntu, exécutez la commande suivante en tant que root :
sudo apt-get install nmap
Pour analyser tous les hôtes en ligne et connectés à notre réseau 192.168.101.0/24, nous utilisons la commande suivante :
nmap --script smb-protocols 192.168.101.0/24
Nous sommes intéressés par la visualisation du résultat pour 192.168.101.209, qui est l’adresse IP de notre serveur Windows Server 2019 qui fonctionne en tant que serveur de fichiers. Linux est connecté au partage de fichiers sur ce serveur. Dans la sortie, nous voyons que les dialectes des protocoles SMB pris en charge par notre serveur Windows sont 2.02, 2.10, 3.00, 3.02 et 3.11. Il n’y a pas de SMB 1.0/CIFS, même si le terme CIFS est encore utilisé dans les fichiers de configuration et les commandes Linux.
Nous pouvons forcer l’utilisation de CIFS manuellement en ajoutant le paramètre vers=1.0 dans la commande mount dans Linux (côté client) pour utiliser uniquement le protocole SMB 1.0/CIFS lors de la connexion à un partage de fichiers sur un serveur distant.
mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
ou
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
Le résultat est le suivant:
Le serveur a fermé la connexion brusquement. Cela peut se produire si le serveur ne prend pas en charge la version SMB que vous essayez d’utiliser. La version SMB par défaut a récemment changé de SMB1 à SMB2.1 et supérieure.
Ce résultat correspond aux résultats précédents de notre enquête SMB vs CIFS dans les systèmes d’exploitation modernes. CIFS n’est pas utilisé, et SMB 1.0/CIFS est désactivé sur notre serveur Windows.
Si nous le configurons pour utiliser au moins SMB 2.0, alors nous pouvons nous connecter au serveur (rappelez-vous la liste des dialectes SMB pris en charge par notre serveur Windows Server 2019 affichée dans nmap):
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
Lors de l’utilisation de l’interface utilisateur graphique sous Linux ou d’autres systèmes d’exploitation, utilisez smb:// dans la barre d’adresse pour définir le protocole réseau à utiliser pour se connecter à un partage de fichiers sur un serveur distant.
Lors de la saisie de l’adresse d’un partage de fichiers SMB, vous devez utiliser :
smb://nom-du-serveur/nom-du-partage
Ne pas utiliser :
cifs://nom-du-serveur/nom-du-partage
car le client essaiera de se connecter en utilisant le protocole SMB1.0/CIFS, qui peut être désactivé sur un serveur (si le client prend en charge la syntaxe cifs://).
Conclusion
Maintenant que le protocole CIFS est obsolète, SMB est l’un des protocoles utilisés pour se connecter au stockage partagé sur les serveurs de fichiers et les NAS (l’autre protocole couramment utilisé étant NFS). Étant donné que le stockage partagé est particulièrement vulnérable à la corruption des données, aux ransomwares et à d’autres menaces qui peuvent se propager facilement sur un réseau, assurez-vous de sauvegarder les fichiers et les dossiers stockés sur des ressources partagées pour éviter toute perte de données. L’infection de l’ordinateur même d’un seul utilisateur disposant des permissions d’écriture sur des fichiers partagés peut entraîner une perte de données pour tous les utilisateurs.
Nakivo Backup & Replication est une solution de protection des données qui prend en charge les sauvegardes incrémentielles sur SMB et NFS des données résidant sur les NAS et les serveurs de fichiers Windows/Linux.