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.