Protocolos para compartir recursos compartidos CIFS vs 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 de software y la documentación. Algunos usuarios piensan que SMB y CIFS son la misma cosa, e identificar claramente la diferencia puede ser difícil. Sin embargo, veamos por qué CIFS no puede utilizarse como sinónimo de SMB. Conozca las diferencias entre los protocolos SMB y CIFS y cómo utilizar los términos.
¿Qué son las PYME?
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 ordenadores de usuarios y copiar archivos entre ordenadores.
Además de la manipulación de archivos, el otro uso práctico de SMB es la mensajería y la impresión (transacciones remotas de propósito general), así como la navegación por los ordenadores de la red. IBM desarrolló SMB en 1983, y desde entonces el protocolo se ha mejorado en múltiples ocasiones.
¿Qué es el recurso compartido SMB?
Los recursos compartidos SMB son directorios en un host remoto que están disponibles 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 la PYME?
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/detendrán conexiones a recursos compartidos de archivos
- Paquetes de acceso a archivos, que, como su nombre indica, acceden a los recursos compartidos 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 vía TCP utilizando el puerto 445 (sin NetBIOS) – este es el enfoque moderno.
- a través de la API NetBIOS utilizando 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 utilizaban NetBIOS sobre TCP/IP para el transporte.
El protocolo SMB admite la agrupación por lotes, es decir, agrupar varios mensajes y enviarlos en una sola transmisión para mejorar el rendimiento.
Entre las funciones adicionales se incluyen mecanismos de bloqueo de archivos para proteger los archivos compartidos cuando varios usuarios abren el mismo archivo. El bloqueo de archivos permite evitar que varios usuarios escriban datos simultáneamente y se produzcan incoherencias en los datos de 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 un 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 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 de servidor SMB para Linux. Tenga en cuenta que Samba también le permite unir Linux a un dominio de Active Directory y permite a Linux actuar como un 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 particular o dialecto de SMB desarrollado por Microsoft en 1996 tras la versión de Windows 95. Un dialecto es una versión y no un protocolo independiente. Un dialecto es un conjunto de paquetes de mensajes enviados/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 utilizó 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 SMB1 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 publicadas 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 pipeline, es decir, la posibilidad de enviar una petición adicional antes de obtener la respuesta a la anterior. Empaquetar varias acciones en una sola petición reduce el número de peticiones a un cliente, lo que mejora el rendimiento.
SMB 2.1
SMB 2.1 ofrece mejoras insignificantes en cuanto a rendimiento y mecanismos de bloqueo en comparación con SMB 2.0. Esta versión del protocolo se publicó con Windows 7 y Windows Server 2008 R2.
SMB 3.0
Al principio, esta versión del protocolo se llamaba SMB 2.2, pero posteriormente pasó a llamarse SMB 3.0 con Windows 8. La versión SMB 3.0:
- añadido SMB Direct (acceso directo a la memoria), SMB Multicanal y conmutación por recuperación de transporte SMB
- mayor seguridad
- compatibilidad con el cifrado de extremo a extremo.
- mejora de la eficacia 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, la compatibilidad con SMB 1.0 puede desactivarse para mejorar la seguridad.
SMB 3.1.1
Esta versión está disponible desde Windows 10 y Windows Server 2016. Las mejoras incluyen un mejor cifrado (AES 128 GCM y AES 128 CCM) y 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 para grupos de trabajo). En la tabla se explican las versiones de SMB y la compatibilidad con las distintas 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 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
Servidor 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win 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
Servidor 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 probable origen de la confusión
Averigüemos 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 una máquina 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. Tenga 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
- Compartir SMB en Windows Server: \\192.168.101.209\share
En Windows Server 2019, el protocolo SMB 1.0/CIFS está desactivado por defecto. Para comprobar este ajuste y activar/desactivar manualmente el cliente y el servidor SMB1.0/CIFS, vaya a Administrador de servidores > Añadir funciones y características > Funciones.
Mantenemos SMB 1.0/CIFS desactivado en nuestra máquina Windows Server 2019. Significa que SMB 3 se utiliza por defecto con la posibilidad de cambiar a SMB 2 para la compatibilidad con los clientes que utilizan versiones SMB 2 (dialectos).
El protocolo CIFS está desactivado por defecto en las versiones modernas de Windows, como Windows 10, para mejorar la seguridad, y puede activarlo manualmente si es necesario.
Nota: En 2017, los ataques masivos de ransomware a nivel mundial(WannaCry y NotPetya) se llevaron a cabo mediante el uso de exploits para vulnerabilidades SMB 1. Estos exploits fueron bautizados como 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 estos sistemas operativos no eran una versión oficialmente compatible en ese momento. Microsoft recomienda utilizar SMB 2 y SMB 3 (compatibles con la integridad previa a la autenticación) en lugar de SMB 1.0/CIFS.
Como ya se ha mencionado, el nombre del servidor SMB para Linux es Samba(samba es el nombre del paquete). Utilizamos un servidor SMB en Windows. Así que no necesitamos Samba en este ejemplo, sino que necesitamos un cliente SMB para Ubuntu Linux.
En Linux CIFS Utils se incluye un cliente SMB para Linux(cifs-utils es el nombre del paquete). De ahí 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. Se actualizó el protocolo SMB, se publicaron 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 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 se sigue utilizando. 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 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 educativos.
CIFS vs SMB – ¿cuál se utiliza en la sesión actual para conectarse al servidor de archivos? Compruebe la versión SMB de los clientes conectados al recurso compartido SMB en Windows Server con el comando PowerShell en Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Como podemos ver en la salida de PowerShell, SMB 3.1.1 se utiliza 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 sólo los resultados necesarios:
cat /proc/mounts | grep cifs
Como vemos en la salida, la versión del protocolo para conectarse al recurso compartido 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 un ejemplo más de cómo los términos SMB vs CIFS pueden confundirse.
De hecho, se utiliza SMB 3.1.1 y no CIFS. Podemos probarlo con un método más utilizando nmap, que es una herramienta gratuita de descubrimiento de redes utilizada para el análisis y la solución de problemas.
Para instalar nmap en Ubuntu ejecute 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 para 192.168.101.209, que es la dirección IP de nuestro Windows Server 2019 que está funcionando como servidor de archivos. Linux está conectado al recurso compartido de este servidor. En la salida, vemos que los dialectos para protocolos SMB soportados por nuestro Windows Server son 2.02, 2.10, 3.00, 3.02 y 3.11. No existe SMB 1.0/CIFS, aunque el término CIFS se sigue utilizando en los archivos de configuración y comandos de Linux.
Podemos forzar el uso de CIFS manualmente añadiendo el parámetro vers=1.0 en el comando mount en Linux (en el lado del cliente) para utilizar sólo el protocolo SMB 1.0/CIFS cuando nos conectemos a un recurso compartido 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=administratorvers=1.0
El resultado es el siguiente:
El servidor cerró abruptamente la conexión. Esto puede ocurrir si el servidor no es compatible con la versión de SMB que está intentando utilizar. La versión SMB por defecto ha cambiado recientemente de SMB1 a SMB2.1 y superiores.
Este resultado coincide con los resultados anteriores de nuestra investigación SMB frente a CIFS en sistemas operativos modernos. CIFS no se utiliza, y SMB 1.0/CIFS está desactivado en nuestro servidor Windows.
Si lo configuramos para que use al menos SMB 2.0, entonces podremos conectarnos al servidor (recordemos la lista de dialectos SMB soportados por nuestro Windows Server 2019 que se muestra en nmap):
mount.cifs //192.168.101.209/share /mnt/share -o user=administratorvers=2.0
Cuando utilice la interfaz gráfica de usuario en Linux u otros sistemas operativos, utilice smb:// en la línea de dirección al definir el protocolo de red que se utilizará para conectarse a un recurso compartido de un servidor remoto.
Cuando introduzca la dirección de un recurso compartido SMB, debe utilizar:
smb://server-name/share-name
No usar:
cifs://server-name/share-name
porque el cliente intentará conectarse utilizando el protocolo SMB1.0/CIFS, que puede estar deshabilitado en un servidor (si es que el cliente admite la sintaxis cifs:// ).
Conclusión
Ahora que el protocolo CIFS está obsoleto, SMB es uno de los protocolos utilizados 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, el ransomware y otras amenazas que pueden propagarse fácilmente por una red, asegúrese de hacer backup de los archivos y carpetas almacenados en recursos compartidos para evitar la pérdida de datos. Infectar el ordenador de un solo usuario con permisos de escritura en archivos compartidos puede causar la pérdida de datos de 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 los datos que residen en NAS y servidores de archivos Windows/Linux.