DevSecOps

8 ago, 2011

Aprenda Linux, 302 (Ambientes Mistos): configure o Samba

Publicidade

O Samba usa um arquivo legível para gerenciar e armazenar parâmetros de
configuração, então a ferramenta mais sofisticada necessária para
configurar o Samba é um editor de texto.
Aprenda como o arquivo de configuração é estruturado, como o Samba
interage com a rede, como configurar a criação de logs e como depurar
problemas com o Samba.

Neste artigo, aprenda a:

  • Navegar na estrutura de arquivos de configuração do servidor do Samba
  • Usar as variáveis e parâmetros de configuração do Samba
  • Identificar portas importantes de TCP/User Datagram Protocol (UDP) usadas com o Server
    Message Block (SMB)/Common Internet File System (CIFS)
  • Configurar a criação de logs no Samba
  • Resolver e depurar problemas com o Samba

Este artigo ajuda você a se preparar para o Objetivo
312.1 no Tópico 312 do exame Mixed Environment Specialty do Linux
Professional Institute (302). Esse objetivo tem peso 6.

Pré-requisitos

Para aproveitar ao máximo os artigos desta série, é necessário ter um
conhecimento avançado de Linux e um sistema Linux funcional, no qual
seja possível praticar os comandos mencionados neste artigo. Além disso,
é preciso ter acesso a um ambiente Windows que será usado para testar o
acesso a arquivos e impressão.

O arquivo de configuração do Samba

O Samba, como a maioria dos daemons de UNIX, é configurado por meio
de arquivos de texto que são legíveis para pessoas, e não por meio de
uma ferramenta gráfica para edição de arquivos binários. O arquivo de
configuração mais importante é o smb.conf, que contém todos os parâmetros de que o Samba precisa para executar no seu ambiente.

Observação: embora o smb.conf tenha
sido projetado para ser editado com um editor de texto, a equipe do
Samba criou uma ferramenta baseada na Web chamada Samba Web Administration Tool.
Também existem alternativas, como o webmin. É importante lembrar que,
mesmo assim, é possível editar o smb.conf antes ou depois da execução
dessas ferramentas, porque você está trabalhando em um arquivo de texto.

O arquivo de configuração do Samba tem um formato razoavelmente simples que usa três construções diferentes:

  • Seções: as seções agrupam a configuração em áreas independentes. Por exemplo, um compartilhamento de arquivo tem a sua própria seção.
  • Parâmetros: os parâmetros são pares de chave/valor. As chaves são atributos bem conhecidos, como “somente leitura”.
  • Comentários: os comentários
    permitem fazer anotações no arquivo de configuração que não afetam a
    configuração. Por exemplo, para indicar o ticket de help desk que os
    documentos compartilham.

Sobre o exame elegível LPI-302

O Linux Professional Institute Certification (LPIC) é
como muitas outras certificações, pois também oferece certificações em
níveis diferentes. Cada nível requer mais conhecimento e experiência
que o anterior. O exame LPI-302 é um exame elegível especial no terceiro
nível da hierarquia do LPIC, e requer um nível avançado de conhecimento
de administração de sistema Linux.

Para obter a certificação LPIC nível 3 (LPIC-3), é
necessário passar nos dois primeiros exames do primeiro nível (101 e
102), nos dois exames do segundo nível (201 e 202) e no exame principal
do LPIC-3 (301). Depois de alcançar esse nível, é possível fazer os
exames elegíveis especializados, como o LPI-302.

Seções

As seções agrupam o arquivo de configuração em áreas diferentes. Você começa a seção colocando o nome da mesma entre colchetes ([ ]). A seção continua até que a próxima seção seja definida ou que se chegue ao final do arquivo.

Três nomes de seção têm significado especial:

  • global: Qualquer coisa que esteja nessa seção se aplica a todo o servidor. Os itens de configuração na seção global podem ser cancelados no nível de compartilhamento, se necessário.
  • homes: A seção homes
    atua como um modelo para todos os compartilhamentos do usuário. O
    Samba se encarrega de correlacionar um nome de usuário à configuração
    nessa seção, praticamente eliminando a necessidade de configurar um
    compartilhamento separado sempre que você quer permitir a entrada de um
    usuário no seu diretório ou no diretório inicial.
  • printers. Essa seção é semelhante a homes, mas é usada para impressoras.

Se o nome de seção que é usado não é um dos nomes acima, é considerado um compartilhamento de arquivo ou impressora.

Quando uma solicitação de conexão referente a um nome de
compartilhamento específico entra no Samba, o daemon procura uma seção
com esse nome que defina as propriedades desse compartilhamento.

Se a
seção não é encontrada, o Samba faz uma busca na lista de usuários no
sistema para ver se a conexão se refere a um usuário. Do contrário, o
Samba consulta a lista de impressoras do sistema para ver se existe uma
impressora com esse nome.

Se a conexão corresponde a um usuário, a
configuração das seções homes é usada.
Se houve uma correspondência de impressora, a seção printers
é usada. Em todos os casos, a configuração de nível de seção cancela a seção de configuração global .

Se não há correspondência em nenhum dos casos acima,
ocorre uma verificação final. Se um serviço padrão é configurado, esse
serviço é usado. Do contrário, é passado um erro ao cliente. Por padrão,
o serviço padrão não é configurado, portanto, os nomes de
compartilhamento incorretos causarão um erro.

Parâmetros

Os parâmetros tomam a forma chave = valor, que designa o valor para a chave.
Todas as chaves são documentadas na man page smb.conf. A configuração
do Samba é, em grande medida, um exercício de entender quais chaves são
necessárias para obter o comportamento que você quer e determinar o
valor adequado a ser usado.

Os parâmetros geralmente tomam cadeias de caracteres como
valores. O Samba não suporta macros, o que permite que você varie o
valor do parâmetro de acordo com itens como o nome de compartilhamento
ou a entrada do usuário.

Por exemplo, a seção homes adota
como padrão o diretório inicial do UNIX do usuário, mas é possível usar
macros para fazer esse parâmetro usar qualquer local e substituir o nome
do usuário no caminho do arquivo no momento da conexão.
As macros começam com o caractere % e serão explicadas conforme a necessidade.

Se o valor de um parâmetro precisa ocupar duas linhas ou
mais, todas as linhas (com exceção da última) devem terminar com uma
barra invertida (), como acontece em um shell do UNIX.

Comentários

Os comentários começam com um ponto e vírgula 😉 ou sustenido (“jogo da velha” ou #). Os comentários podem ser usados para explicar o motivo dos itens, acompanhar alterações ou indicar limites de seção. 

Um exemplo de configuração

A Listagem 1 mostra um exemplo de arquivo smb.conf, mostrando as diversas partes do mesmo.

Listagem 1. Um exemplo de arquivo de configuração

# This is a comment
; So is this
# Remember that all shares need to be entered in the Wiki! -Opsteam
[global]
workgroup = BIGCO
# %v gets expanded to the version of Samba
server string = Samba Server Version %v
# By default any file starting with . will have the hidden attribute set
hide dot files = yes

# Home directories come from the UNIX password file
# anyone matching a user will use this section
[homes]
comment = Home directories
# dot files will be hidden because it's a global

[printers]
comment = System printers
printable = yes

# A share that everyone can see
[projecta]
path = /var/spool/projects/projecta
# Override the global version of hiding dot files
hide dot files = no

Estas são algumas coisas especiais a serem ressaltadas nesse exemplo de configuração:

  • São usados dois estilos de comentários diferentes. Um começa com sustenido, o outro começa com ponto e vírgula.
  • Esse arquivo define um compartilhamento chamado projecta.
    Todos os outros compartilhamentos serão criados automaticamente a
    partir dos usuários e das impressoras que foram definidos no sistema.
  • O parâmetro server string usa a macro %v para parte desse valor. No tempo de execução, %v será substituído pela versão do Samba.
  • hide dot files é configurado como
    “yes” no nível global, mas é definido como “no” dentro do
    compartilhamento projecta. Os diretórios iniciais usam a configuração da
    seção homes, sendo assim, os arquivos DOT (como .profile) serão ocultados. Os arquivos em projecta terão os arquivos DOT visíveis.

Interação com a rede no Samba

O Samba é um serviço de rede que executa em IP, permitindo que ele se
comunique com outros hosts da rede que também estão usando IP. Como
administrador do Samba, você precisa entender como os serviços do Samba
se comportam na rede para resolver problemas de conectividade.

De modo geral, pode-se considerar que o Samba oferece três tipos diferentes de serviços de rede:

  • Compartilhamento de arquivos e impressão: Oferecer arquivos e impressoras a outros dispositivos de rede e usar esses serviços em outras máquinas.
  • Serviços de nome: Serviços de resolução de nomes necessários para participar de uma rede Microsoft.
  • Serviços de domínio: O Samba pode
    substituir várias funções de servidor da Microsoft, como controlador de
    domínio legado, e se integra a servidores de Active Directory Domain
    Services (AD DS) mais novos

Compartilhamento de arquivos e de impressão

O compartilhamento de arquivos e impressão é implementado dentro do smbd,
um dos daemons do Samba.
O compartilhamento de arquivos da Microsoft usava o
network basic input/output system (NetBIOS) em TCP quando passou ao
mundo do IP. Esse método encapsulava o conteúdo do NetBIOS em uma sessão
de TCP usando a porta de TCP 139.

O protocolo NetBIOS engloba vários recursos. A porta de
139 é usada somente para os serviços de sessão, ou seja, transferência
de arquivos e passagem de mensagens. Os serviços de procura de nomes não
são tratados nessa porta.

O NetBIOS em TCP funciona, mas há uma sobreposição entre
os recursos de sessão e confiabilidade fornecidos pelo NetBIOS e os
fornecidos pelo TCP. Com algumas alterações sutis, tornou-se possível
executar o SMB/CIFS com base no TCP. Esse método é conhecido como hosting direto e é usado para simplificar o protocolo. O hosting direto ocorre na porta TCP 445.

Quando o NetBIOS foi eliminado do conjunto do protocolo, a
Microsoft precisou de outra forma de tratar as buscas de nome. O Domain
Name System (DNS) foi uma opção natural – por isso o DNS forma a base
do AD DS.

Por padrão, o Samba escuta as portas 139 e 445. É possível alterar esse comportamento com o parâmetro global smb ports.
Por exemplo, smb ports = 445 instrui o Samba a escutar
somente a porta 445. Você pode fazer o Samba escutar qualquer porta, mas
todos os clientes que quisessem se conectar teriam que ser instruídos a
usar a porta não padrão.

Se você não sabe qual porta o Samba está escutando, pode usar o comando netstat para descobrir. A Listagem 2 mostra esse comando em ação.

Listagem 2. Usando netstat para ver quais portas o SMB está escutando

# netstat -antp | grep smbd
# netstat -antp | grep smb
tcp 0 0 :::445 :::* LISTEN 2830/smbd
tcp 0 0 ::ffff:192.168.1.143:445 ::ffff:192.168.1.147:4724 ESTABLISHED 2877/smbd

A Listagem 2 mostra o comando netstat sendo executado e a saída sendo filtrada por meio de grep em relação à cadeia de caracteres smb. As opções de netstat foram usadas para mostrar todas (-a) as conexões de TCP (-t) em um formato numérico (-n) juntamente com o nome do processo (-p) responsável.

Essa saída mostra duas linhas: a primeira contém a cadeia de caracteres LISTEN, que significa que o daemon está escutando para detectar conexões recebidas. Aqui, o daemon está escutando a porta 445.

A segunda linha mostra uma conexão ESTABLISHED , na qual 192.168.1.147 é conectado à porta 445 no host local (192.168.1.143). Assim sendo, pela saída da Listagem 2, é possível concluir que smbd só está escutando a porta 445 e que um cliente está conectado.

Serviços de nome

O NetBIOS fornece uma camada de serviços de nome responsável pela
navegação na rede e por buscas de nomes. Por exemplo, o host SERVER1 é
resolvido para um endereço IP usando as solicitações de serviço de nome
do NetBIOS na porta de UDP 137.

O suporte para a navegação e escolha de
funções de suporte, como o navegador mestre, ocorre na porta UDP 138,
também conhecida como a porta de serviços de datagrama.
Os serviços de nome são implementados dentro do daemon nmbd.

É importante ressaltar que os serviços de nome usam UDP
em vez de TCP. Os pacotes de UDP não têm conexão e podem ser
transmitidos para todos os hosts, em vez de um único stream de unicast.
Com a funcionalidade de transmissão do UDP, o processamento dos serviços
de nome do NetBIOS na rede pode ser facilitado.

A versão 3 do Samba não tem nenhum parâmetro para controlar quais portas o nmbd escuta, mas a versão 4 do Samba implementa os parâmetros globais nbt port e dgram port, que controlam as portas de serviço de nomes e de serviço de datagrama, respectivamente.

É possível usar algo semelhante ao que você viu na Listagem 2 para mostrar quais portas nmbd abre. A Listagem 3 mostra isso.

Listagem 3. Mostrando as portas que nmbd está escutando

# netstat -anup | grep nmbd
udp 0 0 192.168.1.255:137 0.0.0.0:* 2975/nmbd
udp 0 0 192.168.1.143:137 0.0.0.0:* 2975/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 2975/nmbd
udp 0 0 192.168.1.255:138 0.0.0.0:* 2975/nmbd
udp 0 0 192.168.1.143:138 0.0.0.0:* 2975/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 2975/nmbd

Além de procurar nmbd em vez de smbd, o comando da Listagem 3 procura portas UDP em vez de portas TCP com a opção denetstat -u.

Os resultados são uma série de linhas mostrando que nmbd está escutando as portas 137 e 138 em várias interfaces e está escutando o endereço de transmissão 192.168.1.255. As duas portas de serviço de nome se baseiam na comunicação de host a host e na comunicação de transmissão.

Serviços de domínio

A equipe do Samba atualiza o software constantemente para que ele se
integre melhor às redes Microsoft e para substituir a infraestrutura da
Microsoft. Para fazer isso, o Samba deve emular esses serviços de
infraestrutura na rede.

A maioria desses serviços envolve o Kerberos e o
Lightweight Directory
Access Protocol (LDAP) de alguma forma. Estes tópicos
são avançados e serão abordados com mais profundidade em artigos
posteriores. Por enquanto, basta saber que o Samba pode fazer mais
coisas além do compartilhamento de arquivos.

Resumo das portas que o Samba usa

A Tabela 1 fornece um resumo das portas relacionadas ao compartilhamento de arquivos que os daemons do Samba escutam.

Tabela 1. Resumo das portas usadas no Samba

Porta Protocolo Serviço Daemon Descrição
137 UDP netbios-ns nmbd Serviços de nome do NetBIOS
138 UDP netbios-dgm nmbd Serviços de datagrama do NetBIOS
139 TCP netbios-ssn smbd NetBIOS em TCP (serviços de sessão)
445 TCP microsoft-ds smbd SMB de host direto

A tag na coluna Serviço é o conhecido nome de serviço, que vem de um arquivo chamado /etc/services.
O arquivo de serviço ajuda os aplicativos a resolver nomes de serviço
em relação aos números de porta. O arquivo também ajuda as pessoas a
relacionar números de porta a nomes de serviço.

Embora a maioria dos
serviços reserve as portas TCP e UDP, os aplicativos não têm que usar
UDP e TCP. A reserva de ambas elimina a possível confusão quando dois
serviços diferentes tentam usar o mesmo número de porta em protocolos
diferentes.

Também é importante ressaltar que os números e nomes em
/etc/services
não são cumpridos. É possível executar daemons em portas
que não são as esperadas, desde que você possa comunicar essa alteração
aos clientes.

Por exemplo, é possível executar o Samba nas portas de
5137 a 5139 e 5445, desde que os clientes não estejam esperando
conversar nas portas padrão.

Resolvendo problemas no Samba

O Samba não é imune a problemas. Às vezes, esses problemas são causados
pelo administrador do sistema; às vezes, são causados pelo usuário. O
trabalho de vocês como administradores de sistemas é descobrir onde está
o problema e como resolvê-lo.

Testando o arquivo de configuração

Se o Samba não inicia ou se você quer verificar se o arquivo de configuração está correto, o utilitário testparm ajuda. Esse utilitário verifica se smb.conf está correto. A Listagem 4 mostra o resultado de testparm em caso de erro.

Listagem 4. Usando o testparm em um arquivo smb.conf incorreto

# testparm
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: "hide dto files"
Ignoring unknown parameter "hide dto files"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
workgroup = MYGROUP
server string = Samba Server Version %v
passdb backend = tdbsam
log file = /var/log/samba/log.%m
max log size = 50
cups options = raw

<< rest of the output omitted >>

A saída de testparm começa com o local dos arquivos. Se
você quer especificar outro arquivo, passe o nome do arquivo na linha de
comando, como neste exemplo:

testparm /home/me/smb.conf

Em seguida, testparm está indicando um parâmetro inválido chamado hide dto files. Esse parâmetro deveria, na verdade, ser hide dot files.

Depois de processar o arquivo de configuração, você
recebe algumas informações sobre a função do servidor e uma versão
condensada do arquivo de configuração.
Essa versão teve os comentários removidos e está
formatada de forma consistente – portanto, às vezes você detecta erros
aqui que você não viu ao navegar no smb.conf em um editor de texto.

Você deve executar o testparm no arquivo de
configuração depois de fazer as alterações. O Samba ignora a maioria
dos erros de digitação nos arquivos de configuração e nem sempre grava
mensagens no console ao iniciar. É provável que você não detecte esses
tipos de erros até que algo não esteja funcionando bem.
O Testparm avisa quando há erros de digitação no smb.conf.

Por padrão, testparm só mostra a
configuração da forma que ela é inserida no smb.conf. Se você desconfia
de que está usando um valor padrão em algum lugar, pode usar a opção -v
para forçar o testparm a mostrar também os valores padrão.

Também se usa o testparm para limitar a saída a uma única seção ou parâmetro. A Listagem 5 mostra como usar testparm para ver o valor da opção security mask.

Listagem 5. Limitando o testparm a um único parâmetro

# testparm -s --parameter-name "security mask"
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
0777

Na Listagem 5, o parâmetro -s impede que testparm aguarde a entrada do usuário entre a análise de smb.conf e a sua exibição na tela. O uso de –parameter name “security mask” pede o valor de security mask.

O resultado é 0777, que é o valor padrão. Nesse modo, não é necessário especificar -v para mostrar os valores padrão. 

Conectando-se como um cliente

Em vez de ir ao desktop de um usuário e tentar fazer as coisas, é possível fazer vários testes a partir da linha de comando na sua própria mesa. O primeiro teste, que é o mais fácil, é se certificar de que você pode se conectar à porta do Samba. A forma mais fácil de fazer isso é usar o comando telnet, mostrado na Listagem 6.

Listagem 6. Testando a conectividade com telnet

# telnet bob 139
Trying 192.168.1.134...
telnet: connect to address 192.168.1.134: Connection refused

Na Listagem 6, o usuário raiz está se conectando ao servidor bob na porta 139. Também seria possível usar a porta 445 para testar a porta SMB de hosting direto.

O resultado é Connection refused,
que indica que o daemon não está escutando esse endereço ou que um
firewall está bloqueando a conexão. Outros resultados, como No route to host ou Connection timed out, podem ter o mesmo significado.

Os clientes geralmente se conectam a um servidor com um nome, não com um endereço IP. Se você usar telnet para se conectar ao servidor pelo nome e não pelo endereço IP, preste muita atenção no endereço IP retornado.

No exemplo acima, o servidor (bob) foi resolvido para 192.168.1.134.
Às vezes, pode haver erros no registro de DNS que fazem os clientes se conectarem ao endereço errado.

Se você não está usando o DNS para a resolução de nomes do Windows, é possível usar o comando nmblookup para fazer a busca. A Listagem 7 mostra uma consulta relacionada ao servidor bob.

Listagem 7. Realizando uma consulta de nome do NetBIOS em relação a bob

# nmblookup bob
querying bob on 192.168.1.255
192.168.1.138 bob<00>

De acordo com a Listagem 7, o servidor bob está em 192.168.1.138, não em 192.168.1.134, como você viu na Listagem 6. Esse resultado indica um problema com o DNS, principalmente se as portas 139 e 445 estão respondendo em 192.168.1.138.

Outro teste se destina a ver se o arquivo de configuração nega acesso a um host específico. Testparm é usado novamente na Listagem 8.

Listagem 8. Verificando o acesso com testparm

# testparm /etc/samba/smb.conf  seanspc 192.168.1.147
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Deny connection from seanspc (192.168.1.147) to homes
Deny connection from seanspc (192.168.1.147) to printers
Deny connection from seanspc (192.168.1.147) to public

Na Listagem 8, três itens são passados para testparm:

  • O caminho do arquivo de configuração do Samba
  • O nome de NetBIOS da máquina a ser testada
  • O endereço IP da máquina a ser testada

A saída da Listagem 8 mostra que o acesso da máquina em questão a todos os compartilhamentos é negado. Ao usar testparm nesse modo, o utilitário não se conecta realmente como a máquina. Em vez disso, testparm processa o arquivo de configuração para ver se o acesso seria permitido.

Se todos os testes até agora foram bem-sucedidos, é possível tentar estabelecer uma conexão de cliente usando o utilitário smbclient. O primeiro teste é tentar navegar na lista de compartilhamento, mostrada na Listagem 9.

Listagem 9. Mostrando os compartilhamentos de uma máquina

[sean@bob source3]$ smbclient -L 'bob'
Enter sean's password:
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.6-69.fc13]

Sharename Type Comment
--------- ---- -------
extdrive Disk
Sean Walberg's iMac Disk
timemachine Disk
IPC$ IPC IPC Service (Samba Server Version 3.5.6-69.fc13)
test Printer test
Downstairs_Laser Printer HP 6L
Cups-PDF Printer Cups-PDF
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.6-69.fc13]

Server Comment
--------- -------
BOB Samba Server Version 3.5.6-69.fc13

Workgroup Master
--------- -------
MYGROUP BOB
WORK SWALBERG-XPLT
WORKGROUP IMAC-1FC525

Na Listagem 9, o usuário está solicitando uma lista de compartilhamentos com o parâmetro -L no servidor chamado bob.
O nome do servidor é prefixado com duas barras invertidas ()
porque é um caminho de Universal Naming Convention (UNC).

Também tome
cuidado ao optar entre aspas simples e aspas duplas. As aspas simples
interpolam e consideram as barras invertidas como caracteres de escape.

Se o seu servidor tem mais segurança configurada, talvez
seja necessário passar o nome de usuário ou o domínio com os parâmetros -W e -U, respectivamente.

Finalmente, é possível tentar se conectar a um compartilhamento omitindo o parâmetro -L
e especificando um caminho de UNC completo para o compartilhamento. A
Listagem 10 mostra o cliente se conectando a um servidor usando um grupo
de trabalho e nome de usuário diferentes.

Listagem 10. Conectando-se a um compartilhamento com nome de usuário e domínio diferentes

[sean@bob source3]$ smbclient 'swalberg-xpltphotos' -U swalberg -W WORK
Enter swalberg's password:
Domain=[WORK] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: > dir
. D 0 Thu Jan 6 11:39:50 2011
.. D 0 Thu Jan 6 11:39:50 2011
<< files omitted >>
38156 blocks of size 4194304. 2938 blocks available
smb: >>

Se houver aprovação nesses testes, você pode ter uma convicção razoável
de que o problema não está na configuração do Samba, mas em algum ponto
entre o cliente e o servidor ou no cliente propriamente dito. Você olha
os logs da seção a seguir, que dão algumas pistas sobre onde o problema
está. 

Firewalls ou aplicativo?

Há várias formas de bloquear a conexão a um host, mas
todas as opções podem ser agrupadas em duas categorias: rede e
aplicativo.
Ao bloquear na camada de rede, em um firewall ou
usando um firewall baseado em host como o iptables, você verá que a
conexão telnet mostrada na Listagem 6 é recusada ou o seu tempo se esgota. Isso acontece porque o pacote não chega nunca ao aplicativo Samba.

Se o Samba for configurado para não permitir conexões a partir de um host específico, você verá que a conexão telnet
será bem-sucedida, mas todos os acessos de clientes dão erro.

Isso
acontece porque o pacote é lido pelo aplicativo, mas não satisfaz o
endereço IP ou do nome do host e envia um erro no nível do aplicativo.
Sem aceitar o pacote na camada do aplicativo, o Samba não tem como saber
se o endereço IP é aceitável.

Criação de logs e depuração

A criação de logs e a resolução de problemas andam juntas. Os logs
permitem ver o que aconteceu no passado, para ver se houve erros e obter
mais detalhes sobre os problemas à medida que ocorrem.

Se você está
tentando entender por que algo não está funcionando, pode aumentar a
quantidade da criação de logs até obter o nível necessário de detalhes. O
Samba oferece vários parâmetros em smb.conf para tratar a criação de
logs, é possível usar esses parâmetros juntos para ajustar os tipos de
log gerados.

O Samba atua como um daemon tradicional do UNIX porque pode registrar no recurso syslog
e também gerar os seus próprios arquivos de log. Além disso, a
ferramenta Microsoft Event Viewer pode se conectar a um servidor do
Samba para obter logs.

O problema desse recurso é que o Samba não
consegue criar o log diretamente no formato de log de eventos – é
necessário pós-processar os seus arquivos de log usando ferramentas do
Samba.

Níveis de log

Cada mensagem de log que o Samba gera tem um nível, que é
um número inteiro de 0 a 10. As mensagens de alto nível, como novas
conexões e eventos importantes, têm níveis mais baixos. As mensagens de
depuração têm números mais altos.

Você controla a quantidade de criação
de logs especificando o nível máximo que você quer que seja registrado
no log. O nível 1 de log somente registra mensagens com prioridade 0 ou
1. Se você quer uma criação extensa de logs, use um número mais alto.

Qualquer coisa que tenha um nível de log acima de 3 se
destina a desenvolvedores e não é muito útil para você como
administrador de sistema. O uso de um nível de log 0 desativa todas as
mensagens, com exceção de algumas mensagens de inicializar e erros
críticos.

Para configurar o nível de log, use o parâmetro log level
da seção global, por exemplo, use log level = 2 para definir o nível de log como 2. Essa configuração registra todas as mensagens com prioridade igual ou inferior a dois.

É possível alterar o nível de log no tempo de execução enviando um sinal de SIGUSR1 ao processo do Samba para aumentar o nível de log ou SIGUSR2 para diminuí-lo.

Também é possível ser mais granular em relação aos níveis
de log, aumentando o detalhamento somente em certos recursos ao
especificar qual classe você quer registrar. Essas classes são:

  • all: Esse parâmetro é opcional: se você não especifica outras palavras-chave, pressupõe-se all.
  • tdb: Mensagens de log relacionadas a bancos de dados triviais, que são armazenamentos de valores de chave que o Samba usa.
  • printdrivers: Rotinas de gerenciamento de driver de impressora.
  • lanman: Depuração do NT LAN Manager.
  • smb: Depuração do protocolo SMB.
  • rpc_parse: Análise de remote procedure calls (RPCs).
  • rpc_srv: Os RPCs do lado do servidor.
  • rpc_cli: Os RPCs do lado do cliente.
  • passdb: A forma antiga armazenar senhas em um host do Samba.
  • sam: O banco de dados de conta local do Samba.
  • auth: Vários módulos dentro do Samba relacionados à autenticação de usuários.
  • winbind: O componente usado para permitir que os usuários da Microsoft registrem de forma transparente em sistemas UNIX.
  • vfs: Mensagens de
    depuração referentes aos módulos do Virtual File System, que permitem
    incluir funcionalidade do Samba por meio de módulos que podem ser
    plugados.
  • idmap: Mapeamento das identidades entre os IDs de usuário de UNIX e os identificadores de segurança da Microsoft.
  • quota: Mensagens
    relacionadas ao processamento de cota, tanto pela política do Microsoft
    Windows NT quanto pelo sistema de arquivos do UNIX.
  • acls: Processamento da lista de controle de acesso.
  • locking: Status e erros do bloqueio de arquivos.
  • msdfs: Mensagens de log relacionadas ao suporte para o sistema de arquivos distribuído do Samba.
  • dmapi: Funcionalidade
    da application programming interface (API) de gerenciamento de dados. O
    Samba deve ser compilado com uma implementação de DMAPI de terceiros
    para usar esse recurso.
  • registry: Emulação do registro do Windows.

Para usar essa criação de logs adicional, acrescente a
palavra-chave e o valor ao parâmetro de nível de log, separado por dois
pontos (:).

Por exemplo, log level = 1 winbind:3
configura o nível de log padrão do sistema como 1 e aumenta a criação
de logs winbind para 3. Essa alteração ajuda a depurar problemas com o
login único sem se “afogar” em arquivos de log que não estão
relacionados.

Local do arquivo de log

Para alterar o nome do arquivo de log, use o parâmetro log file. Também é possível usar macros no valor. Uma configuração frequentemente usada é ter um arquivo de log por cliente. Para fazer isso, especifique:

log file = /var/log/samba/log.%m

Esse comando separa os arquivos de log individuais em um por cliente,
sendo que o restante das mensagens continua indo para log.smbd.

Se você quer registrar em syslog, pode especificar syslog = 1 para enviar todos os logs no nível 1 ou 0 para o servidor local de syslog. O Samba usa o recurso LOG_DAEMON e estabelece a correspondência entre os níveis de log do Samba e as prioridades de syslog da seguinte forma:

  • LOG_ERR. Nível de log 0
  • LOG_WARNING. Nível de log 1
  • LOG_NOTICE. Nível de log 2
  • LOG_INFO. Nível de log 3
  • LOG_DEBUG. Nível de log 4 ou mais

Se você está registrando no syslog em um daemon de syslog
mais avançado que consegue filtrar as mensagens
recebidas e avisar o administrador do sistema, essa é uma forma
excelente de ficar de olho no servidor do Samba.

Metadados de log

É possível incluir ou remover algumas informações que aparecem em todas as entradas de log com parâmetros mais globais:

  • debug timestamp. Inclui uma indicação de data e hora na mensagem de log e é habilitado por padrão
  • debug uid. Registra os IDs de usuário e grupo do processo do Samba que gera os logs
  • debug prefix timestamp.
    Mantém as indicações de data e hora, mas remove as
    informações sobre o local do código de origem do Samba que gerou o log
  • debug pid. Registra o identificador do processo do Samba que gerou o log
  • debug hires timestamp.
    Altera a resolução da indicação de data e hora para microssegundos em vez de segundos
  • debug class. Registra
    a classe da mensagem de log, o que é útil se você quer alterar o
    detalhamento de uma determinada classe (Essa opção ajuda a determinar
    qual classe você quer.)

A criação de logs pode ajudar a localizar os problemas ou
fazer você se afogar em ruídos. O Samba oferece diversas opções de
criação de log, use-as com moderação.

Rastreamento de chamadas do sistema

Se todas as outras opções falharem, é possível usar as ferramentas do
sistema UNIX para ver o que está acontecendo dentro do processo. O
programa strace do Linux permite rastrear todas as
chamadas de sistema que um aplicativo faz.

Um aplicativo usa chamadas de
sistema para abrir e ler arquivos, criar e destruir processos e
interagir com o restante do sistema operacional. A Listagem 11 mostra o usuário raiz rastreando um processo do Samba que está lançando um erro para o cliente.

Listagem 11. Usando Strace em um processo

# ps -ef | grep smb
sean 13375 28812 0 21:54 ? 00:00:00 smbd -D
root 14294 13593 0 21:55 pts/2 00:00:00 grep smb
root 16132 28812 0 Feb27 ? 00:00:36 smbd -D
root 28812 1 0 Feb14 ? 00:00:28 smbd -D
root 28814 28812 0 Feb14 ? 00:00:00 smbd -D
[root@bob /]# strace -e trace=file -p 13375
Process 13375 attached - interrupt to quit
<< Output omitted >>
chdir("/home/sean") = 0
stat64("somedir", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
stat64("somedir/*", 0xbfcb5f60) = -1 EACCES (Permission denied)
getcwd("/home/sean", 4096) = 11
lstat64("/home/sean/somedir", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat64("/home/sean/somedir/*", 0xbfcb5ffc) = -1 EACCES (Permission denied)

O primeiro comando procura uma lista de processos do Samba. Como o
Samba assume a identidade do usuário conectado, é possível identificar
facilmente que o processo 13375 pertence ao usuário.

Em seguida, o
comando strace é executado com dois parâmetros: -e trace=file
limita a saída às chamadas de sistema relacionadas a arquivos. Para os
tipos de problemas que você encontrará no Samba, essa é uma boa
suposição inicial. O segundo parâmetro, -p 13375, instrui o strace a se conectar ao processo em execução com esse ID de processo.

Ao observar a saída desse comando, você verá que smb
está varrendo o diretório constantemente, procurando alterações.
Quando o usuário tenta a ação que tem o problema, é possível que você
veja uma saída parecida com a Listagem 11.

Os comandos finais tentam obter informações sobre arquivos dentro do diretório com a chamada stat64. O resultado é permission
denied, que significa que o usuário está sendo rejeitado no
nível do sistema de arquivos, e não pelo Samba.

Esse comando pode
fornecer mais informações para resolver o problema – como alterar os
atributos do diretório ou dizer ao usuário que ele não tem permissão
para acessar o diretório.

Progredindo

Este é o final do tópico de configuração do Samba. O próximo objetivo de
exame, 312.2, é a criação e configuração dos compartilhamentos de
arquivo e a aprendizagem de como acessar esses compartilhamentos a
partir de outros sistemas.

Recursos

Aprender

Obter produtos e tecnologias

  • No repositório Samba Git você acompanha os acontecimentos relacionados ao Samba.
  • Obtenha a versão mais recente do Samba para ter os recursos mais recentes.
  • Avalie produtos IBM

    da maneira que for melhor para você: faça download da versão de teste de
    um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou
    passe algumas horas na SOA Sandbox
    aprendendo a implementar Arquitetura Orientada a Serviços de modo eficiente.

***

artigo publicado originalmente no developerWorks Brasil, por Sean Walberg

Sean Walberg trabalha com Linux e UNIX desde 1994 em ambientes
acadêmicos, corporativos e de provedores de serviço de Internet.
Escreveu muito sobre administração de sistemas nos últimos anos. É
possível entrar em contato com ele pelo e-mail sean@ertw.com.