Protocolos de Compartilhamento de Arquivos CIFS vs SMB: As Diferenças Explicadas

Quando se trata de selecionar um protocolo para compartilhar arquivos pela rede, você comumente se depara com os termos SMB e CIFS em interfaces de software e documentação. Alguns usuários pensam que SMB e CIFS são a mesma coisa, e identificar claramente a diferença pode ser difícil. No entanto, vamos analisar por que CIFS não pode ser usado como sinônimo de SMB. Saiba mais sobre as diferenças entre os protocolos SMB e CIFS e como usar os termos.

O que é SMB?

O SMB, ou Server Message Block, é um protocolo de rede que trabalha na camada de aplicação do modelo de comunicações OSI. O SMB é usado para fornecer acesso compartilhado a recursos pela rede. O protocolo SMB é amplamente utilizado para compartilhar arquivos em servidores de arquivos, compartilhar arquivos entre computadores de usuários e copiar arquivos entre computadores.

Além de manipular arquivos, outro caso de uso para o SMB é a mensageria e impressão (transações remotas de propósito geral), bem como navegar por computadores na rede. A IBM desenvolveu o SMB em 1983, e desde então o protocolo foi aprimorado várias vezes.

O que é compartilhamento de arquivos SMB?

Os compartilhamentos de arquivos SMB são diretórios em um host remoto que são disponibilizados por meio do protocolo SMB. Eles são configurados em servidores de arquivos, e o acesso de leitura e escrita pode ser configurado para esses compartilhamentos. Um servidor de arquivos pode ter vários compartilhamentos SMB.

Como o SMB Funciona: O que o SMB faz?

O SMB funciona com base no princípio de rede cliente-servidor. O protocolo utiliza um conjunto de pacotes de dados contendo uma solicitação enviada por um cliente ou uma resposta enviada por um servidor. Os clientes podem se conectar a um servidor usando um endereço IP ou nome de host. Esses pacotes de dados SMB podem ser classificados como:

  • Pacotes de controle de sessão, que estabelecem/interrompem conexões para compartilhamento de arquivos
  • Pacotes de acesso a arquivos, que, como o nome sugere, acessam os compartilhamentos de arquivos e manipulam os arquivos
  • Pacotes de mensagem geral

O SMB abre uma sessão após estabelecer uma conexão e concluir a autenticação. Em seguida, mensagens SMB podem ser transmitidas através desta sessão. Ao iniciar uma sessão, um cliente SMB envia uma lista de suas capacidades (as capacidades dependem da versão SMB do cliente).

O protocolo SMB pode funcionar:

  • diretamente via TCP usando a porta 445 (sem NetBIOS) – esta é a abordagem moderna.
  • via API NetBIOS usando as portas UDP 137 e 138 e as portas TCP 137 e 139 – esta é a abordagem legada usada até o Windows 2000. As primeiras versões do SMB usavam o NetBIOS sobre TCP/IP para transporte.

O protocolo SMB suporta o agrupamento, ou seja, agrupamento de várias mensagens e enviando-as em uma única transmissão para melhorar o desempenho.

A funcionalidade adicional inclui mecanismos de bloqueio de arquivos para proteger arquivos compartilhados quando vários usuários abrem o mesmo arquivo. Bloquear arquivos permite evitar que dados sejam escritos por vários usuários simultaneamente e causem inconsistência de dados em um arquivo.

IPC (conexão inter-processos) também é conhecido como conexão de sessão nula. O compartilhamento IPC$ criado pelo Windows é usado com conexões temporárias entre clientes e servidores. Este compartilhamento oculto é criado para compartilhar dados que não podem ser classificados como arquivos/diretórios e impressoras, por exemplo, usuários e enumeração de compartilhamentos.

Os sistemas Windows contêm um cliente e servidor SMB nativos. No entanto, as versões cliente do Windows têm um limite no número de usuários que podem se conectar a um host, ao contrário das versões do Windows Server, que não têm tais limitações.

  • O Windows XP e Vista – máximo de 10 conexões simultâneas
  • O Windows 7 e Windows 10 – máximo de 20 conexões simultâneas

Um servidor SMB no Linux é instalado configurando o Samba, que é uma implementação gratuita de servidor SMB para Linux. Note que o Samba também permite que você una o Linux a um domínio do Active Directory e permite que o Linux atue como um controlador de domínio. O software cliente SMB também está disponível no Linux (gratuitamente) e em outros sistemas operacionais.

O Que É CIFS?

O CIFS, ou Sistema de Arquivos da Internet Comum, é uma implementação ou dialeto específico do SMB desenvolvido pela Microsoft em 1996 após o lançamento do Windows 95. Um dialeto é uma versão e não um protocolo independente separado. Um dialeto é um conjunto de pacotes de mensagem enviados/recebidos para comunicação entre hosts que define uma versão específica do protocolo. O CIFS não é um sistema de arquivos, ao contrário do que o nome sugere.

A especificação do protocolo CIFS é baseada no protocolo SMB original, mas com algumas características adicionais adicionadas pela Microsoft. A Microsoft implementou conexões diretas via TCP e porta 445 sem usar o NetBIOS sobre TCP (que era usado nas primeiras implementações do SMB 1). O CIFS é uma implementação do SMB 1 e não um protocolo de compartilhamento de arquivos separado.

Dialetos do Protocolo SMB

Quando estamos a falar da implementação SMB1 pela Microsoft, podemos usar o termo CIFS. Em todos os outros casos, e em geral, SMB é o termo correto para se referir a este protocolo de rede. Vamos dar uma olhada mais de perto nas versões do SMB lançadas após o CIFS para obter uma melhor compreensão da diferença entre o CIFS e outros dialetos (versões) do SMB (novos).

SMB 2.0

A Microsoft lançou o SMB 2.0 (ou SMB2) em 2006 com o Windows Vista. Esta versão do SMB é mais confiável do que o SMB 1.0/CIFS e não é CIFS. O número de comandos necessários para transferir arquivos é reduzido de mais de 100 para 20. O desempenho é maior devido aos mecanismos de processamento em pipeline, isto é, a capacidade de enviar um pedido adicional antes de receber a resposta ao anterior. A compactação de múltiplas ações num único pedido reduz o número de pedidos a um cliente, o que melhora o desempenho.

SMB 2.1

O SMB 2.1 fornece melhorias insignificantes no desempenho e mecanismos de bloqueio em comparação com o SMB 2.0. Esta versão do protocolo foi lançada com o Windows 7 e o Windows Server 2008 R2.

SMB 3.0

Inicialmente, esta versão do protocolo era chamada SMB 2.2, mas foi posteriormente renomeada para SMB 3.0 com o Windows 8. A versão SMB 3.0:

  • adicionou SMB Direto (acesso direto à memória), SMB Multicanal e Failover de Transporte SMB
  • melhorou a segurança
  • adicionou suporte para criptografia de ponta a ponta
  • melhorou a eficiência da rede ao reduzir a latência

SMB 3.0.2

SMB 3.0.2 ou 3.02 está disponível desde o Windows 8.1 e o Windows Server 2012 R2. Nesta versão, a compatibilidade com o SMB 1.0 pode ser desativada para melhorar a segurança.

SMB 3.1.1

Esta versão tornou-se disponível a partir do Windows 10 e do Windows Server 2016. As melhorias incluem uma melhor criptografia (AES 128 GCM e AES 128 CCM) e hash SHA-512 para verificações de integridade pré-autenticação.

SMB no Windows e no Microsoft Server

O SMB está disponível no Windows a partir do Windows 3.1 (Windows para Workgroups). As versões do SMB e a compatibilidade para diferentes versões do Windows são explicadas na tabela.

As colunas e as linhas contêm versões do Windows que podem executar um cliente SMB ou servidor SMB (colunas e linhas são intercambiáveis). Uma célula na interseção de uma coluna e linha exibe qual versão do protocolo SMB é usada para comunicação entre as respectivas versões do Windows.

Windows 10

Server 2016 e mais recentes

Windows 8.1

Server 2012 R2

Windows 8

Server 2012

Windows 7

Server 2008 R2

Windows Vista

Server 2008

Win XP, Server 2003 e anteriores
Windows 10

Server 2016 e mais recentes

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 e anteriores SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

CIFS vs SMB: A Provável Fonte da Confusão

Vamos descobrir, usando um exemplo, por que os termos CIFS e SMB ainda são confundidos pelos usuários. Para fazer isso, digamos que estamos usando um servidor de arquivos com um compartilhamento SMB configurado no Windows Server 2019 e uma máquina Linux conectando-se a este servidor de arquivos via protocolo SMB. O Ubuntu 20.04 é a distribuição Linux que estamos usando neste exemplo. Observe que a configuração é a mesma para o Ubuntu 22.

Temos a seguinte configuração em nossos ambientes:

  • Windows Server 2019: 192.168.101.209
  • Linux Ubuntu 20.04: 192.168.101.210
  • Compartilhamento SMB no Windows Server: \\192.168.101.209\share

No Windows Server 2019, o protocolo SMB 1.0/CIFS é desativado por padrão. Para verificar essa configuração e habilitar/desabilitar o cliente e servidor SMB 1.0/CIFS manualmente, vá para Gerenciador do Servidor> Adicionar Funções e Recursos> Recursos.

Mantemos o SMB 1.0/CIFS desativado em nossa máquina Windows Server 2019. Isso significa que o SMB 3 é usado por padrão, com a capacidade de alternar para o SMB 2 para compatibilidade com clientes que utilizam versões (dialetos) SMB 2.

O protocolo CIFS é desativado por padrão em versões modernas do Windows, como o Windows 10, visando uma melhor segurança, e pode ser ativado manualmente, se necessário.

Observação: Em 2017, foram realizados ataques massivos de ransomware em todo o mundo (WannaCry e NotPetya) utilizando-se de brechas de segurança nas vulnerabilidades do SMB 1. Essas brechas ficaram conhecidas como EternalBlue, EternalRomance e EternalChampion. A Microsoft lançou correções de segurança para seus sistemas operacionais a partir do Windows XP e Windows Server 2003, mesmo que esses SOs não fossem oficialmente suportados na época. A Microsoft recomendou o uso do SMB 2 e SMB 3 (que suportam integridade de pré-autenticação) em vez do SMB 1.0/CIFS.

Como mencionado acima, o nome do servidor SMB para Linux é Samba (samba é o nome do pacote). Nós usamos um servidor SMB no Windows. Portanto, não precisamos do Samba neste exemplo, mas sim de um cliente SMB para o Ubuntu Linux.

Um cliente SMB para Linux está incluído em Linux CIFS Utils (cifs-utils é o nome do pacote). É aí que a confusão surge. A primeira versão deste cliente para Linux foi criada num momento em que o SMB 1.0/CIFS era amplamente usado. O protocolo SMB foi atualizado, as versões 2 e 3 do SMB foram lançadas, mas o nome do cliente SMB para Linux permanece o mesmo, e o pacote que inclui o cliente SMB ainda é chamado CIFS Utils. O pacote cifs-utils não faz parte de samba.

Nós conectaremos de Linux usando CIFS Utils a um compartilhamento SMB localizado no Windows Server 2019 para descobrir se o CIFS ainda é usado. Para instalar CIFS Utils, execute o seguinte comando com privilégios de root:

sudo apt-get install cifs-utils

Crie um diretório que será usado como ponto de montagem para o compartilhamento SMB:

mkdir /mnt/share

Conecte-se ao compartilhamento de arquivos SMB localizado em um servidor de arquivos remoto Windows:

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator

Nosso exemplo usa uma conta de usuário de administrador Windows por finalidade educacional.

CIFS vs SMB – qual um deles é usado na sessão atual para se conectar ao servidor de arquivos? Verifique a versão SMB dos clientes conectados ao compartilhamento SMB no Windows Server com o comando PowerShell no Windows Server 2019:

Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect

Como podemos ver na saída do PowerShell, o SMB 3.1.1 é usado para nossa conexão a partir do Ubuntu Linux. O SMB 1.0/CIFS não é usado quando nos conectamos com cifs-utils e o comando mount.cifs para um servidor de arquivos configurado no Windows Server 2019.

Também podemos verificar a versão do protocolo SMB em /proc/mounts com o comando cat /proc/mounts no Linux. Podemos usar o seguinte comando para filtrar apenas os resultados necessários:

cat /proc/mounts | grep cifs

Como vemos na saída, a versão do protocolo para conexão com o compartilhamento de arquivos é marcada como cifs, mas a versão exibida é 3.1.1 (vers=3.1.1), que não é uma versão do CIFS. Este é mais um exemplo mostrando como os termos SMB vs CIFS podem ser confundidos.

De fato, o SMB 3.1.1 é usado e não o CIFS. Podemos comprovar com mais um método usando nmap, que é uma ferramenta gratuita de descoberta de rede usada para análise e solução de problemas.

Para instalar o nmap no Ubuntu, execute o comando como root:

sudo apt-get install nmap

Para escanear todos os hosts online e conectados à nossa 192.168.101.0/24 rede, usamos o comando:

nmap --script smb-protocols 192.168.101.0/24

Estamos interessados em visualizar o resultado para 192.168.101.209, que é o endereço IP do nosso Windows Server 2019 que está funcionando como um servidor de arquivos. O Linux está conectado ao compartilhamento de arquivos neste servidor. Na saída, vemos que os dialetos para os protocolos SMB suportados pelo nosso Windows Server são 2.02, 2.10, 3.00, 3.02 e 3.11. Não há SMB 1.0/CIFS, mesmo que o termo CIFS ainda seja usado em arquivos de configuração e comandos do Linux.

Podemos forçar o uso do CIFS manualmente adicionando o parâmetro vers=1.0 no comando mount no Linux (no lado do cliente) para usar apenas o protocolo SMB 1.0/CIFS ao conectar-se a um compartilhamento de arquivos em um servidor remoto.

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

O resultado é o seguinte:

O servidor fechou abruptamente a conexão. Isso pode acontecer se o servidor não suportar a versão do SMB que você está tentando usar. A versão padrão do SMB mudou recentemente de SMB1 para SMB2.1 e acima.

Este resultado corresponde aos resultados anteriores da nossa investigação SMB vs CIFS em sistemas operacionais modernos. O CIFS não é usado, e o SMB 1.0/CIFS está desabilitado em nosso Windows Server.

Se configurarmos para usar pelo menos o SMB 2.0, então podemos nos conectar ao servidor (lembre-se da lista de dialetos SMB suportados pelo nosso Windows Server 2019 exibidos em nmap):

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0

Ao usar a interface gráfica do usuário no Linux ou em outros sistemas operacionais, use smb:// na linha de endereço ao definir o protocolo de rede a ser usado para conectar a um compartilhamento de arquivos em um servidor remoto.

Ao inserir o endereço de um compartilhamento de arquivos SMB, você deve usar:

smb://nome-do-servidor/nome-do-compartilhamento

Não use:

cifs://nome-do-servidor/nome-do-compartilhamento

porque o cliente tentará se conectar usando o protocolo SMB1.0/CIFS, que pode estar desativado em um servidor (se o cliente até suportar a sintaxe cifs://).

Conclusão

Agora que o protocolo CIFS está desatualizado, o SMB é um dos protocolos usados para se conectar a armazenamento compartilhado em servidores de arquivos e NAS (o outro comumente usado é o NFS). Com o armazenamento compartilhado sendo particularmente vulnerável à corrupção de dados, ransomware e outras ameaças que podem se espalhar facilmente pela rede, certifique-se de fazer backup de arquivos e pastas armazenados em recursos compartilhados para evitar perda de dados. Infectar o computador de apenas um usuário com permissões de gravação para arquivos compartilhados pode causar perda de dados para todos os usuários.

O NAKIVO Backup & Replication é uma solução de proteção de dados que suporta backups incrementais por SMB e NFS de dados armazenados em NAS e servidores de arquivos Windows/Linux.

Source:
https://www.nakivo.com/blog/cifs-vs-smb/