espec:servico_samba [Prof. Carlos Maziero]
servico_samba
O Serviço Samba
O protocolo mais usado para compartilhamento de recursos entre computadores com sistemas operacionais Microsoft Windows é o SMB - Server Message Block, também conhecido como CIFS - Common Internet File System. Ele permite o anúncio e compartilhamento de dispositivos do servidor como discos e impressoras aos clientes da rede. Além disso, esse mesmo protocolo é usado como base do sistema de autenticação em domínios O SMB é um protocolo proprietário desenvolvido inicialmente pela IBM e depois assumido pela Microsoft. Ele executa sobre o NETBIOS, que por sua vez executa sobre TCP/IP ou outros protocolos de transporte.
O Windows Vista introduziu uma nova versão do protocolo, denominada SMB 2.0, que atualmente só funciona entre máquinas Vista ou Windows Server 2008. Sua principais melhorias são:
a possibilidade de efetuar várias ações em cada requisição, diminuindo a necessidade de interação entre cliente e servidor;
o uso de buffers maiores, aumentando o desempenho de transferência de arquivos maiores;
a noção de descritores de arquivos "duráveis", que suportam quedas de rede temporárias sem perda de sessão;
o suporte a links simbólicos.
Para permitir a integração de redes Microsoft a ambientes UNIX vem sendo desenvolvido desde 1991 um sistema chamado Samba, que permite o acesso de clientes Windows a recursos (impressoras, arquivos, etc) em servidores UNIX e vice-versa. O sistema Samba é open-source e de uso gratuito. Ele executa em uma grande variedade de sistemas UNIX e até mesmo em mainframes.
O uso mais frequente do Samba é substituir servidores de arquivos e/ou impressão Microsoft por servidores UNIX, com os seguintes objetivos:
Redução de custos, ao usar um ambiente UNIX livre (Linux, FreeBSD, etc);
Maior confiabilidade (robustez contra falhas e problemas de segurança);
Melhor desempenho em cargas elevadas;
Integração de redes Windows, Unix e Mac OSX usando um só protocolo.
O sistema Samba é composto por cliente e servidor. Um servidor Samba oferece os seguintes serviços, de forma transparente:
compartilhar diretório(s) do servidor;
compartilhar impressora(s) instalada(s) no servidor ou em outro local da rede;
auxiliar a navegação de rede dos clientes (network browsing);
autenticar clientes solicitando entrada em um domínio Windows;
prover ou auxiliar o serviço de resolução de nomes WINS;
Emular outros serviços Windows, como sincronização de tempo, etc.
Por outro lado, o cliente Samba "smbclient" permite a uma máquina UNIX acessar serviços disponíveis em servidores Microsoft (ou servidores Samba).
O serviço Samba é implementado basicamente por dois processos (daemons):
smbd: manipula compartilhamentos de arquivos e impressoras e provê autenticação e autorização para clientes SMB.
nmbd: suporta os serviços de nomes NETBIOS e implementa o servidor WINS. Também auxilia os clientes na navegação no ambiente de rede.
Esses dois daemons podem operar em modo autônomo, lançados pelo script de inicialização do Samba, ou através do Internet daemon (inetd/xinetd).
Os arquivos de configuração do Samba normalmente ficam no diretório /etc/samba/. O arquivo smb.conf contém os principais parâmetros de configuração de um servidor Samba, que estão detalhadas na página de manual smb.conf. Esse arquivo possui uma seção com definições gerais, comuns a todos os serviços, e definições específicas para cada compartilhamento (exemplo, página de manual). O formato desse arquivo é o seguinte:
# este é um comentário
; este também é um comentário
tag_name = tag_value
[share_2]
Os principais parâmetros de configuração global do servidor são os seguintes:
Parâmetro e exemplo de valor
workgroup = RSS04 Nome de domínio ou de grupo de trabalho
server string = "Meu servidor" Descrição do servidor
netbios name = VIRTSERV Nome NetBios deste servidor
interfaces = 20.0/16 Indica as interfaces de rede que o servidor deve atender
hosts allow = 20.0. 10.26. 127. Permite limitar o acesso somente a IPs autorizados
load printers = yes carrega as informações de impressoras disponíveis no servidor e as compartilha automaticamente
printing = cups Indica qual o sub-sistema de impressão UNIX a ser usado
guest account = pcguest Habilita uma conta guest (usa a conta nobody por default)
log file = /var/log/samba/%m.log Localização do arquivo de log
max log size = 0 Limite do arquivo de log em Kb (0 remove o limite)
security = share Modo de segurança a ser usado
local master = yes Controle de browsing (manutenção das informações do "ambiente de rede")
domain master = yes Indica que este servidor será o mestre de browsing deste domínio
domain logons = yes Para o servidor ser o servidor de domínio da rede local
logon script = script.bat Script a executar pelos clientes ao entrar no domínio
wins support = yes Habilita o Samba como servidor WINS
wins server = w.x.y.z Habilita o Samba como cliente WINS
Em cada compartilhamento podem ser definidos vários parâmetros, dos quais os mais relevantes são:
comment = "Diretório comum" Descrição do compartilhamento
valid users = joao, jose, maria
valid users = marcos, @prof Usuários (ou grupos) que podem acessar este recurso
writeable = yes Permite-se a escrita ou somente a leitura?
browseable = yes Aparece nas listas do "Ambiente de Rede"
path = /home/comum Caminho do recurso dentro do servidor
force user = nobody Para forçar o acesso como sendo de um dado usuário local
force group = nobody Para forçar o acesso como sendo de um dado grupo local
guest ok = yes permite o acesso da conta guest
create mode = 0700 Permissões para criação de arquivos no UNIX
printable = yes Este recurso é uma impressora
hide files = /.*/ Arquivos a ocultar (expressão regular)
O arquivo de configuração permite a utilização de variáveis, que são substituidas por seus valores quando ocorre a conexão de cada cliente. As principais variáveis utilizadas são:
%U nome de login do usuário
%G grupo do usuário
%h nome Internet (FQDN) do servidor Samba
%M nome Internet (FQDN) da máquina cliente
%m nome NETBIOS da máquina cliente
%I endereço IP da máquina cliente
%d PID do processo servidor
%T data e hora atual
%D nome do domínio ou grupo de trabalho do usuário corrente
%S nome do serviço corrente
%P diretório do serviço corrente
Eis um exemplo mínimo de arquivo de configuração, com apenas um compartilhamento publico:
workgroup = MEUGRUPO
netbios name = FILESERV
comment = Area publica de arquivos
Outro exemplo, no qual cada usuário tem acesso a seu diretório pessoal (homes), a um diretório público (comum) e às impressoras instaladas no sistema:
# Esta entrada compartilha automaticamente o diretório HOME de
# cada usuário registrado no Samba.
# (o nome do compartilhamento recebe o nome de login do usuário)
Outras configurações básicas de exemplo, além de informações mais detalhadas sobre a instalação e uso do Samba, podem ser obtidas no documento Samba HowTo.
Alguns utilitários são fornecidos junto com o Samba, para facilitar seu uso:
smbpasswd : para editar entradas na base de usuários do Samba (arquivo smbusers)
testparm : para testar o arquivo de configuração smb.conf.
smbclient : para acessar serviços SMB em servidores remotos Windows ou Samba.
O parâmetro de configuração global "security" permite definir o modo de operação do servidor Samba em relação à autenticação de usuários. Os valores possíveis e seus significados são:
security = share : O cliente não precisa se logar no servidor para conhecer a lista de compartilhamentos (shares). A autenticação usuário/senha é efetuada quando o cliente tenta acessar um dado compartilhamento. Como clientes Windows mais antigos não enviam sempre um nome de usuário para acessar um compartilhamento, o Samba deve tentar "adivinhar" o usuário a utilizar para autenticação.
security = user : Modo default de operação. Neste modo, cada cliente deve "se logar" no servidor com nome/senha válidos antes de poder acessar os compartilhamentos. Este modo permite o uso de senhas cifradas. A lista de compartilhamentos só é visível aos clientes autenticados.
security = domain : Neste modo o Samba irá validar usuários/senhas em um controlador de domínio externo, primário ou backup (o servidor Samba deve ter sido previamente registrado no domínio). Do ponto de vista do cliente, este modo é equivalente ao anterior.
security = server : O Samba irá validar as senhas em outro servidor SMB; em caso de falha, ele reverte ao modo security = user.
security = ads : Neste modo, o Samba irá se comportar como um membro de um domínio ADS (Active Directory Service). Para funcionar, o suporte ao serviço Kerberos deve estar instalado na máquina onde o Samba executa.
Deve-se observar que os usuários apresentados pelos clientes Samba para acesso ao servidor devem ser usuários válidos do sistema UNIX onde está o servidor. Além disso, esses usuários (e suas senhas) devem ser registrados junto ao Samba através do utilitário "smbpasswd":
(server)$ smbpasswd -a teodoro
New SMB password: *****
O Samba possui uma interface Web para administração, disponibilizada através de um software externo chamado SWAT -- Samba Web Administration Tool. O Swat permite configurar a maioria dos parâmetros de operação de um servidor Samba através de uma interface Web, usando um navegador padrão:
Como o Swat implementa seu próprio servidor Web interno, não é necessário instalar o servidor Apache. Ele é normalmente ativado através do Internet daemon, ouvindo na porta TCP 901. Para gerenciar o servidor Samba através do Swat é necessário:
instalar os softwares xinetd e swat
configurar o lançamento do Swat (editar o arquivo /etc/xinetd.d/swat)
reiniciar o Internet daemon (service xinetd restart)
apontar um navegador para http://servidor-samba.domain:901
Importante: para usar o SWAT com segurança através da Internet, deve-se empregar SSL (por exemplo, usando um tunel SSH ou o software stunnel).