====== O Serviço Samba ======
===== Redes Microsoft Windows =====
O protocolo mais usado para compartilhamento de recursos entre computadores com sistemas operacionais Microsoft Windows é o SMB - [[http://en.wikipedia.org/wiki/Server_Message_Block|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.
===== Samba =====
Para permitir a integração de redes Microsoft a ambientes UNIX vem sendo desenvolvido desde 1991 um sistema chamado [[http://www.samba.org|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).
===== Configuração do 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 ([[smb.conf|exemplo]], [[man-smb.conf|página de manual]]). O formato desse arquivo é o seguinte:
# este é um comentário
; este também é um comentário
[global]
tag_name = tag_value
tag_name = tag_value
...
[share_1]
tag_name = tag_value
tag_name = tag_value
...
[share_2]
tag_name = tag_value
tag_name = tag_value
...
...
Os principais parâmetros de configuração global do servidor são os seguintes:
^ Parâmetro e exemplo de valor ^ Significado ^
| ''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 |
| ''printcap name = /etc/printcap''\\ ''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:
^ Parâmetro e exemplo de valor ^ Significado ^
| ''comment = "Diretório comum"'' | Descrição do compartilhamento |
| ''valid users = ''\\ ''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:
^ variável ^ significado ^
| ''%U'' | nome de login do usuário |
| ''%G'' | grupo do usuário |
| ''%h'' | nome Internet (FQDN) do servidor Samba |
| ''%L'' | nome NETBIOS 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:
[global]
workgroup = MEUGRUPO
netbios name = FILESERV
security = share
log file = /var/log/samba/%m.log
[comum]
comment = Area publica de arquivos
path = /home/comum
read only = no
guest ok = yes
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:
# Global parameters
[global]
workgroup = MEUGRUPO
netbios name = FILESERV
printcap name = cups
printing = cups
# 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)
[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No
[comum]
comment = Public data
path = /home/comum
force user = nobody
force group = nobody
guest ok = Yes
[printers]
comment = All Printers
path = /var/spool/samba
printer admin = root
create mask = 0600
guest ok = Yes
printable = Yes
use client driver = Yes
browseable = No
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 [[http://www.samba.org/samba/docs/man/Samba3-HOWTO|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.
===== Modos de segurança =====
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: *****
Retype new SMB password: ******
===== Swat =====
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:
{{ :espec:smb-swat.png |Tela de exemplo do Swat}}
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'').