Cuando se trata de seleccionar un protocolo para compartir archivos a través de la red, comúnmente te encuentras con los términos SMB y CIFS en interfaces de software y documentación. Algunos usuarios piensan que SMB y CIFS son lo mismo, y identificar claramente la diferencia puede ser difícil. Sin embargo, veamos por qué CIFS no puede usarse como sinónimo de SMB. Aprende sobre las diferencias entre los protocolos SMB y CIFS y cómo usar los términos.
¿Qué es SMB?
SMB, o Server Message Block, es un protocolo de red que trabaja 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 computadoras de usuarios y copiar archivos entre computadoras.
Además de manipular archivos, otro caso de uso para SMB es la mensajería e impresión (transacciones remotas de propósito general), así como la exploración de computadoras en la red. IBM desarrolló SMB en 1983, y desde entonces el protocolo ha sido mejorado múltiples veces.
¿Qué es la compartición de archivos SMB?
Las comparticiones de archivos SMB son directorios en un host remoto que están disponibles mediante el protocolo SMB. Se configuran en servidores de archivos, y se puede configurar acceso de lectura y escritura a estas comparticiones. Un servidor de archivos puede tener múltiples comparticiones 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 pueden clasificarse como:
- Paquetes de control de sesión, que establecen/detienen conexiones a recursos compartidos de archivos
- Paquetes de acceso a archivos, que, como su nombre sugiere, 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. Luego, 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 mediante el uso del puerto 445 (sin NetBIOS) – este es el enfoque moderno.
- a través de la API de NetBIOS mediante el uso de los puertos UDP 137 y 138 y los puertos TCP 137 y 139 – este es el enfoque heredado utilizado hasta Windows 2000. Las primeras versiones de SMB usaban NetBIOS sobre TCP/IP para el transporte.
El protocolo SMB admite el envío por lotes, es decir, agrupar varios mensajes y enviarlos en una transmisión para mejorar el rendimiento.
La funcionalidad adicional incluye mecanismos de bloqueo de archivos para proteger los archivos compartidos cuando varios usuarios abren el mismo archivo. Bloquear archivos permite evitar que varios usuarios escriban datos simultáneamente y causen inconsistencia de datos en un archivo.
IPC (conexión entre procesos) también se conoce como conexión de sesión nula. El recurso compartido IPC$ creado por Windows se utiliza con conexiones temporales entre clientes y servidores. Este recurso compartido oculto se crea para compartir datos que no pueden clasificarse como archivos/directorios e impresoras, por ejemplo, usuarios y enumeración de recursos compartidos.
Los sistemas Windows contienen un cliente y servidor SMB nativos. Sin embargo, las versiones cliente de Windows 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 10 conexiones simultáneas
- Windows 7 y Windows 10 – máximo 20 conexiones simultáneas
Un servidor SMB en Linux se instala configurando Samba, que es una implementación gratuita del servidor SMB para Linux. Tenga en cuenta que Samba también le permite unirse a Linux a un dominio de Active Directory y permite que Linux actúe como controlador de dominio. También está disponible software cliente SMB en Linux (de forma gratuita) y en otros sistemas operativos.
¿Qué es CIFS?
CIFS, o Sistema de Archivos en Internet Común, es una implementación o dialecto particular de SMB desarrollado por Microsoft en 1996 tras el lanzamiento de Windows 95. Un dialecto es una versión y no un protocolo independiente separado. Un dialecto es un conjunto de paquetes de mensajes enviados/recibidos para comunicarse entre hosts que define una versión de protocolo particular. CIFS no es un sistema de archivos, a pesar de lo que sugiere el nombre.
La especificación del protocolo CIFS se basa en el protocolo SMB original pero con algunas características adicionales añadidas por Microsoft. Microsoft implementó conexiones directas a través de TCP y el puerto 445 sin usar NetBIOS sobre TCP (que se usaba en las primeras implementaciones de SMB 1). CIFS es una implementación de SMB 1 y no un protocolo de intercambio de archivos separado.
Dialectos del Protocolo SMB
Cuando hablamos de la implementación de SMB1 por parte de Microsoft, podemos usar 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 obtener una mejor comprensión de la diferencia entre CIFS y otros dialectos (versiones) de SMB más nuevos.
SMB 2.0
Microsoft lanzó SMB 2.0 (o SMB2) en 2006 con Windows Vista. Esta versión de SMB es más confiable 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 debido a los mecanismos de procesamiento por lotes, es decir, la capacidad de enviar una solicitud adicional antes de obtener la respuesta a la solicitud anterior. Empaquetar múltiples acciones en una solicitud reduce el número de solicitudes a un cliente, lo que mejora el rendimiento.
SMB 2.1
SMB 2.1 proporciona mejoras insignificantes en el rendimiento y los mecanismos de bloqueo en comparación con SMB 2.0. Esta versión del protocolo fue lanzada con Windows 7 y Windows Server 2008 R2.
SMB 3.0
Primero, esta versión del protocolo se llamó SMB 2.2, pero luego se renombró SMB 3.0 con Windows 8. La versión SMB 3.0:
- agregó SMB Direct (acceso directo a memoria), SMB Multichannel y SMB Transport Failover
- mejoró la seguridad
- agregó soporte para 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 ha estado disponible desde Windows 8.1 y Windows Server 2012 R2. En esta versión, la compatibilidad con SMB 1.0 se puede desactivar para mejorar la seguridad.
SMB 3.1.1
Esta versión se hizo disponible a partir de Windows 10 y Windows Server 2016. Las mejoras incluyen un mejor cifrado (AES 128 GCM y AES 128 CCM) y el hash SHA-512 para comprobaciones de integridad de preautenticación.
SMB en Windows y Microsoft Server
SMB está disponible en Windows a partir de Windows 3.1 (Windows para grupos de trabajo). Las versiones de SMB y la compatibilidad con diferentes versiones de Windows se explican en la tabla.
Las columnas y filas contienen versiones de Windows que pueden ejecutar un cliente SMB o un servidor SMB (las columnas y filas son intercambiables). Una celda en la intersección de una columna y fila muestra qué versión del protocolo SMB se utiliza para la comunicación entre las respectivas versiones de Windows.
Windows 10
Servidor 2016 y más reciente |
Windows 8.1
Servidor 2012 R2 |
Windows 8
Servidor 2012 |
Windows 7
Servidor 2008 R2 |
Windows Vista
Servidor 2008 |
Win XP, Servidor 2003 y anteriores | |
Windows 10
Servidor 2016 y más reciente |
SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8.1
Servidor 2012 R2 |
SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8
Servidor 2012 |
SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 7
Servidor 2008 R2 |
SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows Vista
Servidor 2008 |
SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
Win XP, Servidor 2003 y anteriores | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS vs SMB: La Fuente Probable de la Confusión
Descubramos mediante un ejemplo por qué los términos CIFS y SMB siguen siendo confundidos por los usuarios. Para hacerlo, digamos que estamos utilizando un servidor de archivos con un recurso compartido SMB configurado en Windows Server 2019 y una máquina Linux conectándose a este servidor de archivos a través del protocolo SMB. Ubuntu 20.04 es la distribución de Linux que estamos utilizando 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.209\share
En Windows Server 2019, el protocolo SMB 1.0/CIFS está deshabilitado de forma predeterminada. Para verificar esta configuración y habilitar/deshabilitar manualmente el cliente y servidor SMB1.0/CIFS, ve a Administrador del servidor > Agregar roles y características > Características.
Mantenemos deshabilitado SMB 1.0/CIFS en nuestra máquina con Windows Server 2019. Esto significa que SMB 3 se utiliza de forma predeterminada con la capacidad de cambiar a SMB 2 para la compatibilidad con los clientes que utilizan versiones (dialectos) de SMB 2.
El protocolo CIFS está deshabilitado de forma predeterminada en versiones modernas de Windows, como Windows 10, para una mejor seguridad, y se puede habilitar manualmente si es necesario.
Nota: En 2017, se llevaron a cabo ataques masivos de ransomware a nivel mundial (WannaCry y NotPetya) utilizando exploits para vulnerabilidades de SMB 1. Estos exploits fueron denominados EternalBlue, EternalRomance y EternalChampion. Microsoft lanzó parches de seguridad para sus sistemas operativos a partir de Windows XP y Windows Server 2003, a pesar de que en ese momento estas versiones de SO no eran oficialmente compatibles. Microsoft recomendó utilizar SMB 2 y SMB 3 (que admiten integridad de preautenticación) en lugar de usar SMB 1.0/CIFS.
Como se mencionó anteriormente, el nombre del servidor SMB para Linux es Samba (samba es el nombre del paquete). Utilizamos un servidor SMB en Windows, por lo que no necesitamos Samba en este ejemplo, sino más bien un cliente SMB para Ubuntu Linux.
Un cliente SMB para Linux está incluido en Linux CIFS Utils (cifs-utils es el nombre del paquete). Aquí es donde surge la confusión. La primera versión de este cliente para Linux fue creada en un momento en que se usaba ampliamente SMB 1.0/CIFS. El protocolo SMB se actualizó, se lanzaron las versiones 2 y 3 de SMB, pero el nombre del cliente SMB de Linux sigue siendo el mismo, y el paquete que incluye el cliente SMB sigue llamándose CIFS Utils. El paquete cifs-utils no es parte de samba.
Nos conectaremos desde Linux usando CIFS Utils a un recurso SMB ubicado en Windows Server 2019 para averiguar si todavía se utiliza CIFS. 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 SMB:
mkdir /mnt/share
Conéctese al recurso de archivos SMB ubicado en un servidor de archivos Windows remoto:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
Utilizamos una cuenta de usuario administrador de Windows en nuestro ejemplo con fines educativos.
CIFS vs SMB: ¿cuál se utiliza en la sesión actual para conectarse al servidor de archivos? Verifique la versión de SMB de los clientes conectados al recurso 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 verificar la versión del protocolo SMB en /proc/mounts con el comando cat /proc/mounts en Linux. Podemos usar 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 a la compartición de archivos está 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 otro ejemplo que muestra cómo los términos SMB vs CIFS pueden confundirse.
De hecho, se utiliza SMB 3.1.1 y no CIFS. Podemos demostrarlo con un método más utilizando nmap, que es una herramienta gratuita de descubrimiento de redes utilizada para análisis y resolución de problemas.
Para instalar nmap en Ubuntu, ejecute el siguiente 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
Estamos interesados en ver el resultado para 192.168.101.209, que es la dirección IP de nuestro Windows Server 2019 que funciona como servidor de archivos. Linux está conectado a la carpeta compartida en este servidor. En la salida, vemos que los dialectos de los protocolos SMB compatibles con nuestro Windows Server son 2.02, 2.10, 3.00, 3.02 y 3.11. No hay SMB 1.0/CIFS, aunque el término CIFS todavía se usa en archivos de configuración y comandos de Linux.
Podemos forzar el uso de CIFS manualmente agregando el parámetro vers=1.0 en el comando mount en Linux (en el lado del cliente) para usar solo el protocolo SMB 1.0/CIFS al conectarse a una carpeta compartida 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ó abruptamente la conexión. Esto puede suceder si el servidor no soporta la versión SMB que estás intentando usar. La versión SMB predeterminada cambió recientemente de SMB1 a SMB2.1 y superior.
Este resultado coincide con los resultados anteriores de nuestra investigación de SMB vs CIFS en sistemas operativos modernos. CIFS no se usa y SMB 1.0/CIFS está deshabilitado en nuestro Windows Server.
Si lo configuramos para usar al menos SMB 2.0, entonces podemos 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
Cuando utilices la interfaz gráfica de usuario en Linux u otros sistemas operativos, utiliza smb:// en la línea de dirección al definir el protocolo de red a utilizar para conectarte a un recurso compartido de archivos en un servidor remoto.
Cuando ingreses la dirección a un recurso compartido de archivos SMB, debes utilizar:
smb://nombre-del-servidor/nombre-del-recurso
No utilices:
cifs://nombre-del-servidor/nombre-del-recurso
porque el cliente intentará conectarse utilizando el protocolo SMB1.0/CIFS, el cual puede estar deshabilitado en un servidor (si es que el cliente incluso soporta la sintaxis cifs://).
Conclusión
Ahora que el protocolo CIFS está obsoleto, SMB es uno de los protocolos utilizados para conectarse a almacenamiento compartido en servidores de archivos y NAS (el otro comúnmente utilizado es NFS). Dado que el almacenamiento compartido es particularmente vulnerable a la corrupción de datos, ransomware y otras amenazas que pueden propagarse fácilmente a través de una red, asegúrate de hacer copias de seguridad de los archivos y carpetas almacenados en recursos compartidos para evitar la pérdida de datos. Infectar la computadora de incluso un usuario con permisos de escritura en archivos compartidos puede causar la pérdida de datos para todos los usuarios.
NAKIVO Backup & Replication es una solución de protección de datos que admite copias de seguridad incrementales a través de SMB y NFS de datos almacenados en NAS y servidores de archivos Windows/Linux.