SMB (Samba)

Samba é um software e um protocolo cliente-servidor, tipo requisição-resposta, utilizado para compartilhamento de recursos, e autenticação de usuários (via PDC) em uma rede de computadores. O protocolo SMB (Server Message Block), criado pela IBM e mantido pela Microsoft, foi atualizado e incrementado e é conhecido como o dialeto CIFS (Common Internet File System) utilizado na família Windows. Hoje ele também é utilizado no Linux. O aplicativo é formado por dois serviços, que são configurados através do arquivo “/etc/samba/smb.conf”:   SMBd: servidor que além de permitir o compartilhamento de recurso provê autenticação para clientes SMB.NMBd: procura pelo servidor WINS e o assiste na navegação. Recebe o nome e da o endereço. É o “DNS” do NetBios.   Possui ainda alguns utilitários de linha-de-comando:   SMBClient: Cliente UNIX;SMBTar: Realização de backups compactados, estilo o TAR;NMBLookup: Provê o lookup de nomes NetBIOS sobre TCP/IP;SMBPasswd: Permite ao Administrador gerenciar senhas dos usuários;SMBStatus: Reportar conexões de rede ativas;TestParm: Valida o arquivo de configuração do Samba;TestPrns: Testa quais impressoras são reconhecidas pelo daemon;   Resumidamente administrar usuários tem basicamente 5 comandos:   Smbpasswd –a maria (adiciona o usuário maria)Smbpasswd –x maria (exclui o usuário maria)Smbpasswd –d maria (desabilita o usuário maria)Smbpasswd –e maria (habilita o usuário maria)Smbpasswd maria (usuários será requisitado a digitar a nova senha)
Porta: 445 (TCP) Modelo OSI: Camada de Apresentação/Aplicação

O projeto SAMBA provê software para compartilhar arquivos e impressoras com o sistema operacional Windows, utilizando protocolos clientes common Internet file system (CIFS) e server message block (SMB), um dos protocolos do NETBIOS.

Samba é um conjunto de aplicativos UNIX que se comunicam através do protocolo SMB (Server Message Block). Vários sistemas operacionais, incluindo Windows e OS/2, usam o SMB para interconexão cliente-servidor em uma rede. Suportando este protocolo, o Samba permite que servidores Unix entrem em cena já que estarão se comunicando com o mesmo protocolo de rede de produtos para o Microsoft Windows. Portanto uma máquina rodando um servidor de Samba pode ficar mascarado em uma rede Microsoft oferecendo os seguintes serviços:

  • Compartilhamento de um ou mais sistema de arquivos (filesystems);
  • Compartilhamento de impressoras tanto no servidor como no cliente;
  • Assistir clientes na navegação do ambiente de rede;
  • Autenticação de clientes logando em domínios Windows; e
  • Prover ou assistir com a resolução de servidores de nome WINS (name server resolution).

O Samba é o menino prodígio de Andrew Tridgell, que atualmente coordena o seu desenvolvimento. Este projeto começou em 1991 quando Andrew criou um programa servidor de arquivos para sua rede local que suportava um protocolo DEC da Digital Pathworks. Apesar de não saber na época este protocolo seria o SMB. Algum tempo depois de começar a distribuir seu servidor sob o nome de SMB server descobriu-se que este nome já pertencia ao produto de outra empresa foi quando ele tentou o seguinte no Unix:

grep -i ‘s.*m.*b’ /usr/dict/words e a resposta foi : salmonberry samba sawtimber scramble. Daí o nome Samba.

Hoje o conjunto de aplicativos incluem um par de serviços que proveem recursos compartilhados para clientes SMB na rede. Estes recursos são também usualmente chamados de serviços. Os daemons são:

  • Smbd: Permite o compartilhamento de arquivos e impressoras em um rede SMB e autenticação e autorização para clientes SMB.
  • Nmbd: Procura pelo Windows Internet Name Service (WINS) e o assiste na navegação.

A Microsoft também contribuiu neste material colocando as definições do protocolo SMB e do CIFS (Common Internet File System) como um RFC (Request for Comments). O protocolo CIFS é uma nova versão do SMB que será utilizado nos produtos da família Windows – ambos os termos são utilizados.

Para a configuração do SAMBA, utiliza-se o arquivo /etc/samba/smb.conf.

Rede SMB

Trabalhar com uma rede SMB é significativamente diferente de trabalhar com uma rede Unix sobre TCP/IP, discutiremos então os conceitos básicos atrás de uma rede SMB logo em seguida veremos então algumas implementações da Microsoft e finalmente veremos onde o servidor Samba pode ou não se encaixar.

Por volta de 1984 a IBM criou uma API (Application Programming Interface) para conectar seus computadores em rede chamada Network Basic Input/Output System – NetBIOS. A API NetBIOS prove para a aplicação um design rudimentar para conexão e o compartilhamento de dados com outros computadores. É interessante pensar na NetBIOS como extensões de chamadas padrões de rede da API BIOS. Com a BIOS, cada chamada de baixo nível está confinada ao hardware da máquina local e não precisa de ajuda alguma para ir ao seu destino. Originalmente a NetBIOS tinha que trocar instruções com computadores através de IBM PC ou redes Token Ring. Era então requerido um protocolo de transporte de baixo nível para carregar as requisições de um computador para o outro.

No final de 1985 a IBM lançou tal protocolo, que integrava a API NetBIOS. Era o NetBIOS Enhanced User Interface ( NetBEUI ). O NetBEUI foi desenvolvido para pequenas LANs ( com menos de 255 nó, o que era uma restrição prática em 1985 ) e permitia que cada máquina na rede clamasse um nome (até 15 caracteres) que não estivesse já sendo utilizado por outra máquina. O protocolo NetBEUI era muito popular entre aplicativos de rede incluindo aqueles que rodam sobre Windows para Workgroups. Mais tarde implementações do NetBIOS sobre o protocolo IPX da Novell surgiram, competindo então com o NetBEUI. Apesar disto os protocolos utilizados pela comunidade da Internet eram o TCP/IP e o UDP/IP, e uma implementação da API NetBIOS sobre estes protocolos cedo se tornou necessária.

É importante lembrar que o TCP/IP utiliza números para representar o endereço dos computadores enquanto a NetBIOS utiliza apenas nomes. Isto representou um grande problema quando tentaram juntá-los. Em 1987 a IETF (Internet Engineering Task Force) publicou uma série de documento de padronização entitulados RFC 1001 e 1002, que demonstravam como a NetBIOS deveria trabalhar sobre uma rede TCP/UDP. Desde então o padrão que estes documentos regulamentam são conhecidos como NetBIOS sobre TCP/IP ou NBT. O padrão NBT estabelece o funcionamento de três serviços em uma rede:

  • Serviço de nomes; e
  • Dois serviços de comunicação:
    • Datagramas
    • Sessões.

O serviço de nomes soluciona o problema de nome para endereço mencionado anteriormente, permitindo que cada computador declare um nome específico para si na rede que será traduzido em um nome “legível” – IP – pela máquina, de modo semelhante ao DNS (Domain Name Server) que existe na Internet. Os serviços de datagrama e sessão são protocolos secundários de comunicação usados para transmissão e recepção de dados de máquinas NetBIOS através da rede.

Recebendo um nome

Em um mundo NetBIOS cada máquina, quando se conecta na rede, clama por um nome para si, o que é chamado de registro de nome (Name Registration). Entretanto, não pode haver mais de uma máquina reclamando o mesmo nome em um ambiente de trabalho, o que causaria tamanha confusão na comunicação entre as máquinas da rede. Existem então duas diferentes abordagens para evitar que isto ocorra:

  1. Usar o NetBIOS Name Server ( NBNS ) para manter um controle sobre qual cliente registrou cada nome NetBIOS;
  2. Permitir que cada máquina na rede reclame o seu nome quando uma outra máquina tentar registrar o nome já utilizado.

Além desta verificação do nome deve existir uma maneira de se traduzir o nome NetBIOS para um endereço IP, este processo é chamado de resolução de nome (Name Resolution). Na NBT esta resolução pode se dar de duas maneiras:

  1. Fazer com que cada máquina responda seu endereço IP quando “escuta” uma broadcast de requisição do seu nome NetBIOS;
  2. Usar o NBNS para ajudar na resolução do nomes NetBIOS para endereços IP.

Como podemos observar ter um NBNS na rede pode ser uma ferramenta extremamente poderosa. Veremos no caso do método sem o servidor de nomes. Quando uma máquina cliente se conecta à rede ele dá um broadcast declarando que quer registrar um nome NetBIOS específico. Se nenhuma máquina na rede reclamar do uso de tal nome o nome é registrado. Mas se alguma outra máquina no ambiente de trabalho já estiver utilizando este nome ela irá mandar uma mensagem a máquina que acabou de se conectar dizendo que tal nome já foi registrado. O que gera uma quantidade de tráfico muito grande para uma simples operação de registro de nome. Com um NBNS a mesma coisa ocorre com exceção de que a comunicação necessária para o registro ocorre somente entre a máquina que se conectou à rede e o NBNS. Não há então broadcast quando uma máquina tenta registrar seu nome na rede. A mensagem de registro é simplesmente enviada diretamente do cliente para o NBNS, e este responde se o nome já foi ou não registrado. Isto tipo de comunicação é conhecida como ponto a ponto, e é extremamente eficaz em redes com uma ou mais sub-redes.

O mesmo princípio pode ser aplicado à resolução de nomes. Sem um NBNS, a resolução de nomes NetBIOS seria feita através de um mecanismo de broadcast. Todos os pacotes de requisição seriam enviados para cada computador na rede com a esperança de que uma máquina responderia diretamente a máquina que fez a requisição. Fica claro então que a NÃO utilização de um NBNS resulta em entupimentos desnecessários na rede com broadcasts para cada requisição de registro de nome.

Tipos de Nós

Cada máquina em uma rede NBT recebe uma das seguintes designações dependendo de como processa o registro de nome e a resolução: nó-b, nó-p, nó-m, nó-h. Os comportamentos destes nós são resumidos abaixo:

  • Nó-b: Utiliza somente broadcast para o registro de nome e a resolução.
  • Nó-p: Utiliza registro e resolução ponto a ponto somente.
  • Nó-m: Utiliza broadcast para o registro. Se registrado com sucesso notifica o NBNS do resultado. Utiliza broadcast para a resolução, se o este não tiver sucesso utiliza o NBNS.
  • Nó-h (híbrido): Utiliza o NBNS para registro e resolução. Utiliza o broadcast se o NBNS não der resposta ou estiver inoperante.

Por trás de um nome NetBIOS

Os nomes NetBIOS devem seguir um rígido conjunto de regras. A lista abaixo descreve melhor as principais propriedades que estes devem ter:

  1. Um nome NetBIOS registrado pode se referir a uma única estação de trabalho, ou a nós múltiplos que façam parte de um grupo de trabalho.
  2. Nomes NetBIOS não possuem formato hierárquico. Ou seja, não existe pontos como no DNS.
  3. Nomes NetBIOS devem somente possuir caracteres de a..z, A..Z, 0..9 ou um dos seguintes caracteres: ! @ # $ % ^ & ( ) – ‘ { } . ~
  4. Nomes NetBIOS podem ter no máximo 15 caracteres para descrever o recurso, e um 16 octeto para se referir ao tipo de recurso. Este último octeto indica que propriedades o computador registrado possui.

Tipos de Recurso (Recurso/Octeto – Valor em Hexadecimal):

  • Serviço padrão de estação de trabalho: 00
  • Serviço de mensagem – Messenger Service (WinPopup) : 03
  • RAS Server Service: 06
  • Domain Master Browser Service (associado com o controlador de domínio primário): 1b
  • Nome do Master Browser: 1d
  • Serviço de NetDDE: 1f
  • Servidor de arquivos ( incluíndo servidor de impressora ): 20
  • Serviço de cliente de RAS: 21

Nomes de grupos

Redes SMB/CIFS também utilizam o conceito de grupos onde cada máquina da rede pode se registrar. Num universo Windows um grupo de trabalho é equivalente a um grupo SMB.

Tipos de recursos de grupos NetBIOS:

  • Grupo padrão de estação de trabalho: 00
  • Servidor de logon: 1c
  • Nome de Master Browser: 1d
  • Nome de grupo normal (utilizado em browser elections): 1e
  • Nome de grupo de internet (administrativo): 20

Datagrama e Sessões

Vamos agora focar em outras responsabilidades do NBT que é prover serviços de conexão entre duas máquinas NetBIOS. São dois estes serviços, o serviço de datagrama e o serviço de sessão, o entendimento destes serviços não é essencial para a utilização do Samba mas dá uma nítida ideia de como o NBT funciona e como proceder para solucionar eventuais problemas quando o Samba não funciona.

O serviço de datagrama não possui uma conexão estável entre máquinas. Os pacotes de dados são simplesmente enviados de uma máquina para outra ou são broadcasted sem qualquer preocupação com a ordem de chegada no destino ou mesmo se estão chegando no destino. Datagramas são utilizados para a transmissão rápida de blocos simples de dados entre máquinas de uma rede NetBIOS. O serviço de datagrama possui as seguintes primitivas:

Primitivas do Serviço Datagram:

  • Send Datagram: Transmite o datagrama para uma máquina ou um grupo delas
  • Send Broadcast Datagram: Dá um broadcast de um datagrama para as máquinas que se encontram em Receive Broadcast Datagram.
  • Receive Datagram: Recebe um datagram de uma máquina.
  • Receive Broadcast Datagram: Espera por um broadcast de um datagrama.

O serviço de sessão é um pouco mais complexo. As sessões são um método de comunicação que em teoria oferece a habilidade de detecção de conexões problemáticas ou inoperantes entre dois aplicativos NetBIOS. Ajuda muito pensar numa sessão NBT em termos de uma chamada telefônica, uma conexão full-duplex é aberta entre a máquina transmissora e a receptora e deve permanecer aberta durante a duração da conversação. Cada lado sabe quem é o transmissor e que é o receptor podendo então se comunicar com as primitivas abaixo:

Primitivas de sessão:

  • Call: Call Inicia uma sessão com a máquina especificada;
  • Listen: Espera a chamada de uma máquina conhecida ou de qualquer máquina;
  • Send: Transmite dados para a outra máquina;
  • Receive: Recebe dados da outra máquina;
  • Hang-up: Termina um call;
  • Session Status: Retorna informações nas sessões requisitadas.

As sessões são a espinha dorsal do compartilhamento de recursos em uma rede NBT. Elas são utilizadas tipicamente para o estabelecimento de conexões estáveis entre máquinas clientes e discos ou impressoras compartilhadas no servidor. O cliente “chama” o servidor e inicia-se uma troca de informações como que arquivo deseja-se abrir ou que dados devem ser trocados. Essas “chamadas” podem durar longos períodos de tempo ocorrendo dentro de um contexto de uma única conexão. Se acontecer algum erro o software de sessão (TCP) irá retransmitir até que os dados sejam recebidos corretamente, ao contrário da abordagem “punt-and-pray” do serviço de datagrama. (UDP).

SMB/CIFS internamente

Resumindo o SMB/CIFS é um protocolo de redes que permite o compartilhamento de arquivos através dos nós de uma rede. O protocolo é baseado em um design do cliente onde este envia pacotes de requisições ao servidor, o servidor por sua vez envia pacotes de resposta ao cliente. Cada pacote que é enviado contêm um cabeçalho padrão e mais dois campos de tamanho variável que são utilizados para informações específicas do pacote. Os pacotes também possuem um campo de comando que indica o propósito do pacote. Campos de comando comum indicam se o pacote é de login, abertura de arquivo, leitura de arquivo ou escrita de arquivo.

Para termos um entendimento mais aprofundado do protocolo devemos estudar três seções detalhadas do SMB/CIFS que serão apresentadas mais abaixo. A primeira parte cobre as mais importantes propriedades do protocolo. A segunda dá uma introdução no pacote padrão de cabeçalho e ultima ilustra duas típicas sequências de pacotes: logando no servidor e abertura/leitura de arquivo.

Propriedades do protocolo

Cliente/servidor + requisição/resposta: Como mencionado acima a arquitetura do SMB/CIFS é baseada no cliente enviando requisições e o servidor respondendo a cada uma das requisições enviadas. O protocolo é capaz de suportar múltiplas requisições. O que é feito através do uso de uma id multiplexada (MID). O cliente assegura que cada requisição que é enviada ao servidor possui um único MID. Quando o servidor responde a uma determinada requisição a resposta contêm o mesmo MID. Dessa forma, múltiplas requisições podem ser enviadas ao servidor e o cliente simplesmente compara o MID da resposta com o MID gerado para saber a qual requisição aquela resposta esta se referindo.

Baseado em comandos: Cada pacote contém um octeto para o campo de comando. Respostas ao cliente sempre possuem o mesmo código de comando do pacote de requisição.

Dialetos/negociação: Existem várias versões do protocolo SMB/CIFS desde sua criação nos anos 80. Cada versão do protocolo é referida como um dialeto é a este dialeto é associado uma string para indentificá-lo como por exemplo “PC NETWORK PROGRAM 1.0” ou “NT LM 0.12”. Quando um cliente deseja acessar arquivos num servidor remoto, o primeiro pacote SMB/CIFS que é enviado é o pacote de negociação de protocolo. Neste pacote o cliente lista todas as strings de dialeto que é capaz de entender, no pacote de resposta o servidor indica com qual dialeto ele deseja se comunicar ou se o servidor não entende qualquer dialeto listado pelo cliente. Desta maneira o cliente e o servidor podem negociar qual dialeto usar para cada sessão particular de SMB/CIFS.

Usuário/compartilhamento – níveis de segurança: Um compartilhamento é uma entidade do servidor (tipicamente uma pasta de arquivos ou uma impressora) que é marcada como disponível para os clientes para o compartilhamento na rede. A restrição de acesso para o compartilhamento é feita com um dos seguintes métodos:

  • Níveis de segurança do usuário, utilizado em Windows NT e Windows 2000;
  • Níveis de segurança do compartilhamento.

Encriptação: Para ambos os métodos mencionados acima a senha deve ser enviada ao servidor num formato encriptado. Existem dois métodos de encriptação utilizados, o estilo NT e o antigo estilo LAN Manager. Os dois usam autenticação challenge-response onde o servidor manda uma string aleatória e espera uma resposta que prove que o cliente saiba a string enviada e a senha do usuário.

Command batching: Muitos pacotes SMB/CIFS são capazes de “cozinhar” outros pacotes SMB/CIFS para reduzir a latência de resposta e melhorar e utilização da banda da rede. Esta técnica é conhecida como ANDX batching.

Travamento oportunístico (Opportunistic locking): Quando um pacote SMB/CIFS especifica uma abertura de arquivo um oplock pode ser requisitado. Se garantido pelo servidor o oplock indica ao cliente que nenhuma outra entidade esta acessando tal arquivo. Isto permite ao cliente fazer modificações no arquivo sem ter que escrevê-las no servidor imediatamente.

Cabeçalho SMB/CIF

Todos as requisições e respostas SMB/CIFS possuem o seguinte template de cabeçalho apresentado abaixo.

Cabeçalho: O início de cada pacote SMB/CIFS contêm um cabeçalho de 4 octetos. O primeiro octeto é 0xff seguido da representação ASCII das letras ´S´, ´M´ e ´B´.

Command: O campo de comando contêm um código de 1 octeto indicando o tipo de pacote. Alguns exemplos:

  • SMB_COM_READ_ANDX7 (0x2e)
  • SMB_COM_TREE_CONNECT (0x70)
  • SMB_COM_NEGOTIATE (0x72)

Error class: O servidor indica se uma requisição específica foi recebida com este campo. Tipicamente o campo é zero indicando o sucesso. Se for um número diferente de zero o campo identifica a classe de erro, quando seta este campo pode ter os seguinte valores:

  • ERRDOS (0x01) – Erro é do núcleo do conjunto de instruções do sistema operacional DOS.
  • ERRSRV (0x02) – Erro é gerado pelo gerenciador de arquivos de rede do servidor.
  • ERRHRD (0x03) – Erro no hardware.
  • ERRCMD (0xFF) – O comando não estava no formato ‘SMB’.

Error code: Este campo de 16 octetos indica o tipo de erro que ocorreu. Esta tipicamente setado em zero indicando que não houve erro. Se setado este número em conjunto com o error class define o erro ocorrido. Alguns destes erros são “bad password” ou “file does not exist”. Assim como o campo error class este campo somente é setado pelos servidores nos pacotes de resposta às requisições.

Flags: A maioria dos oito octetos neste campo especificam opções particulares. A não ser o bit 3 que quando setado todos os caminhos devem ser tratados sem se preocupar se os caracteres são maiúsculos ou minúsculos.

Flags2: Mais opções. Alguns bits úteis:

  • bit 0 – se setado o servidor poderá retornar arquivos com nomes longos
  • bit 6 – se setado indica que qualquer caminho na requisição pode ser um arquivo com nome longo
  • bit 16 – se setado indica que as strings no pacote estão codificadas com UNICODE.

Pad/security signature: Tipicamente setado em zero.

Tree ID (TID): O TID é um número de 2 octetos para identificar que recurso este pacote em particular esta se referindo. Quando os pacotes são trocados, o que não tem nada a ver com um recurso este campo não faz sentido e é ignorado. Se um cliente deseja receber acesso a um recurso o cliente envia um pacote com o campo de comando setado em SMB_COM_TREE_CONNECT_ANDX. Neste pacote o nome do compartilhamento ou a impressora é especificado (ex. \\server\dir). O servidor então verifica se o recurso existe e se o cliente possui acesso e então libera o compartilhamento enviando uma resposta de sucesso. Neste pacote o servidor irá setar qualquer número no campo TID. A partir daí o cliente quando quiser fazer requisições se referindo a esse compartilhamento utilizará o TID recebido anteriormente.

Process ID (PID): O PID é um número de 2 octetos que identifica que processo está fazendo a requisição no cliente. O servidor utiliza este número para checar problemas de concorrência (tipicamente para garantir que arquivos não serão corrompidos por processos concorrentes)

User ID (UID): O UID é um número de 2 octetos para identificar que usuário que está fazendo as requisições na máquina cliente. O cliente deve obter um UID do servidor enviando a este uma requisição de setup de sessão contendo o nome do usuário e sua senha. Passada a verificação de nome de usuário/senha o servidor responde a requisição incluindo na resposta um UID gerado. O cliente então utiliza este UID em todas as futuras requisições. Se alguma das requisições dos clientes esbarrar em permissões de arquivos/impressoras, o servidor irá verificar se o UID da requisição possui as permissões necessárias para acessar tal recurso.

Multiplex ID (MID): O MID é um número de 2 octetos utilizados para gerenciar múltiplas requisições. Sempre que um cliente enviar um pacote o servidor checa o MID para ver se há alguma requisição pendente.

WordCount e parameter words: Os pacotes podem usar estes dois campos para armazenar dados específicos dos comandos. O template acima não suporta todos os possíveis tipos de dados para um pacote SMB/CIFS. Para remediar este problema o campo parameter words foi criado com tamanho variável. O campo wordcount especifica quantas palavras de 2 octectos o campo parameter words irá conter. Dessa forma cada pacote pode se ajustar ao tamanho necessário para transmitir dados de seu comando específico.

ByteCount e buffer: Estes campos são muito similares aos anteriores wordcount e parameter words. Eles irão armazenar uma quantidade de dados variável específica numa base por pacote.

Arquivos

Como dito anteriormente o Samba pode ser resumindo no funcionamento de dois daemons. Eis ambos e suas funcionalidades:

Smbd: Responsável pelo gerenciamento de recursos compartilhados entre a máquina servidora de samba e seus clientes. Prove serviços de arquivos, impressora e navegação aos clientes através de uma ou mais redes. O smdb lida com todas as notificações entre o servidor Samba e os clientes de rede. Além disto cuida da autenticação de usuário, travamento de recursos e o compartilhamento de dados.

  • Serviços de Arquivo e Impressão
  • Autenticação e autorização:
    • Modo share: compartilha recursos sem necessidade de autenticação
    • Modo user: compartilha recursos mediante autenticação de usuário (usuário específico dentro de uma unidade administrativa).

Nmbd: Um simples servidor de nomes que imita a funcionalidade do WINS e do NetBIOSNS. Escuta as requisições de servidor de arquivos e retorna a informação apropriada a cada requisição. Provê ainda listas de navegação para o Ambiente de Rede e participa de browsing elections.

O Samba ainda vem com alguns utilitários Unix para linha de comando :

Smbclient: Um cliente UNIX ftp-like para se conectar a compartilhamentos SAMBA.

Smbtar: Um programa para backup de dados em compartilhamentos, similar ao tar.

Nmblookup: Um programa que prove o lookup de nomes NetBIOS sobre TCP/IP

Smbpasswd: Um programa para permitir ao administrador gerenciar as senhas de usuários.

Smbstatus: Um programa para reportar as conexões de rede ativas no compartilhamentos do servidor Samba.

Testparm: Um programa simples para validar o arquivo de configuração do Samba.

Testprns: Um programa para testar quais impressoras são reconhecidas pelo daemon smbd.

Arquivo de configuração: Para a configuração do SAMBA, utiliza-se o arquivo /etc/samba/smb.conf.

CIFS (Common Internet File System)

O Common Internet File System (CIFS) é a maneira padrão que os usuários de computador compartilham arquivos através de intranets corporativas e na Internet. Uma versão melhorada do protocolo aberto da Microsoft, multi-plataforma, SMB, protocolo CIFS é um protocolo de compartilhamento de arquivos nativo no Windows 2000.

Sistema de arquivo comum de Internet (CIFS, Common Internet File System)

Um dos principais problemas da integração das filiais é a dependência das operações de sistema de arquivos. A maioria dos protocolos de sistema de arquivos, como o Network File System (NFS) do UNIX e o Common Internet File System (CIFS) da Microsoft, não funciona com eficiência em redes com baixa largura de banda ou de alta latência. Esses protocolos foram desenvolvidos originalmente sob a premissa básica de que não existiam restrições de largura de banda. A TI da Microsoft precisava de uma solução melhor para conectar cerca de 140 filiais a três hubs regionais: Redmond, Cingapura e Dublin. Também eram necessários relatórios de replicação melhores.

Protocolo que pode ser utilizado por clientes em uma rede para requerer serviços de arquivo e impressão em um ambiente misto UNIX/Windows

SMB/CIFS é o protocolo padrão utilizado pelo Windows Server 2003 para o compartilhamento de pastas e impressoras através de uma rede.

Os protocolos NFS e CIFS permitem o compartilhamento via rede de recursos entre sistemas com arquitetura cliente-servidor, quaisquer que sejam suas plataformas de hardware e software.

O SMB/CIFS (Server Message Block/Common Internet File System) é um protocolo de redes cujo uso mais comum como foi dito anteriormente é o compartilhamento de arquivos em uma LAN. Este protocolo permite que o cliente manipule arquivos como se estes estivessem em sua máquina local. Operações como leitura, escrita, criação, apagamento e renomeação são suportadas, sendo a única diferença de que os arquivos manipulados não estão no computador local e sim em um servidor remoto.

O protocolo SMB/CIFS funciona enviando pacotes do cliente para o servidor. Cada pacote é tipicamente baseado em uma requisição de algum tipo, como a abertura ou leitura de um arquivo. O servidor então recebe este pacote checa-o para ver se a requisição é válida, ou seja, verifica se o cliente possui as permissões apropriadas para efetuar a requisição e finalmente executa a requisição e retorna um pacote de resposta ao cliente. O cliente então analisa o pacote de resposta para determinar se a requisição inicial foi completada com sucesso.

O SMB/CIFS é razoavelmente um protocolo de rede de alto nível. No modelo OSI ele é provavelmente melhor descrito como uma camada de Aplicação/Apresentação. Isto significa que o SMB/CIFS depende de outros protocolos para o transporte. O protocolo mais utilizado para transporte confiável é o netbios sobre TCP (NBT), que será melhor descrito mais a frente em. Outros protocolos foram utilizados na camada de transporte, porém com a enorme popularidade da Internet o NBT se tornou um “padrão”.

Apesar do compartilhamento de arquivos ser a principal proposta do SMB/CIFS existem outras funções associadas a ele. A maioria das implementações de SMB/CIFS são capazes de determinar outros servidores SMB/CIFS na rede (browsing), compartilhar impressoras e até mesmo fornecer complicadas técnicas de autenticação. Veremos aqui somente os conceitos básico de operações com arquivos do SMB/CIFS.

O protocolo CIFS é uma versão atualizada do antigo protocolo NetBIOS, usado para a navegação e acesso a compartilhamentos em redes Windows. O protocolo CIFS é utilizado por padrão pelos clientes rodando o Windows 2000, XP e Vista, além de ser usado pelas versões recentes do Samba. O protocolo CIFS também é conhecido como um dialeto do protocolo SMB (O CIFS é uma implementação do SMB).

No SMB/CIFS um compartilhamento é um recurso da máquina local que é disponibilizado para acesso via rede, que poderá ser mapeada por outra máquina. O compartilhamento pode ser um diretório, arquivo, impressora. Além de permitir o acesso do usuário, o compartilhamento pode ser protegido por senha, e ter controle de acesso de leitura/gravação, monitoração de acessos, diretórios ocultos, autenticação via PDC (domínio) e outras formas para restringir e garantir segurança na disponibilização dos dados.

Onde é encontrado?

O protocolo SMB/CIFS é extremamente utilizado pelos sistemas operacionais Microsoft Windows. O Windows para Workgroups foi o primeiro sistema operacional da Microsoft a utilizar o SMB/CIFS e cada sistema operacional da Microsoft desde então passaram a possuir a capacidade de funcionar como um servidor ou cliente de SMB/CIFS. Os sistemas operacionais da Microsoft utilizam o SMB/CIFS para operações com arquivos remotas (tipicamente o mapeamento de drives de rede), navegação (via o Ambiente de Rede, autenticação (NT e Windows 2000) e serviços de impressão remotos. É razoável então dizer que o núcleo de rede nativo da Microsoft seja baseado nos serviços do SMB/CIFS.

Devido a grande entrada de produtos Microsoft tanto nas grandes corporações como nos usuários particulares o protocolo SMB/CIFS é encontrado praticamente em todos os lugares. A maioria dos sistemas Unix-Like possuem uma implementação de cliente/servidor do SMB/CIFS via Samba. Computadores Apple também possuem seus clientes/servidores SMB/CIFS, o que faz com que o protocolo SMB/CIFS seja o protocolo mais comum para o compartilhamento de arquivos disponível.

 Características do CIFS:

  • O CIFS é baseado no padrão do protocolo SMB;
  • Para realizar acesso a um arquivo em um servidor CIFS (SNIA, 2002), um cliente precisa:
  • Analisar e segmentar o nome completo deste arquivo para determinar o nome do servidor;
  • Determinar o nome relativo do arquivo dentro deste servidor;
  • Resolver o nome do servidor para um endereço da camada de transporte (obter o endereço IP, usando DNS – Domain Name System – ou NetBIOS);
  • Conectar-se ao servidor e então trocar mensagens CIFS com ele.
  • Para acessar um arquivo, o cliente, entre outras ações, precisa determinar o nome relativo do arquivo dentro do servidor.
  • Um servidor pode terminar a conexão de transporte quando, nele, um cliente não tiver recursos abertos.

Administrando Usuários

Depois de instalar o Samba, o próximo passo é cadastrar os logins e senhas dos usuários que terão acesso ao servidor. Esta é uma peculiaridade do Samba: ele roda como um programa sobre o sistema e está subordinado às permissões de acesso deste. Por isso, ele só pode dar acesso para usuários que, além de estarem cadastrados no Samba, também estão cadastrados no sistema. Existem duas abordagens possíveis. A primeira é criar usuários “reais”, usando o comando adduser ou um utilitário como o “user-admin” (disponível no Fedora e no Debian, através do pacote gnome-system-tools). Ao usar o adduser, o comando fica:

# adduser maria

Uma segunda opção é criar usuários “castrados”, que terão acesso apenas ao Samba. Essa abordagem é mais segura, pois os usuários não poderão acessar o servidor via SSH ou Telnet, por exemplo, o que abriria brecha para vários tipos de ataques. Nesse caso, você cria os usuários adicionando os parâmetros que orientam o adduser a não criar o diretório home e a manter a conta desativada até segunda ordem:

# adduser –disabled-login –no-create-home maria

Isso cria uma espécie de usuário fantasma que, para todos os fins, existe e pode acessar arquivos do sistema (de acordo com as permissões de acesso), mas que, por outro lado, não pode fazer login (nem localmente, nem remotamente via SSH), nem possui diretório home. Uma dica é que no Fedora e no CentOS (e outras distribuições derivadas do Red Hat), você só consegue usar o comando caso logue-se como root usando o comando “su -” ao invés de simplesmente “su”. A diferença entre os dois é que o “su -” ajusta as variáveis de ambiente, incluindo o PATH, ou seja, as pastas onde o sistema procura pelos executáveis usados nos comandos. Sem isso, o sistema não encontra o executável do adduser, que vai na pasta “/usr/sbin”. Os parâmetros suportados pelo adduser também são um pouco diferentes. O padrão já é criar um login desabilitado (você usa o comando “passwd usuário” para ativar) e, ao invés do “–no-create-home”, usa a opção “-M”. O comando (no Fedora) fica, então:

# adduser -M maria

De qualquer uma das duas formas, depois de criar os usuários no sistema você deve cadastrá-los no Samba, usando o comando: “smbpasswd -a”, como em:

# smbpasswd -a maria

Se você mantiver os logins e senhas sincronizados com os usados pelos usuários nos clientes Windows, o acesso aos compartilhamentos é automático. Caso os logins ou senhas no servidor sejam diferentes, o usuário precisará fazer login ao acessar:

Um detalhe importante é que, ao usar clientes Windows 95/98/ME, você deve marcar a opção de login como “Login do Windows” e não como “Cliente para redes Microsoft” (que é o default) na configuração de rede (Painel de controle > Redes). Para desativar temporariamente um usuário, sem removê-lo do sistema (como em situações onde um funcionário sai de férias, ou um aluno é suspenso), você pode usar o parâmetro “-d” (disable) do smbpasswd, como em: # smbpasswd -d maria Se o servidor Samba for configurado como PDC da rede, autenticando os clientes Windows (como veremos em detalhes a seguir), os usuários com contas desativadas sequer conseguem fazer logon no sistema:

Para reativar a conta posteriormente, use o parâmetro “-e” (enable), como em:

# smbpasswd -e maria

Se, por outro lado, você precisar remover o usuário definitivamente, use o parâmetro “-x” (exclude), seguido pelo comando “deluser”, que remove o usuário do sistema, como em:

# smbpasswd -x maria

# deluser maria

Depois de criados os logins de acesso, falta agora apenas configurar o Samba para se integrar à rede e compartilhar as pastas desejadas, trabalho facilitado pelo Swat. A segunda opção é editar manualmente o arquivo de configuração do Samba, o “/etc/samba/smb.conf”, como veremos mais adiante. As opções que podem ser usadas no arquivo são as mesmas que aparecem nas páginas do Swat, de forma que você pode até mesmo combinar as duas coisas, configurando através do Swat e fazendo pequenos ajustes manualmente, ou vice-versa.

Bibliografia

Questões

Resolução de Questões de Concursos Anteriores

MPU – Analista Judiciário – 2013 – CESPE
Acerca dos sistemas operacionais Windows Server e Linux, julgue os itens seguintes.   O pacote de software denominado Samba, disponível sob licença pública GNU, implementa o lado servidor do CIFS (Common Internet File System) em hosts Linux, apresentando como vantagem, entre outras, o fato de possibilitar a instalação de somente um pacote no servidor, de modo que se torna dispensável qualquer software especial na porção Windows da aplicação.   Certo ou Errado?

RESPOSTA: Certo

O Cliente já está embutido no sistema operacional Windows.

TRT 6ª Região – Analista Judiciário – 2012 – FCC
SAMBA é um software empregado em situações onde se deseja interoperabilidade entre sistemas Unix e Windows conectados a uma rede. SAMBA é uma implementação do protocolo SMB para sistemas   a) Windows que permite que sistemas Windows tenham acesso a arquivos do sistema Unix, mas não permite que sistemas Unix tenham acesso a arquivos do sistema Windows.   b) Windows que permite tanto que sistemas Windows tenham acesso a arquivos do sistema Unix, quanto que sistemas Unix tenham acesso a arquivos do sistema Windows.   c) Unix que permite que sistemas Windows tenham acesso a arquivos do sistema Unix, mas não permite que sistemas Unix tenham acesso a arquivos do sistema Windows.   d) Windows que permite que sistemas Unix tenham acesso a arquivos do sistema Windows, mas não permite que sistemas Windowstenham acesso a arquivos do sistema Unix.   e) Unix que permite tanto que sistemas Windows tenham acesso a arquivos do sistema Unix, quanto que sistemas Unix tenham acesso a arquivos do sistema Windows.

RESPOSTA: E

Samba é um programa de computador, utilizado em sistemas operacionais do tipo Unix, que simula um servidor Windows, permitindo que seja feito gerenciamento e compartilhamento de arquivos em uma rede Microsoft.

Na versão 3, o Samba não só provê arquivos e serviços de impressão para vários Clientes Windows, como pode também integrar-se com Windows Server Domain, tanto como Primary Domain Controller (PDC) ou como um Domain Member. Pode fazer parte também de um Active Directory Domain.

TRT 6ª Região – Analista Judiciário – 2012 – FCC
CIFS e NFS   a) referem-se, respectivamente, às implementações para Unix e Windows de um mesmo protocolo que oferece a funcionalidade de sistema de arquivos distribuído.   b) são diferentes implementações de um mesmo protocolo que oferecem a funcionalidade de sistema de arquivos distribuído.   c) são, respectivamente, cliente e servidor de um mesmo protocolo que implementa a funcionalidade de sistema de arquivos distribuído.   d) são diferentes protocolos que implementam a funcionalidade de sistema de arquivos distribuído.   e) referem-se, respectivamente, às implementações para Windows e Unix de um mesmo protocolo que oferece a funcionalidade de sistema de arquivo distribuído.

RESPOSTA: D

TRT 6ª Região – Técnico Judiciário – 2012 – FCC
O gerenciamento de sistemas de arquivos é feito através de protocolos. Considere   I. É um protocolo de compartilhamento de recursos proprietário da Microsoft. II. É um protocolo utilizado majoritariamente em sistemas Unix e Linux. III. É a versão pública do protocolo SMS da Microsoft usado em sistemas Windows.   A correta associação do protocolo com sua definição está em:   a) I. SMB (Server Message Block) b) I. NFS (Network File System) c) III. NFS (Network File System) d) II. CIFS (Common Internet File System) e) II. SMB (Server Message Block)

RESPOSTA: A

Correios – Analista de Correios – 2011 – CESPE
O projeto SAMBA provê software para compartilhar arquivos e impressoras com o sistema operacional Windows, utilizando protocolos clientes common Internet file system (CIFS) e server message block (SMB), um dos protocolos do NETBIOS. Para a configuração do SAMBA, utiliza-se o arquivo /etc/samba/smb.conf.   Certo ou Errado?

RESPOSTA: Certo

TRT 22ª Região – Técnico Judiciário – 2011 – FCC
Em relação aos protocolos CIFS e NFS:   a) CIFS é protocolo padrão nos sistemas operacionais UNIX. b) NFS é baseado no protocolo SMB (Server Message Block). c) CIFS não requer que usuários façam requisições de autenticação para acessar o arquivo. d) NFS é independente do sistema operacional e do protocolo de transporte. e) NFS é dependente da rede e da arquitetura do servidor.

RESPOSTA: D

a) Errada.  O protocolo CIFS é uma versão atualizada do antigo protocolo NetBIOS, usado para a navegação e acesso a compartilhamentos em redes Windows. O protocolo CIFS é utilizado por padrão pelos clientes rodando o Windows 2000, XP e Vista, além de ser usado pelas versões recentes do Samba. O protocolo CIFS também é conhecido como um dialeto do protocolo SMB.

b) Errada. O CIFS é uma implementação do SMB.

c) Errada. No SMB/CIFS um compartilhamento é um recurso da máquina local que é disponibilizado para acesso via rede, que poderá ser mapeada por outra máquina. O compartilhamento pode ser um diretório, arquivo, impressora. Além de permitir o acesso do usuário, o compartilhamento pode ser protegido por senha, e ter controle de acesso de leitura/gravação, monitoração de acessos, diretórios ocultos, autenticação via PDC (domínio) e outras formas para restringir e garantir segurança na disponibilização dos dados.

d) Certo. o comutador do sistema de arquivo virtual (VFS) fornece os meios para suportar vários sistemas de arquivos simultaneamente em um host. Quando se sabe que a solicitação é destinada para o NFS, o VFS a passa para a instância do NFS no kernel. O NFS interpreta a solicitação de E/S e a converte para um procedimento do NFS. Além disso, há uma camada de interoperabilidade importante chamada de external data representation (XDR), que assegura que todos os participantes do NFS se comuniquem com facilidade ao tratarem de tipos de dado.

e) Errada.

TRT 24ª Região – Técnico Judiciário – 2011 – FCC
Em relação aos sistemas de arquivos NFS e CIFS, considere:   I. Para o servidor funcionar corretamente, a informação sobre o estado de seus clientes é irrelevante.   II. Para acessar um arquivo, o cliente, entre outras ações, precisa determinar o nome relativo do arquivo dentro do servidor.   III. Um servidor pode terminar a conexão de transporte quando, nele, um cliente não tiver recursos abertos.   IV. Para o cliente, o sistema de arquivos, bem como os arquivos e diretórios, parecem residir no disco ligado ao sistema local.   As afirmações contidas nos itens I, II, III e IV, correspondem, respectivamente, a   a) CIFS, CIFS, NFS, NFS. b) NFS, CIFS, CIFS, NFS. c) CIFS, NFS, NFS, CIFS. d) NFS, NFS, CIFS, CIFS. e) NFS, CIFS, CIFS, CIFS.

RESPOSTA: B

BNDES – Analista de Sistemas – 2010 – CESGRANRIO
Qual protocolo padrão é utilizado pelo Windows Server 2003 para o compartilhamento de pastas e impressoras através de uma rede?   a) SMB/CIFS b) NFS c) DFS d) NAS e) NETBEUI

RESPOSTA: A

TRT 8ª Região – Analista Judiciário – 2010 – FCC
Sobre a configuração de um servidor Samba 3.5, é correto afirmar:   a) O arquivo padrão de configuração chama-se samba.config   b) O arquivo de configuração do Samba fica, por padrão, em /usr/var/samba/conf   c) Os parâmetros do arquivo de configuração são agrupados em seções. Cada seção é identificada por um nome entre chaves, por exemplo, {global}.   d) Todas as linhas começadas por % no arquivo de configuração são tratadas como comentários.   e) O arquivo de configuração do Samba pode ser administrado, via web, com a ferramenta Swat.

RESPOSTA: E

  1. O arquivo padrão de configuração do samba chama-se smb.cfg
  2. Ele fica em /etc/samba/smb.cfg
  3. Os parâmetros do arquivo de configuração são agrupados em seções. Cada seção é identificada por um nome entre chaves, por exemplo, {global}. ERRADO – é entre colchetes [GLOBAL]
  4. Todas as linhas começadas por % no arquivo de configuração são tratadas como comentários. ERRADO – São variáveis EX: %U = usuários
  5. Correto
TRT 9ª Região – Técnico Judiciário – 2010 – FCC
No CIFS, o pacote em que o cliente lista todas as strings de dialeto, que é capaz de entender para que o servidor possa escolher o dialeto com o qual deseja se comunicar, é denominado   a) método de encriptação. b) negociação de protocolo. c) nível de segurança. d) níveis de compartilhamento. e) critério de conversação.

RESPOSTA: B

Quando um cliente deseja acessar arquivos num servidor remoto, o primeiro pacote SMB/CIFS que é enviado é o pacote de negociação de protocolo. Neste pacote o cliente lista todas as strings de dialeto que é capaz de entender, no pacote de resposta o servidor indica com qual dialeto ele deseja se comunicar ou se o servidor não entende qualquer dialeto listado pelo cliente.

Petrobrás – Analista de Sistemas Júnior – 2008 – Cesgranrio
Considere um protocolo representado por um sistema de banco de dados distribuído, que ajuda o administrador do sistema a compartilhar arquivos de senhas, de grupos e outros entre os sistemas de rede, sendo o seu conjunto compartilhado de arquivos chamado de mapa, e um outro protocolo que pode ser utilizado por clientes em uma rede para requerer serviços de arquivo e impressão em um ambiente misto UNIX/Windows. Esses dois protocolos utilizados no UNIX, respectivamente, são:   a) LDAP e NIS. b) LDAP e SMTP. c) NIS e LDAP. d) NIS e CIFS. e) NIS e SMTP.

RESPOSTA: D

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Sair da versão mobile