Protocolos de recursos compartidos CIFS y SMB: explicación de las diferencias
A la hora de elegir un protocolo para compartir archivos en red, es habitual encontrar los términos «SMB» y «CIFS» en las interfaces y la documentación del software. Algunos usuarios piensan que SMB y CIFS son lo mismo, y puede resultar complicado identificar claramente la diferencia. Sin embargo, veamos por qué CIFS no puede utilizarse como sinónimo de SMB. Descubre las diferencias entre los protocolos SMB y CIFS y cómo utilizar estos términos.
¿Qué es SMB?
SMB, o Server Message Block, es un protocolo de red que opera en la capa de aplicación del modelo de comunicaciones OSI. SMB se utiliza para proporcionar acceso compartido a recursos a través de la red. El protocolo SMB se utiliza ampliamente para compartir archivos en servidores de archivos, compartir archivos entre ordenadores de usuarios y copiar archivos entre ordenadores.
Además de la gestión de archivos, otros usos prácticos de SMB son la mensajería y la impresión (transacciones remotas de uso general), así como la exploración de ordenadores en la red. IBM desarrolló SMB en 1983 y, desde entonces, el protocolo se ha mejorado en múltiples ocasiones.
¿Qué es un recurso compartido de archivos SMB?
Los recursos compartidos de archivos SMB son directorios de un host remoto a los que se puede acceder a través del protocolo SMB. Se configuran en servidores de archivos, y se puede configurar el acceso de lectura y escritura a estos recursos compartidos. Un servidor de archivos puede tener varios recursos compartidos SMB.
Cómo funciona SMB: ¿qué hace SMB?
SMB funciona según el principio de red cliente-servidor. El protocolo utiliza un conjunto de paquetes de datos que contienen una solicitud enviada por un cliente o una respuesta enviada por un servidor. Los clientes pueden conectarse a un servidor utilizando una dirección IP o un nombre de host. Estos paquetes de datos SMB se pueden clasificar en:
- Paquetes de control de sesión, que establecen o interrumpen conexiones con recursos compartidos de archivos
- Paquetes de acceso a archivos, que, como su nombre indica, acceden a los recursos compartidos de archivos y manipulan los archivos
- Paquetes de mensajes generales
SMB abre una sesión después de establecer una conexión y completar la autenticación. A continuación, los mensajes SMB pueden transmitirse a través de esta sesión. Al iniciar una sesión, un cliente SMB envía una lista de sus capacidades (las capacidades dependen de la versión SMB del cliente).
El protocolo SMB puede funcionar:
- directamente a través de TCP utilizando el puerto 445 (sin NetBIOS); este es el enfoque moderno.
- a través de la API de NetBIOS utilizando los puertos UDP 137 y 138 y los puertos TCP 137 y 139; este es el enfoque heredado que se utilizaba hasta Windows 2000. Las primeras versiones de SMB utilizaban NetBIOS sobre TCP/IP como protocolo de transporte.
El protocolo SMB admite el procesamiento por lotes, es decir, la agrupación de varios mensajes y su envío en una sola transmisión para mejorar el rendimiento.
Entre las funciones adicionales se incluyen mecanismos de bloqueo de archivos para proteger los recursos compartidos cuando varios usuarios abren el mismo archivo. El bloqueo de archivos permite evitar que varios usuarios escriban datos simultáneamente y provoquen inconsistencias en el contenido del archivo. La IPC (conexión entre procesos) también se conoce como conexión de sesión nula. El recurso compartido de IPC « » ($ ) creado por Windows se utiliza para conexiones temporales entre clientes y servidores. Este recurso compartido oculto se crea para compartir datos que no pueden clasificarse como archivos, directorios o impresoras; por ejemplo, usuarios y enumeración de recursos compartidos.
Los sistemas Windows contienen un cliente y un servidor SMB nativos. Sin embargo, las versiones de Windows para clientes tienen un límite en el número de usuarios que pueden conectarse a un host, a diferencia de las versiones de Windows Server, que no tienen tales limitaciones.
- Windows XP y Vista: máximo de 10 conexiones simultáneas
- Windows 7 y Windows 10: máximo de 20 conexiones simultáneas
Un servidor SMB en Linux se instala configurando Samba, que es una implementación gratuita de servidor SMB para Linux. Ten en cuenta que Samba también te permite unir un sistema Linux a un dominio de Active Directory y hace que Linux actúe como controlador de dominio. El software cliente SMB también está disponible en Linux (de forma gratuita) y en otros sistemas operativos.
¿Qué es CIFS?
CIFS, o Common Internet File System, es una implementación o dialecto concreto de SMB desarrollado por Microsoft en 1996 tras el lanzamiento de Windows 95. Un dialecto es una versión y no un protocolo independiente. Un dialecto es un conjunto de paquetes de mensajes enviados o recibidos para la comunicación entre hosts que define una versión concreta del protocolo. CIFS no es un sistema de archivos, a diferencia de lo que sugiere su nombre.
La especificación del protocolo CIFS se basa en el protocolo SMB original, pero con algunas funciones adicionales añadidas por Microsoft. Microsoft implementó conexiones directas a través de TCP y el puerto 445 sin utilizar NetBIOS sobre TCP (que se utilizaba en las primeras implementaciones de SMB 1). CIFS es una implementación de SMB 1 y no un protocolo independiente para compartir archivos.
Dialectos del protocolo SMB
Cuando hablamos de la implementación de SMB 1 por parte de Microsoft, podemos utilizar el término CIFS. En todos los demás casos, y en general, SMB es el término correcto para referirse a este protocolo de red. Echemos un vistazo más de cerca a las versiones de SMB lanzadas después de CIFS para comprender mejor la diferencia entre CIFS y otros dialectos (versiones) de SMB más recientes.
SMB 2.0
Microsoft lanzó SMB 2.0 (o SMB2) en 2006 con Windows Vista. Esta versión de SMB es más fiable que SMB 1.0/CIFS, y no es CIFS. El número de comandos necesarios para transferir archivos se reduce de más de 100 a 20. El rendimiento es mayor gracias a los mecanismos de procesamiento en pipeline, es decir, la capacidad de enviar una solicitud adicional antes de recibir la respuesta a la anterior. Agrupar varias acciones en una sola solicitud reduce el número de solicitudes enviadas al cliente, lo que mejora el rendimiento.
SMB 2.1
SMB 2.1 ofrece mejoras insignificantes en el rendimiento y los mecanismos de bloqueo en comparación con SMB 2.0. Esta versión del protocolo se lanzó con Windows 7 y Windows Server 2008 R2.
SMB 3.0
En un principio, esta versión del protocolo se denominaba SMB 2.2, pero posteriormente se renombró como SMB 3.0 con Windows 8. La versión SMB 3.0:
- añadió SMB Direct (acceso directo a la memoria), SMB Multichannel y SMB Conmutación por recuperación
- mejoró la seguridad
- añadió compatibilidad con el cifrado de extremo a extremo
- mejoró la eficiencia de la red al reducir la latencia
SMB 3.0.2
SMB 3.0.2 o 3.02 está disponible desde Windows 8.1 y Windows Server 2012 R2. En esta versión, se puede desactivar la compatibilidad con SMB 1.0 para mejorar la seguridad.
SMB 3.1.1
Esta versión está disponible a partir de Windows 10 y Windows Server 2016. Las mejoras incluyen un cifrado más seguro (AES 128 GCM y AES 128 CCM) y el hash SHA-512 para las comprobaciones de integridad previas a la autenticación.
SMB en Windows y Microsoft Server
SMB está disponible en Windows a partir de Windows 3.1 (Windows for Workgroups). En la tabla se explican las versiones de SMB y la compatibilidad con las diferentes versiones de Windows.
Las columnas y filas contienen las versiones de Windows que pueden ejecutar un cliente SMB o un servidor SMB (las columnas y filas son intercambiables). Una celda situada en la intersección de una columna y una fila muestra qué versión del protocolo SMB se utiliza para la comunicación entre las respectivas versiones de Windows.
| Windows 10
Server 2016 y versiones posteriores |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Windows XP, Server 2003 y versiones anteriores | |
| Windows 10
Server 2016 y versiones posteriores |
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 y versiones anteriores | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS frente a SMB: el origen de la confusión
Veamos con un ejemplo por qué los usuarios siguen confundiendo los términos CIFS y SMB. Para ello, supongamos que estamos utilizando un servidor de archivos con un recurso compartido SMB configurado en Windows Server 2019 y un equipo Linux que se conecta a este servidor de archivos a través del protocolo SMB. Ubuntu 20.04 es la distribución de Linux que utilizamos en este ejemplo. Ten en cuenta que la configuración es la misma para Ubuntu 22.
Tenemos la siguiente configuración en nuestros entornos:
- Windows Server 2019: 192. 168.101.209
- Linux Ubuntu 20.04: 192. 168.101.210
- Recurso compartido SMB en Windows Server: 192.168.101.209share
En Windows Server 2019, el protocolo SMB 1.0/CIFS está desactivado de forma predeterminada. Para comprobar estos ajustes y habilitar o deshabilitar manualmente el cliente y el servidor SMB 1.0/CIFS, ve a Server Manager > Add Roles and Features > Features.
Mantenemos SMB 1.0/CIFS deshabilitado en nuestro equipo con Windows Server 2019. Esto significa que se utiliza SMB 3 de forma predeterminada, con la posibilidad de cambiar a SMB 2 para garantizar la compatibilidad con los clientes que utilizan versiones (dialectos) de SMB 2.
El protocolo CIFS está desactivado de forma predeterminada en las versiones modernas de Windows, como Windows 10, para garantizar una mayor seguridad, y se puede activar manualmente si es necesario.
Nota: En 2017 se llevaron a cabo ataques masivos de ransomware a nivel mundial (WannaCry y NotPetya) utilizando exploits que aprovechaban vulnerabilidades de SMB 1. Estos exploits recibieron los nombres de EternalBlue, EternalRomance y EternalChampion. Microsoft publicó parches de seguridad para sus sistemas operativos desde Windows XP y Windows Server 2003, a pesar de que estos sistemas operativos ya no contaban con soporte oficial en aquel momento. Microsoft recomendó utilizar SMB 2 y SMB 3 (que admiten la integridad previa a la autenticación) en lugar de SMB 1.0/CIFS. Como se ha mencionado anteriormente, el nombre del servidor SMB para Linux es Samba ( samba es el nombre del paquete). En Windows utilizamos un servidor SMB. Por lo tanto, en este ejemplo no necesitamos Samba, sino un cliente SMB para Ubuntu Linux.
Linux CIFS Utils incluye un cliente SMB para Linux ( cifs-utils es el nombre del paquete). De ahí surge la confusión. La primera versión de este cliente para Linux se creó en una época en la que SMB 1.0/CIFS se utilizaba ampliamente. El protocolo SMB se actualizó y se lanzaron las versiones 2 y 3 de SMB, pero el nombre del cliente SMB para Linux sigue siendo el mismo, y el paquete que incluye el cliente SMB sigue llamándose CIFS Utils. El paquete cifs-utils no forma parte de samba .
Nos conectaremos desde Linux utilizando CIFS Utils a un recurso compartido SMB ubicado en Windows Server 2019 para averiguar si CIFS sigue utilizándose. Para instalar CIFS Utils, ejecute el siguiente comando con privilegios de root:
sudo apt-get install cifs-utils
Cree un directorio que se utilizará como punto de montaje para el recurso compartido SMB:
mkdir /mnt/share
Conéctese al recurso compartido de archivos SMB ubicado en un servidor de archivos Windows remoto:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
En nuestro ejemplo utilizamos una cuenta de usuario de administrador de Windows con fines didácticos.
CIFS frente a SMB: ¿cuál se utiliza en la sesión actual para conectarse al servidor de archivos? Comprueba la versión SMB de los clientes conectados al recurso compartido SMB en Windows Server con el comando de PowerShell en Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Como podemos ver en la salida de PowerShell, se utiliza SMB 3.1.1 para nuestra conexión desde Ubuntu Linux. SMB 1.0/CIFS no se utiliza cuando nos conectamos con cifs-utils y el comando mount.cifs a un servidor de archivos configurado en Windows Server 2019.
También podemos comprobar la versión del protocolo SMB en /proc/mounts con el comando cat /proc/mounts en Linux. Podemos utilizar el siguiente comando para filtrar solo los resultados necesarios:
cat /proc/mounts | grep cifs
Como vemos en la salida, la versión del protocolo para conectarse al recurso compartido de archivos aparece marcada como cifs, pero la versión mostrada es 3.1.1 (vers=3.1.1), que no es una versión de CIFS. Este es un ejemplo más que muestra cómo los términos SMB y CIFS pueden dar lugar a confusión.
De hecho, se utiliza SMB 3.1.1 y no CIFS. Podemos demostrarlo con otro método utilizando nmap, que es una herramienta gratuita de detección de redes utilizada para el análisis y la resolución de problemas.
Para instalar nmap en Ubuntu, ejecuta el comando como root:
sudo apt-get install nmap
Para escanear todos los hosts que están en línea y conectados a nuestra red 192.168.101.0/24 , utilizamos el comando:
nmap --script smb-protocols 192.168.101.0/24
Nos interesa ver el resultado correspondiente a 192.168.101.209, que es la dirección IP de nuestro Windows Server 2019 que es activo como servidor de archivos. Linux está conectado al recurso compartido de archivos de este servidor. En la salida, vemos que los dialectos de los protocolos SMB compatibles con nuestro servidor Windows son 2.02, 2.10, 3.00, 3.02 y 3.11. No aparece SMB 1.0/CIFS, aunque el término CIFS sigue utilizándose en los archivos de configuración y los comandos de Linux.
Podemos forzar el uso de CIFS manualmente añadiendo el parámetro ` vers=1.0 ` al comando ` mount ` en Linux (en el lado del cliente) para utilizar únicamente el protocolo SMB 1.0/CIFS al conectarnos a un recurso compartido de archivos en un servidor 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
El resultado es el siguiente: `
` El servidor cerró la conexión de forma abrupta. Esto puede ocurrir si el servidor no admite la versión de SMB que se está intentando utilizar. La versión predeterminada de SMB ha cambiado recientemente de SMB1 a SMB2.1 y superiores .
Este resultado coincide con los resultados anteriores de nuestra investigación sobre SMB frente a CIFS en sistemas operativos modernos. No se utiliza CIFS, y SMB 1.0/CIFS está desactivado en nuestro servidor Windows.
Si lo configuramos para que utilice al menos SMB 2.0, podremos conectarnos al servidor (recuerda la lista de dialectos SMB compatibles con nuestro Windows Server 2019 que se muestra en nmap ):
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
Al utilizar la interfaz gráfica de usuario en Linux u otros sistemas operativos, utiliza smb:// en la barra de direcciones al definir el protocolo de red que se utilizará para conectarse a un recurso compartido de archivos en un servidor remoto.
Al introducir la dirección de un recurso compartido de archivos SMB, debe utilizar:
smb://server-name/share-name
No utilice:
cifs://server-name/share-name
, ya que el cliente intentará conectarse mediante el protocolo SMB1.0/CIFS, que puede estar desactivado en el servidor (si es que el cliente admite siquiera la sintaxis cifs:// ).
Conclusión
Ahora que el protocolo CIFS ha quedado obsoleto, SMB es uno de los protocolos que se utilizan para conectarse al almacenamiento compartido en servidores de archivos y NAS (el otro más utilizado es NFS). Dado que el almacenamiento compartido es especialmente vulnerable a la corrupción de datos, al ransomware y a otras amenazas que pueden propagarse fácilmente por una red, asegúrate de hacer backup de los archivos y carpetas almacenados en recursos compartidos para evitar la pérdida de datos. La infección del ordenador de tan solo un usuario con permisos de escritura sobre los archivos compartidos puede provocar la pérdida de datos para todos los usuarios. NAKIVO Backup & Replication es una solución de protección de datos que permite hacer backups incrementales a través de SMB y NFS de los datos almacenados en servidores NAS y servidores de archivos Windows/Linux.





