Protocoles de partage de fichiers CIFS et SMB : explication des différences
Lorsqu’il s’agit de choisir un protocole pour le partage de 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 identiques, et il peut être difficile de distinguer clairement la différence entre les deux. Cependant, voyons pourquoi CIFS ne peut pas être utilisé comme synonyme de SMB. Découvrez les différences entre les protocoles SMB et CIFS et comment utiliser ces 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 les ordinateurs des utilisateurs et copier des fichiers entre les ordinateurs.
Outre la manipulation de fichiers, le cas d’utilisation principal de SMB est la messagerie et l’impression (transactions à distance à usage général), ainsi que la possibilité de parcourir les ordinateurs du réseau. IBM a développé SMB en 1983, et depuis lors, le protocole a été amélioré plusieurs fois.
Qu’est-ce que le partage de fichiers SMB ?
Les partages de fichiers SMB sont des répertoires sur un hôte distant qui sont mis à disposition 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.
Comment fonctionne SMB : que fait SMB ?
SMB fonctionne selon le principe du réseau client-serveur. Le protocole utilise un ensemble de paquets de données qui contiennent une requête envoyée par un client ou une réponse envoyée par un serveur. Les clients peuvent se connecter à un serveur par l’intermédiaire d’une adresse IP ou d’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/interrompent les connexions aux partages de fichiers
- Paquets d’accès aux fichiers, qui, comme leur 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 terminé l’authentification. Les messages SMB peuvent alors être transmis via cette session. Lors du lancement 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 par TCP en utilisant le port 445 (sans NetBIOS) – il s’agit de l’approche moderne.
- via l’API NetBIOS par l’utilisation des ports UDP 137 et 138 et des ports TCP 137 et 139 – il s’agit de 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 traitement par lots, c’est-à-dire le regroupement de plusieurs messages et leur envoi en une seule transmission afin d’améliorer les performances.
Parmi les fonctionnalités supplémentaires, on trouve des mécanismes de verrouillage de fichiers afin de protéger les fichiers partagés lorsque plusieurs utilisateurs ouvrent le même fichier. Le verrouillage des fichiers permet d’éviter que plusieurs utilisateurs n’écrivent simultanément des données et ne provoquent ainsi une incohérence des données dans un fichier.
L’IPC (connexion interprocessus) est également connu sous le nom de connexion de session nulle. Le IPC$ partagé 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 sous Linux est installé par la configuration de Samba, qui est une implémentation gratuite de serveur SMB pour Linux. Notez que Samba vous permet également de joindre Linux à un domaine Active Directory et permet à Linux d’agir comme contrôleur de domaine. Le logiciel client SMB est également disponible sur Linux (gratuitement) et sur d’autres systèmes d’exploitation.
Qu’est-ce que le CIFS ?
Le CIFS, ou Common Internet File System, est une implémentation ou un dialecte particulier du SMB développé par Microsoft en 1996 après la version de Windows 95. Un dialecte est une version et non un protocole indépendant distinct. Un dialecte est un ensemble de paquets de messages envoyés/reçus pour communiquer entre des hôtes qui définit une version particulière du protocole. Contrairement à ce que son nom suggère, le CIFS n’est pas un système de fichiers.
La spécification du protocole CIFS est basée sur le protocole SMB original, mais avec certaines fonctionnalités supplémentaires ajoutées par Microsoft. Microsoft a implémenté des connexions directes via TCP et le port 445 sans utiliser NetBIOS sur TCP (qui était utilisé dans les premières implémentations SMB 1). CIFS est une implémentation de SMB 1 et non un protocole de partage de fichiers distinct.
Dialectes du protocole SMB
Lorsque nous parlons de l’implémentation 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 dialectes (versions) SMB (plus récents).
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 supérieures grâce aux mécanismes de traitement en pipeline, c’est-à-dire la possibilité d’envoyer une requête supplémentaire avant d’obtenir la réponse à la précédente. Le regroupement de plusieurs actions en une seule requête réduit le nombre de requêtes adressées à 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é lancée avec Windows 7 et Windows Server 2008 R2.
SMB 3.0
Au départ, cette version du protocole s’appelait 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 Multichannel et SMB Basculement
- a amélioré la sécurité
- a ajouté la prise en charge du chiffrement de bout en bout
- amélioration de l’efficacité du réseau par la réduction de 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 comprennent un meilleur chiffrement (AES 128 GCM et AES 128 CCM) et un hachage SHA-512 pour les contrôles d’intégrité pré-authentification.
SMB dans Windows et Microsoft Server
SMB est disponible dans Windows à partir de Windows 3.1 (Windows pour groupes de travail). Les versions SMB et la compatibilité avec les différentes versions de Windows sont expliquées dans le tableau.
Les colonnes et les lignes contiennent les versions de Windows qui peuvent 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 Windows respectives.
| Windows 10
Server 2016 et versions ultérieures |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win XP, Server 2003 et versions antérieures | |
| Windows 10
Server 2016 et versions ultérieures |
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 versions antérieures | 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
Voyons à l’aide d’un exemple pourquoi les termes CIFS et SMB sont encore source de confusion pour les utilisateurs. Pour cela, imaginons 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.209share
Dans Windows Server 2019, le protocole SMB 1.0/CIFS est désactivé par défaut. Pour vérifier ces paramètres et activer/désactiver manuellement le client et le serveur SMB1.0/CIFS, 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 assurer la compatibilité avec les clients utilisant les versions (dialectes) SMB 2.
Le protocole CIFS est désactivé par défaut dans les versions modernes de Windows telles que Windows 10 pour une meilleure sécurité, mais vous pouvez l’activer manuellement si nécessaire.
Remarque : En 2017, des attaques mondiales massives par ransomware (WannaCry et NotPetya) ont été menées par l’utilisation d’exploits pour les vulnérabilités SMB 1. Ces exploits ont été baptisé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 systèmes d’exploitation n’étaient pas officiellement pris en charge à l’époque. Microsoft a recommandé d’utiliser SMB 2 et SMB 3 (prenant en charge l’intégrité de la pré-authentification) au lieu de SMB 1.0/CIFS.
Comme mentionné ci-dessus, le nom du serveur SMB pour Linux est Samba (samba est le nom du paquet). Nous utilisons un serveur SMB sous Windows. Nous n’avons donc pas besoin de Samba dans cet exemple, mais 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 paquet). C’est là que réside la source de 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 2 et 3 de SMB ont été publiées, mais le nom du client SMB Linux reste le même, et le paquet incluant le client SMB s’appelle toujours CIFS Utils. Le paquet cifs-utils ne fait pas partie de samba.
Nous allons nous connecter depuis Linux à l’aide de CIFS Utils à un partage SMB situé sur Windows Server 2019 afin de déterminer si CIFS est toujours utilisé. Pour installer CIFS Utils, exécutez la commande suivante avec les privilèges root :
sudo apt-get install cifs-utils
Créez un répertoire qui servira de point de montage pour le partage SMB :
mkdir /mnt/share
Connectez-vous au partage de fichiers SMB situé sur un Serveur 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 pédagogiques.
CIFS ou 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 à l’aide de la commande PowerShell sur Windows Server 2019 :
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Comme nous pouvons le voir 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 commande sous Linux. Nous pouvons utiliser la commande suivante pour filtrer uniquement les résultats nécessaires :
cat /proc/mounts | grep cifs
Comme nous le voyons dans la sortie, la version du protocole pour se connecter au partage de fichiers est marquée cifs, mais la version affichée est 3.1.1 (vers=3.1.1), qui n’est pas une version de CIFS. Il s’agit là d’un autre exemple illustrant la confusion qui peut régner entre les termes SMB et CIFS.
En réalité, c’est SMB 3.1.1 qui est utilisé, et non CIFS. Nous pouvons le prouver par une autre méthode en utilisant nmap, un outil gratuit de découverte de réseau utilisé pour l’analyse et le dépannage.
Pour installer nmap dans Ubuntu, exécutez la commande en tant qu’administrateur :
sudo apt-get install nmap
Pour analyser tous les hôtes en ligne et connectés à notre 192.168.101.0/24 Réseau, nous utilisons la commande :
nmap --script smb-protocols 192.168.101.0/24
Nous souhaitons afficher le résultat pour 192.168.101.209, qui est l’adresse IP de notre serveur Windows Server 2019 fonctionnant comme serveur de fichiers. Linux est connecté au partage de fichiers sur ce serveur. Dans la sortie, nous voyons que les dialectes pour les 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 toujours utilisé dans les fichiers de configuration et les commandes Linux.
Nous pouvons forcer l’utilisation de CIFS manuellement en ajoutant le vers=1.0 paramètre 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 brusquement fermé la connexion. Cela peut se produire si le serveur ne dispose pas de la prise en charge de la version SMB que vous essayez d’utiliser. La version SMB par défaut est récemment passée de SMB1 à SMB2.1 et supérieure.
Ce résultat correspond aux résultats précédents de notre étude 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, nous pouvons alors nous connecter au serveur (rappelez-vous la liste des dialectes SMB pris en charge par notre serveur Windows 2019 affichée dans nmap) :
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
Lorsque vous utilisez l’interface utilisateur graphique sous Linux ou d’autres systèmes d’exploitation, utilisez smb:// dans la barre d’adresse lorsque vous définissez le protocole réseau à utiliser pour vous connecter à un partage de fichiers sur un serveur distant.
Lorsque vous saisissez l’adresse d’un partage de fichiers SMB, vous devez utiliser :
smb://server-name/share-name
N’utilisez pas :
cifs://server-name/share-name
car le client tentera de se connecter à l’aide du protocole SMB1.0/CIFS, qui peut être désactivé sur un serveur (si le client prend en charge la syntaxe cifs:// ).
Conclusion
Le protocole CIFS étant désormais 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é est NFS). Le stockage partagé étant particulièrement vulnérable à la corruption des données, aux ransomwares et à d’autres menaces qui peuvent facilement se propager sur un réseau, veillez à sauvergarder les fichiers et dossiers stockés sur les ressources partagées afin d’éviter toute perte de données. L’infection de l’ordinateur d’un seul utilisateur disposant de droits d’écriture sur des fichiers partagés peut entraîner la 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 via SMB et NFS des données résidant sur des serveurs de fichiers NAS et Windows/Linux.





