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:
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:
O sistema Samba é composto por cliente e servidor. Um servidor Samba oferece os seguintes serviços, de forma transparente:
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 [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 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: ***** Retype 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:
xinetd
e swat
/etc/xinetd.d/swat
)service xinetd restart
)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
).