====== 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'').