Este documento trata o serviço Samba, o serviço que permite a interação do Linux com Windows® em uma mesma rede.
A finalidade do serviço Samba é permitir que estações Linux e Windows® compartilhem recursos entre si em uma rede. Através do Samba, o Linux pode servir clientes Windows, tornando-se:
O Samba foi criado em 1992 por Andrew Tridgell e atualmente é mantido por uma equipe onde a maioria é de desenvolvedores voluntários. O Samba, tendo em vista suas funcionalidades acima, possui uma interação praticamente completa com estações de trabalho Windows®.
O Samba permite que uma estação de trabalho Linux se torne um membro totalmente funcional de uma rede Microsoft® para incluir compartilhamento de unidades de disco e impressoras, integração com grupos de trabalho e participação como cliente ou servidor em domínios Windows NT®.
O Samba utiliza-se de dois daemons:
smbd
Este é o daemon que fornece serviços como compartilhamento de arquivos e impressão, além da autenticação e autorização.
nmbd
Este é o daemon de Serviço de Nome NetBIOS. O mesmo pode ser utilizado para responder solicitações NetBIOS sobre resolução de nomes Windows em números IP.
Estes serviços trabalham sob o protocolo SMB - Bloco de Mensagens de Sessão - este protocolo também é denominado de NetBIOS ou Lan Manager. Este é o protocolo utilizado pela Microsoft® no Windows® para compartilhar recursos em uma rede. Neste capítulo, estudaremos a implementação do protocolo SMB no Linux, tornando-o um membro funcional em uma rede Microsoft®.
Antes de existir o Samba, o compartilhamento de recursos em uma rede Unix® e Windows® era problemático pelo fato de ter que instalar nos clientes Windows® protocolos tradicionalmente de Unix como NFS e LDAP. Outra alternativa era utilizar o Windows NT® e abrir mão das regalias que o Unix proporciona. Toda esta necessidade é fruto do Windows® utilizar o conjunto de protocolos atualmente conhecido por CIFS - Common Internet File System - mas que originalmente recebeu o nome de SMB - Server Message Block, que é o protocolo vigente de redes Microsoft®, utilizado para compartilhar serviços de arquivos e impressão. É neste escopo que o Samba surge através de Andrew Tridgell com a função de integrar o Linux na rede Windows®, pois o SMB continua sendo utilizado e incluído nas especificações CIFS.
Veremos ao decorrer do capítulo que o Samba oferece a maior parte das funcionalidades dos Servidores Windows®. Com o uso do Samba, os clientes Windows® irão perceber o seu servidor Linux como se fosse outra máquina Windows®. Além disso, você poderá imprimir nas impressoras do Linux, mapear drivers remotos de compartilhamentos que estão no Linux, etc.
O Servidor Linux pode atuar como Controlador de Domínio Primário - PDC -, tarefa até então exclusiva do Windows NT® , permitindo abrigar as contas de usuários, com suas respectivas senhas, de forma que clientes Windows possam ser autenticados, antes de utilizarem os recursos da rede.
O PDC pode estar acompanhado de um BDC - Backup Domain Controller - de forma que caso o PDC tenha algum problema e não possa responder alguma solicitação de login, a tarefa é então repassada para ele, caso ele exista na rede, pois sua instalação não é obrigatória. Até o momento, o Samba não suportava atuar como BDC em um domínio.
Fig. 1 - Ilustração da interação Linux/Windows.
O SMB é o protocolo que atua no nível de aplicação responsável pelo compartilhamento de arquivos, impressoras, autenticação, etc. É um protocolo cliente/servidor que foi mantido por várias empresas, entre elas está a Xerox, a 3Com e por último a Microsoft.
É através do protocolo SMB que os clientes conectam ao servidor, e, a partir deste, podem ler e escrever arquivos no servidor, enfim, fazer uso dos recursos compartilhados. Geralmente estes clientes conectam ao servidor através dos protocolos TCP/IP, NetBEUI ou IPX/SPX.
Já o acrônimo CIFS - Common Internet File System - é a especificação pública do SMB, com objetivo de torná-lo um protocolo de acesso a arquivos para ser utilizado na Internet. Na verdade, o CIFS é a evolução do protocolo SMB - que tem adquirido funcionalidades que estão sendo implementadas durante os anos - esta especificação foi criada pela própria Microsoft.
Inicialmente os sistemas operacionais da Microsoft ofereciam o NetBEUI como protocolo padrão - acrônimo de NetBIOS Enhanced User Interface - um protocolo desenvolvido inicialmente pela IBM e depois aperfeiçoado pela Microsoft. É também considerado uma versão melhorada do NetBIOS, projetado para ser um protocolo bastante simples, para uso em redes locais.
O NetBEUI não permite fazer reenvio de pacotes, ou seja, este protocolo não é roteável. Logo, o NetBEUI não consegue interligar redes de computadores. Além de não ser roteável, outras características do Protocolo NetBIOS são: fácil configuração e implementação, utilização de broadcast [anúncio] intenso para fazer a resolução de nomes para endereços de redes, etc. Para completar a pilha de protocolo, temos o SMB como protocolo de aplicação que funciona em cima do NetBEUI. Como pode ser observado na figura abaixo:
Fig. 2 - Comparação do modelo OSI e TCP/IP com protocolo SMB.
&& A figura acima é baseada na figura original . Citar a fonte. Retirar a pilha DECNet e IPX. Traduzir a pilha OSI em português.;Note que o protocolo NetBEUI é um protocolo que implementa funcionalidades das camadas de sessão, transporte e de rede, conforme o modelo de referência OSI.
Se você deseja saber mais sobre o modelo de referência OSI, que apresenta as funcionalidades essenciais de uma pilha de protocolos, veja o endereço http://www.ictp.trieste.it/~radionet/1998_school/networking_presentation/index.html que é uma apresentação em HTML bastante objetiva sobre o modelo OSI.
No sentido de obter a funcionalidade de roteamento e compatibilidade com a Internet que o TCP/IP oferece, a Microsoft resolveu implementar uma pilha de protocolos baseado no TCP/IP como protocolo de transporte e rede. Daí surgiu a pilha NetBT - NetBIOS sobre TCP/IP. É também a maneira que o Samba comunica com as estações Windows, implementando os protocolos SMB (daemon smbd) e o NetBIOS (daemon nmbd) sobre o TCP/IP nativo do Linux.
Apresentaremos duas formas de instalação: instalação via pacotes RPM e via código fonte.
Neste caso iremos utilizar o RPM - Red Hat Package Manager. Em nosso exemplo, estaremos utilizando o Conectiva Linux 7.0. Alguns dos pacotes RPM do samba que a Conectiva fornece são:
Você pode baixá-los através de ftp no endereço ftp.conectiva.com.br. Para instalar em um só passo, acesse o diretório dos arquivos RPM do primeiro CD da distribuição Conectiva e execute:
#rpm -ivh samba*
Primeiramente é necessário adquirir o código fonte, disponível no endereço www.samba.org/samba/ftp, ou via ftp através do endereço ftp://ftp.samba.org/pub/samba/samba-latest.tar.gz. Neste dois endereços o nome do arquivo da última versão é samba-latest.tar.gz.
#cp samba-latest.tar.gz /usr/local/src #cd /usr/local/src #tar xvfz samba-latest.tar.gz #cd samba-2.2.0/source #./configure #make #make install
Fique atento para versão do samba que você estará instalando, pois ao descompactar o pacote tar.gz, a versão deste pode ser diferente de 2.2.0 aqui apresentada.
Os principais programas que acompanham o pacote do Samba são:
Iremos detalhar a utilização de alguns destes utilitários, mais adiante.
O arquivo de configuração do Samba é o smb.conf. Por padrão, este arquivo se encontra no diretório /etc e pode ser editado diretamente usando o editor de texto puro de sua preferência. Você ainda pode usar alguns utilitários visuais como o swat - Uma ferramenta de administração do samba através de interface Web, que é fornecido no próprio pacote Samba; veja as páginas de manual (comando: man swat) para saber mais sobre o swat.
O arquivo smb.conf é dividido em seções , onde cada seção é identificada por um identificador único cercado por colchetes ([]), onde cada seção define as características individuais de cada diretório ou de impressora compartilhados. Entre cada seção e outra, existem diretivas definidas por palavras-chaves seguidos do sinal de igual (=) e o seu valor na sequência. Para se desabilitar uma diretiva ou criar um comentário, simplesmente insira um ponto-e-vírgula (;) ou uma cerquilha (#) no início de cada linha. Veja a seguir, as três seções especiais que por padrão já vem configuradas:
Além destas seções padrões, podem existir também as seções criadas pelo administrador , necessárias para compartilhar um diretório específico, de forma que, para cada compartilhamento, deve ser criada uma seção. Por exemplo, suponha que seja necessário compartilhar o diretório /home/publico, então poderia ser criado uma seção denominada [publico], acompanhada com seus devidos parâmetros particulares.
Fig. 3 - Estrutura do arquivo smb.conf.
Seguem abaixo as entradas desta seção:
[global] workgroup = MYGROUP server string = Samba Server hosts allow = 192.168.1. 192.168.2. 127.
Na verdade, existem muito mais opções que são apresentadas por padrão, por isso aconselhamos aqueles que desejem se aprofundar nas várias opções de configuração que o samba oferece, que consulte as páginas do manual do smb.conf (comando: man smb.conf). Várias opções (muitas mesmo) estão detalhadamente explicadas nestas páginas de manual.
Nesta primeira parte note as três primeiras diretivas:
Neste momento é essencial entender o que é grupo de trabalho e domínio:
apesar da diretiva ser denominada workgroup, também é utilizada para definir o domínio do computador, mesmo quando se quer formar um novo domínio ou quando o Linux for participar de um domínio pré-existente. Para mais informações sobre os conceitos de Workgroup e Domínio, você pode dar uma olhada em http://www.samba.mirror.ac.uk/samba/docs/Samba-HOWTO-Collection.html ou em http://www.microsoft.com/technet/prodtechnol/winntas/maintain/featusability/acctgrps.asp.
As próximas linhas são parâmetros globais para impressora:
printcap name = /etc/printcap load printers = yes printing = bsd
A seguir temos:
guest account = pcguest log file = /var/log/samba/log.%m max log size = 50 debug level = 1
O parâmetro security merece atenção especial, pelo fato de definir e controlar o nível de segurança e senhas do Samba. Esta entrada define como o usuário pode ter acesso ao servidor e consequentemente aos compartilhamentos. Há quatro tipos de opções: share, user, server e domain. Vejamos a descrição de cada opção:
security = user
Vejamos as próximas entradas da seção global:
; password server = NT-Server-Name encrypt passwords = yes smb passwd file = /etc/smbpasswd
; include = /etc/smb.conf.%m socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 ; interfaces = 192.168.12.2/24 192.168.13.2/24
Para compreender as próximas opções ( local master, os level, domain master e preferred master ) é necessário apresentar alguns detalhes de redes Microsoft®. A rede Windows® utiliza o serviço chamado Localizador [Browsing] que permite que os computadores de uma sub-rede (fisicamente interligada) sejam listados como o resultado da consulta para um computador eleito como mestre local [local master]. Ou seja, o localizador mestre local é o servidor da lista de computadores da sub-rede e pode ser solicitado por um outro computador, por exemplo, quando o cliente localizador clica no Ambiente de rede do Windows Explorer. Em um domínio Microsoft formado por várias sub-redes, cada uma possui um mestre local, que tem que reportar a lista dos computadores da sub-rede para um localizador mestre do domínio [master domain]. Em um domínio, por padrão, o PDC sempre irá ser o localizador mestre do domínio. Para determinar quem deve ser o localizador mestre local, é realizado uma eleição na rede, através de informações lançadas na rede por broadcast, tendo como critério: o Sistema Operacional mais robusto, maior tempo ligado na rede, tempo maior de instalação, etc; Para saber mais sobre o serviço Localizador, consulte o arquivo BROWSING.txt, da documentação oficial que acompanha o pacote samba.
local master = no ; os level = 33 ; domain master = yes ; preferred master = yes
Os próximos parâmetros permitem que o Linux de suporte a scripts de logon e perfis de usuários.
; domain logons = yes ; logon script = %m.bat ; logon script = %U.bat ; logon path = \\%L\Profiles\%U
Para se configurar esta opção, podem ser utilizadas as variáveis citadas anteriormente. A variável %L é substituída pelo nome do próprio servidor samba atuando como PDC. Por exemplo, suponha que o seu servidor samba que esteja atuando como PDC tenha nome netuno e esta opção seja especificada como logon path=\\%L\perfis\%U, então, o servidor netuno será utilizado para armazenar os perfis dos usuários no compartilhamento perfis, em diretórios específicos por usuário, por exemplo, \\netuno\perfis\fulano.
Os próximos parâmetros controlam a capacidade do Samba para trabalhar com o Windows® Internet Naming Service (WINS). Haja visto que um servidor Samba pode atuar como servidor WINS para uma sub-rede local. Para isso um servidor de WINS irá manter uma relação das máquinas de sua rede, seus nomes NetBIOS e endereços IP´s para responder às consultas.
; wins support = yes ; wins server = w.x.y.z ; wins proxy = yes dns proxy = no
Esta seção permite que os usuários tenham acesso aos seus diretórios base. Através desta entrada todos usuários do samba terão acesso a sua pasta que está dentro do diretório /home.
Fig. 4 - Compartilhamento do diretório /home para estações Windows®.
Ao usuário efetuar logon, o samba mapeará o arquivo passwd, e descobrirá através de seu UID o seu diretório base. Este acesso é feito através do smbd. Segue abaixo um exemplo desta seção:
[homes] comment = Home Directories browseable = no writable = yes
A seção [printer] veremos separadamente no tópico Serviços de Impressão utilizando o Samba. É importante atentarmos para o fato de que estas seções já estão pré-definidas neste arquivo após a instalação do Samba.
Fig. 5 - Linux como controlador de domínio primário.
Neste tópico apresentaremos uma configuração básica do arquivo smb.conf, ou seja, mostraremos um resumo de quais opções devem ser alteradas para que o Linux se torne o PDC da rede. Esta configuração visa conseguir fazer com que o Linux tenha o controle de acesso ao Samba a nível de usuário. Assim, todos usuários deverão ser autenticados para terem acesso aos compartilhamentos de rede do Samba. Logo, você deverá cadastrar usuários para o Samba - Para cadastrar usuários veja o tópico Criando uma conta de usuário Samba. A seguir está a relação mínima de opções a serem configuradas:
workgroup = sa server string = PDC do domínio "sa" security = user encrypt passwords = yes smb passwd file = /etc/smbpasswd local master = yes domain master = yes preferred master = yes domain logons = yes
Você deve também verificar se está habilitado a seção homes, pois assim os usuários serão autenticados e já terão acesso aos seus diretórios base. Vejamos:
[homes] comment = Home Directories browseable = no writable = yes
Sempre que for alterado o arquivo de configuração do samba será necessário reiniciar o serviço samba.
#/etc/rc.d/init.d/smb stop #/etc/rc.d/init.d/smb start
Fig. 6 - Administrador de usuários do Samba.
Depois de configurado os compartilhamentos, é necessário criar contas de usuários para o samba. Estas contas são definidas em arquivo diferente do passwd - arquivo de configuração padrão de usuários do linux. Estes usuários são cadastrados no arquivo /etc/smbpasswd, através do comando:
#smbpasswd -a fulano
O segundo comando cria um novo usuário samba através da opção -a.
Este usuário já deve estar criado anteriormente no Linux. Cheque o arquvo /etc/smbpasswd e o /etc/passwd, nestes arquivos os UID´s devem ser os mesmos. Um problema muito comum em servidores samba é devido à disparidade entre as UIDs dos dois arquivos.
O comando smbpasswd também permite outras opções de manutenção de contas, tal como:
Existem outras opções também mais específicas. Para saber de mais detalhes, consulte a página de manual do smbpasswd (comando: man smbpasswd).
Para clientes Windows ®NT 4.0 poderem participar de um domínio controlado por um servidor samba, você deve criar contas de máquinas para estas estações. Esta conta de máquina somente é necessário para clientes Windows NT® ; para estações Windows® 3.11, 95 e 98 não é necessário.
Fig. 7 - Administração de contas de máquinas.
Eis aqui um exemplo:
Crie uma conta de máquina na base de dados unix.
Nas distribuições baseadas em Debian:
# groupadd nobody #useradd -g nobody -c "Conta de maquina samba" -s /bin/false lab5$
Nas distribuições baseadas em Red Hat:
#adduser -g nobody -c "Conta de maquina samba" -s /bin/false lab5$
Depois adicione a máquina na base de dados samba:
#smbpasswd -a -m lab5$
O primeiro comando cria a conta para máquina lab5. Note que o sinal "$" deve ser acrescentado, pois se trata de uma conta de máquina. As outras opções , adiciona esta conta no grupo nobody através da opção -g, a opção -c insere um comentário, a opção -s define o shell para este usuário, como o mesmo é uma conta de máquina, ele não necessita de um shell válido. O segundo comando adiciona a conta de máquina no samba, a opção -m é utilizada para atribuir a conta de máquina.
Na verdade um Windows NT Server 4.0 configurado como servidor autônomo (sem controlar nenhum domínio) também pode participar de um domínio controlado por um servidor samba, sendo também necessário criar uma conta de máquina, de forma idêntica a criação de contas de máquina para estações Windows NT Workstation.
Como foi dito anteriormente, quando especificamos no arquivo smb.conf a opção security=domain, significa que o servidor samba irá fazer parte do domínio, repassando todos os pedidos de permissão de acesso ao PDC (podendo ser Linux ou Windows). Para que o servidor samba possa fazer parte do domínio, você deve:
1) Configure o servidor samba convenientemente: você deve alterar as opções do arquivo smb.conf, com as seguintes configurações:
Fig. 8 - Servidor Samba fazendo parte de um domínio.
[global] security = domain workgroup = domteste password server = pdcteste
2) Criar uma conta de máquina no servidor SMB: caso o PDC seja Linux, você pode criar a conta de máquina como foi descrito anteriormente para estações Windows NT Workstation. Caso o PDC seja servidor Windows NT, você deve utilizar a ferramenta “Server Manager for Domains”.
3) Executar o comando smbpasswd: o comando smbpasswd possui uma opção que permite adicionar o servidor samba à um domínio especificado, veja o comando:
smbpasswd -j domteste -r pdcteste
7. Atualização de senhas através de cliente Windows®
Até o momento, aprendemos apenas a alterar as senhas através do comando smbpasswd, executado localmente no servidor. Imagine se você tiver uma grande quantidade de usuários, seria um transtorno ter que permitir cada usuário trocar sua senha presencialmente no servidor. Para evitar problemas, é interessante deixarmos que os usuários possam alterar suas senhas na sua própria estação de trabalho Windows®. Para que isto aconteça , desde que o servidor Samba já esteja atuando normalmente como PDC, basta pedir para que os usuários de Windows 95/98/Me, alterem suas senhas como qualquer outro domínio: abrir o Painel de Controle; clicar no ícone senhas; selecionar a opção de troca de senhas da Rede Microsoft Windows; fornecer a senha antiga, a senha nova e a confirmação da senha nova; uma vez confirmado, o Samba irá receber através da rede o pedido de troca de senha e caso não ocorra nenhum erro, ele irá trocar a senha do arquivo do samba (/etc/smbpasswd). Em seguida, para testar, peça para o usuário efetuar logoff e efetuar logon novamente.
Fig. 9 - Atualização de senha através de cliente Windows.
Certa vez a troca de senhas não estava funcionando, apesar do Windows não apresentar nenhuma mensagem de erro. Ao verificar as mensagens de log, verificamos que o problema é que estava sendo fornecido menos que 5 caracteres para a senha, que é um valor padrão para a opção “min password length”. Veja a página de manual (comando: man smb.conf) para saber mais sobre esta opção.
8. Sincronizando Senhas
O objetivo deste tópico é fazer com que o Linux sincronize as senhas do sistema Linux com as do Samba, pois sabemos que o Samba faz uso do arquivo /etc/smbpasswd para realizar a autenticação de usuários, enquanto o sistema faz uso do /etc/passwd para a mesma finalidade. Com o sincronismo de senhas, o sistema e o Samba terão senhas equivalentes. Isto é muito utilizado para facilitar a administração de usuário e senha na rede.
Fig. 10 - Esquema de sincronização de senhas.
Edite o arquivo /etc/smb.conf e descomente as seguintes entradas:
unix password sync = Yes passwd program = /usr/bin/passwd %u passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
Onde:
Caso você deseje verificar como ocorreu detalhadamente um diálogo de sincronização de senhas com unix, você pode definir nesta mesma seção a opção log level = 100 em conjunto com a opção passwd chat debug = yes. Assim todo o diálogo entre o smbd e o programa de troca de senhas (passwd) será mostrado detalhadamente no arquivo de log do samba.
Para definirmos compartilhamentos de arquivos no Samba, devemos criar nossas próprias seções. Isto permite criarmos várias partições compartilhadas, incluindo compartilhamento para dispositivos como CDROM, etc. Todo estes compartilhamentos são definidos através de diretórios que estão na árvore de diretórios Linux. Podemos ter compartilhamentos sob vários níveis de segurança (share, user, server e domain). O primeiro tipo é classificado como compartilhamento com controle de acesso a nível de senha, pois somente exige uma senha padrão para ser acessada, enquanto que as opções restantes são considerados compartilhamentos com controle de acesso a nível de usuário, pois exigem que os usuários sejam identificados.
Como foi dito anteriormente, os servidores de arquivos Windows configuram compartilhamentos a nível de senha de forma bastante simples, sem necessitar de definir usuário, mas somente uma senha. No entanto, em sistemas Unix, qualquer acesso a um compartilhamento deve ser através de um processo com um usuário identificado. Portanto, para prover a mesma funcionalidade oferecida no Windows, em Unix é necessário criar um usuário padrão para acesso, em conjunto com outras opções que forçam a todos que se conectam ao compartilhamento sejam identificados como este usuário padrão.
Fig. 11 - Ilustração do controle de acesso à nível de senha.
Veja como isto é realizado:
... [global] security = share [doc] path=/doc username = fulano force user = fulano write list = fulano ...
Note que o usuário fulano é um usuário Unix válido, com senha definida no arquivo de senhas do samba e que é utilizada para validar o acesso ao compartilhamento doc. A diretiva path informa qual diretório está sendo compartilhado, o qual deverá ter as devidas permissões de escrita para o usuário fulano. A diretiva username é utilizada quando o cliente não fornecer o usuário, mas também não restringe quando algum outro for fornecido. A diretiva force user tem a função de informar qual usuário será utilizado como dono do processo que acessa o sistema de arquivos, ou seja, todas as permissões do diretório compartilhado deverão estar de acordo com este usuário. A diretiva write list informa qual é os usuários com permissão de escrita neste compartilhamento; esta opção não sobrepõe as permissões do sistema de arquivo, portanto o sistema de arquivo também tem que permitir permissão de escrita para esta lista de usuários.
Este controle de acesso a nível de senha somente tem funcionado quando utiliza-se uma estação Linux para acessar o servidor Samba Linux (vide o tópico Samba como cliente). Caso queira liberar o acesso sem a utilização de senha, de forma que tanto os clientes Linux quanto Windows® possam acessar este compartilhamento, remova os três parâmetros: username, force user, write list e adicione o parâmetro public = yes.
No compartilhamento a nível de usuário, ou seja, com a opção security=user, os usuários são identificados, geralmente efetuando logon no servidor Samba que atua como PDC, e portanto, os processos que acessam o sistema de arquivos rodam também com o usuário identificado como dono, desta maneira, além de inicialmente serem verificadas as permissões de cada compartilhamento, as permissões do sistema de arquivo serão também aplicáveis ao usuário identificado na autenticação. Por exemplo, caso um usuário em um cliente Windows efetue logon em um servidor como usuário fulano e senha abc123, o servidor PDC (Samba) irá criar um processo smbd para atender este usuário, com o fulano como dono; desta forma todas permissões do sistema de arquivos, onde as informações de compartilhamentos se encontram, devem ter as permissões devidamente configuradas para o usuário fulano.
Fig. 12 - Ilustração do controle de acesso ao servidor através de usuário e senha.
Segue as opções que deverão ser alteradas para ser criado um compartilhamento com controle de acesso a nível de usuário:
[global] ... security = user domain logons = yes ... [tmp] comment = Diretório temporário path = /tmp writable = no browsable = yes public = yes [doc] comment = Documentos path = /dados/documentos public = no writable = yes create mode = 0750 directory mode = 0744 valid users = fulano @diretoria @coordenacao hosts allow = lab1
Estas seções definem compartilhamentos. O primeiro define um compartilhamento de um diretório temporário e o segundo um diretório de documentações. Abaixo estão denominados os parâmetros que ainda não foram apresentados:
Este utilitário é utilizado para detecção de erros no arquivo de configuração smb.conf. O formato do testparm segue o exemplo abaixo:
#testparm /etc/smb.conf Load smb config files from /etc/smb.conf Processing section "[homes]" Processing section "[sa]" Processing section "[dc]" Processing section "[html]" Loaded services file OK. Press enter to see a dump of your service definitions
Se a sintaxe deste arquivo estiver correta, a execução deste programa mostra inicialmente a listagem das seções. Se você pressionar , uma longa lista das diretivas associadas à cada seção é apresentada, inclusive com opções padrões da seção [global].
O utilitário testparm não é muito rigoroso na verificação de sintaxe, verificando apenas os erros mais evidentes.
Como foi citado anteriormente, a opção logon script indica o script que é executado no cliente logo depois que este efetua logon. Portanto, a opção de logon script só é válida quando o samba estiver atuando como PDC. Para se criar um script de logon, devemos primeiramente na seção global do arquivo de configuração do samba, habilitar as linhas referentes ao scripts de logon:
# logon script = %m.bat # run a specific logon batch file per username # logon script = %U.bat logon script = teste.bat
Neste exemplo, iremos criar um simples executável denominado teste.bat.
A seção [netlogon] também deverá ser habilitada, uma vez que todo cliente que efetua logon no domínio, por padrão acessa o compartilhamento netlogon, conforme é visto a seguir.
[netlogon] comment = Network Logon Service path = /home/netlogon guest ok = yes writable = no share modes = no
Logo você precisa habilitar o compartilhamento [netlogon] e criar o diretório netlogon (opção path=/home/netlogon). Dentro do compartilhamento netlogon deve existir o arquivo "teste.bat" (opção citada anteriormente). Também tenha cuidado com as permissões deste compartilhamento, pois ele deve estar disponível para todos, inclusive convidados (opção guest=ok), mas não deve ser gravável (opção writable = no) para ninguém. A última opção especificada neste arquivo (opção share modes=no) também tem uma função importante, pois desabilita qualquer tentativa de clientes obterem leitura ou escrita exclusiva em algum dos arquivos disponíveis neste compartilhamento; como o script de logon é um arquivo bastante utilizado, principalmente quando o PDC recebe processa vários logons ao mesmo tempo, isto evita qualquer “travamento” do script.
O Samba lhe dá duas opções não muito utilizadas para definir scripts, por exemplo, opções logon script=%m.bat e logon script=%u.bat, sendo que respectivamente , scripts por usuários e por máquinas. Você deve habilitar apenas uma delas por vez, retirando o sinal de comentário (;) que a precede. Se for habilitada a opção por máquina, termos então : %m.bat. O %m é uma variável que será substituída automaticamente pelo Samba quando um usuário efetuar logon via Samba. Deste modo, torna-se necessário manter um script para cada máquina. Por exemplo : se você possuir duas máquinas com os respectivos nomes : lab01 e lab02, deverá então construir dois scripts com os nomes : lab01.bat e lab02.bat. Se for habilitada a opção %u.bat, torna-se necessário manter um script para cada usuário, e a variável %u será substituída pelo nome do usuário. Por exemplo, se tivermos dois usuários : jose e maria, teríamos então que construir um script para cada, com os respectivos nomes : jose.bat e maria.bat.
Fig. 13 - Esquema de execução do script de logon.
Vejamos agora um exemplo de script de logon. No nosso exemplo, iremos criar um script no próprio Linux utilizando um editor de textos puro, tal como o vi, mcedit ou emacs. Porém lembre-se que o Unix possui um formato de texto-puro [plain text] diferente do Windows. A única diferença entre eles é que o Unix demarca cada final de linha com o caractere especial denominado retorno de carro [carriage-return] ou simplesmente \r, enquanto que o Windows utiliza o retorno de carro em conjunto com o nova linha [line feed], também representado como \r\n. Portanto ao editar o script em uma máquina Linux, você deve visualizar o mesmo script no aplicativo edit ou notepad de forma degenerada, em uma linha única, com caracteres \r entre cada linha anteriormente definida no Linux. Para evitar este tipo de problema você pode utilizar o programa wordpad do Windows, que suporta o texto-puro do Unix, podendo salvá-los no formato texto-puro Windows. Assim, os scripts de logon, uma vez salvos no formato de texto-puro Windows, poderão ser executados sem problemas nos clientes Windows.
Uma tarefa muito realizada por scripts de logon é "mapear" uma unidade de rede em máquinas Windows®. Mapear uma unidade de rede é criar um atalho no Windows® que aponte para um diretório que esteja em alguma máquina da rede. Por exemplo, é possível criar um atalho no Windows® chamado H: que leve diretamente para o diretório do usuário no servidor Samba, deste modo, quando o usuário estiver trabalhando em sua estação Windows® ele poderá acessar seu diretório no servidor apenas clicando em H: no Windows Explorer®.
A linha de comando que se deve inserir no logon script para realizar essa tarefa é simples e segue o seguinte padrão :
net use H: \\servidor\pasta-compartilhada
Onde :
Um exemplo de script para mapear a pasta do usuário José no servidor poderia ser :
echo “mapeando diretório H:” net use H: \\servidor\\jose
Deste modo, ao ser executado, esse script iria criar um atalho chamado H: que levaria diretamente para o diretório do usuário José no servidor. Outro comando que poderia ser inserido neste script poderia ser o comando “net time \\servidor /set /yes”; este comando sincroniza o relógio do cliente com o servidor. Execute net /? no Windows para saber de mais detalhes sobre o comando net.
&& mostrar como este script seria executado no cliente na tela de usuário.&&
os comandos de lote utilizados para se programar arquivos de extensão .bat, são bastante limitados, permitindo fazer muito pouco com scripts de logon. Caso você deseje utilizar scripts de logon mais complexos, você pode utilizar o interpretador de scripts padrão no Windows NT, produzido e mantido por terceiros, chamado kixtart, ou kix32. O kixtart tem uma variedade de comandos e uma sintaxe bastante rica para se criar scripts de logon complexos; e é executado simplesmente chamando-se o seu executável kix32.exe e que, por padrão , executa o script kixtart.kix. Se você desejar obter e saber mais sobre o kixtart no site oficial: http://www.kixtart.org/index.html.
O servidor WINS surgiu da necessidade de resolução de nomes no protocolo NetBIOS (SMB) para endereços IP. Neste protocolo a resolução de nomes é feito através de broadcast. No WINS - Windows® Internet Name Server - todas as máquinas registram seu endereço IP, o seu nome e função no Servidor Wins. Assim, o servidor WINS mantém uma relação de nomes e endereços IPs de todas as máquinas da rede.
Fig. 14 - Ilustração do funcionamento do Servidor Wins.
Quando o cliente procura por uma máquina na rede, ou seja, quando há necessidade de descobrir o endereço IP de alguma máquina, este consultará primeiramente o servidor WINS da rede, não sendo necessário para o cliente usar a técnica de broadcast para resolução de nomes.
Não é necessário que o Servidor Wins seja o PDC da rede, apesar de ser muito comum.
Outro fator importante a ser apontado, é o fato de que os clientes do Servidor WINS devem estar na mesma sub-rede que o servidor Wins, ou seja, eles devem estar fisicamente conectadas. Uma boa referência para WINS é o capítulo do famoso livro denominado “Resource Kit” do Windows, disponível on-line neste endereço: http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/tcpip/part2/tcpch07.asp
Está configuração é baseada na alteração de duas instruções na seção global do arquivo smb.conf.
wins server = 10.1.0.101 name resolve order = wins lmhosts bcast
A primeira linha é utilizada para definir o endereço IP do servidor Wins. A segunda linha define a ordem de consulta para resolução de nomes. Neste exemplo, primeiramente será consultado o servidor Wins, caso o servidor Wins não consiga resolver, a consulta é delegada para o arquivo /etc/lmhosts. Por último, a resolução será feito através de broadcast.
tipicamente em clientes WINS, é utilizado o arquivo denominado lmhosts, que é análogo ao /etc/hosts para clientes DNS. Analogamente, o arquivo lmhosts é de sintaxe semelhante ao /etc/hosts, ou seja, cada entrada em uma linha, é de sintaxe: <número IP> . Exemplo: 10.0.0.1 lab1; ou seja, o computador de número IP 10.0.0.1, tem nome Windows lab1.
Configure as seguintes entradas que estão na seção global do arquivo de configuração do samba:
wins support = yes name resolve order = wins lmhosts bcast
A primeira entrada configura o samba para funcionar como Servidor Wins.
Obviamente as opções wins server e wins support não podem ser utilizadas juntamente. O parâmetro name resolve order define a ordem de resolução de nomes Windows®.
Fig. 15 - Servidor Samba compartilhando impressão.
Da mesma forma que o Samba compartilha diretórios, o Samba permite compartilhar Impressoras. Por padrão o smb.conf já vem com a seção [printers], esta seção é utilizada para definir compartilhamentos de impressora. O único esforço, caso não queira atribuir políticas de segurança, seria descomentar os parâmetros e deixar assim como apresentado:
[printers] comment = All Printers path = /usr/spool/samba browseable = no # Set public = yes to allow user 'guest account' to print guest ok = no writable = no printable = yes
As impressoras compartilhadas são definidas no arquivo /etc/printcap. Para adicionar uma impressora use utilitários como o printtool ou linuxconf. Para adicionar uma impressora co a ferramenta Linuxconf siga os seguintes passos :
1- Chame o Linuxconf com :
# linuxconf
2- Siga o seguinte caminho na ferramenta :
Configuração -> Periféricos -> Impressora -> Adicionar / Editar impressoras
3- Escolha a opção : Impressora Local
4- Escolha um nome para a impressora ou aceite o nome sugerido (lp)
5- Escolha então o modelo de impressora que você possui na opção : Opções de Filtro
6- Depois de escolhida a impressora clique em aceitar.
Resta aqui comentar uma diferença do parâmetro path em relação ao utilizado anteriormente. Neste caso, este parâmetro define o caminho do diretório de spool para as impressoras compartilhadas SMB.
Basicamente a configuração do servidor acaba aqui. Para configurar um cliente para impressora, no Linux você pode usar o printtool ou linuxconf, no Windows® basta na hora de adicionar impressora, mandar procurar impressora na rede.
Para saber mais sobre como configurar uma impressora individualmente, com parâmetros particulares e mais avançados, consulte o arquivo Printing.txt, disponível na documentação oficial do pacote samba.
Os comandos abaixos são muitos utilizados para manutenção, teste, verificação, etc. Segue abaixo alguns do principais utilitários do Samba:
Este utilitário é utilizado para transferir e receber arquivos, de forma semelhante a um cliente FTP. Veja um exemplo:
#smbclient //lab3/c -U fulano -I 10.1.0.2
Este comando solicitaria um acesso à máquina lab3 no compartilhamento c. Você não pode utilizar de endereço IP para referenciar esta máquina, você deve utilizar o UNC - Microsoft Universal Naming Convention. Geralmente estas são as mínimas opções necessárias para se conectar a um compartilhamento via smbclient. A opção -U indica o usuário (quando o compartilhamento permite acesso de usuário guest [convidado] isto não é necessário); a opção -I indica o número IP da máquina lab3 (quando o WINS está devidamente configurado, isto também não é necessário). Outra opção também útil é a opção -L, que lista os compartilhamentos de um servidor, por exemplo, smbclient -L //lab3 -I 10.1.0.2. Uma vez conectado em um compartilhamento UNC, os comandos são semelhantes aos de um cliente FTP, por exemplo, os comandos: help, ls, get, mget, put, mput, cd, rm, mkdir, pwd são válidos. Existem outras variações do comando smbclient, veja as páginas de manual (comando: man smbclient) para saber mais sobre este comando.
UNC é a maneira definida no protocolo SMB de expressar um endereço a um compartilhamento. Todo UNC tem uma sintaxe como segue: //servidor/comp, onde servidor é nome Windows onde se encontra o compartilhamento de nome comp. Na sintaxe da UNC, o Windows geralmente se utiliza barras invertidas (\), enquanto que no Samba, é utilizado a barra normal (/).
Este comando permite montar compartilhamentos SMB, de forma que os compartilhamentos montados são tratados como parte do sistemas de arquivo Linux. Veja este exemplo:
#smbmount //lab4/d /mnt/comp -o username=valete ip=10.1.0.104
O primeiro parâmetro é a máquina remota seguido de seu compartilhamento d, está máquina remota pode ser uma estação Windows® que está com o drive d compartilhado. O outro parâmetro /mnt/comp define o ponto de montagem. A opção -o é utilizada para utilizar os parâmetros username e ip. O parâmetro username é utilizado quando o compartilhamento exige um usuário e senha, o parâmetro ip é utilizado para especificar o endereço IP da máquina lab4. As permissões deste diretório montado serão de acordo com o usuário que foi fornecido. Para desmontar o diretório montado, você pode utilizar o comando smbumount ou o próprio comando umount; por exemplo: smbumount /mnt/comp ou umount /mnt/comp.
Fig. 16 - Representação do cliente Linux acessando recursos no Servidor Samba.
A configuração de um cliente Windows® é muito simples, pois consiste somente em configurar o protocolo TCP/IP e definir o domínio o qual este cliente irá pertencer, no nosso caso será o domínio definido no Samba. No exemplo de configuração abaixo, estamos utilizando como exemplo um cliente Windows® 98, para diferentes versões do Windows® o exemplo é análogo.
1.Adicione o protocolo TCP/IP: Basta ir através do painel de controle ao ícone de rede e adicionar o Protocolo TCP/IP. Vejamos:
2.Configure o Protocolo TCP/IP: Vá para Ambiente de Rede --> Propriedades --> TCP/IP-->Propriedades. Vejamos:
Esta janela permite você fazer a configuração do protocolo TCP/IP, tal como: endereço IP, Máscara de Rede, DNS, gateway, etc.
3.Defina o Domínio: O próximo passo é definir o Domínio, este deve ser o nome do domínio definido no servidor Samba - Definido no arquivo /etc/smb.conf através da entrada workgroup. Vá para Ambiente de Rede --> Propriedades --> Clientes para rede Microsoft. Em seguida marque a opção de efetuar logon no domínio e preencha a opção de domínio.
Depois de configurado o cliente, você deve efetuar logon com algum usuário criado no Samba.
Para ter acesso aos diretórios compartilhados no Samba, abra uma janela do Windows Explorer e vá até o Ambiente de rede. Lá você reconhecerá o servidor samba, e, clicando duas vezes sobre ele, você terá acesso aos seus diretórios compartilhados.
Não se esqueça de que depois do Windows® 95 segunda edição as estações Windows® usam como padrão senhas criptografadas. Neste caso, é necessário que o servidor samba esteja configurado para reconhecer senhas criptografadas. Se você preferir, poderá desativar o uso padrão de senhas criptografadas na estação de trabalho, adicionando um valor de Registro existente. Isso não é recomendável, se você estiver em uma rede grande, ou, principalmente, se for conectar o servidor samba à Internet. O motivo pelo qual existe esta preocupação está no fato de que sua senha será enviada como texto simples e pode ser adquirida pela rede. Além disso, modificar o registro é perigoso, portanto, lembre-se de fazer uma cópia de segurança do seu registro antes de tentar modificá-lo.
Veja abaixo a entrada no registro do Windows NT® que habilita senhas em texto simples:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters] :EnablePlainTextPassword"=dword:00000001
Usando esta entrada no Registro, a estação de trabalho NT enviará senhas em texto simples e se conectará ao servidor Samba sem que ele tenha de estar configurado para reconhecer senhas criptografadas.
Para que clientes Windows® 95/98 usem senhas em texto simples, a entrada no registro deve ser igual:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VxD\VNETSUP] :EnablePlainTextPassword"=dword:00000001
BDC
Controlador Secundário de Domínio – servidor que possui uma cópia de toda a base de dados de usuário da rede Microsoft® e que é responsável por assumir a validação de usuários caso o PDC pare de responder.
CIFS
Common Internet File System - é a especificação pública, sendo especificada por várias outras empresas além da Microsoft, a intenção é fazer com que o SMB tenha um uso mais abrangente, além das redes locais, podendo ser utilizado também na Internet. Muitas vezes é também tratado como sinônimo ou até a evolução do protocolo SMB. Controlador do domínio: Máquina responsável pela autenticação de usuários de uma rede Microsoft®. Esse controlador de domínio pode ser primário (PDC) que é o primeiro responsável pelas autenticações, ou secundário (BDC) que entrará em ação caso o PDC não responda. diretório base: é o diretório pessoal ou home do usuário, que no Linux é o diretório geralmente especificado como /home/usuario. No Windows é também denominado diretório pessoal. Grupo de Trabalho: Grupo de trabalho é um grupo de computadores que compartilham recursos entre si e são listados de forma agrupada. Neste tipo de organização não existe uma máquina que possua autoridade sobre as outras.
PDC
Controlador Primário de Domínio - máquina que será a principal responsável por validar os logins dos usuários da rede. Caso esse máquina tenha algum problema e não posso responder alguma solicitação de login, a tarefa é então passada para o BDC - Controlador de Domínio Secundário - caso ele exista na rede, pois sua instalação não é obrigatória. registro do Windows - no Windows, os parâmetros de configuração ficam todos em um banco de dados hierárquico protegido, onde os parâmetros ficam localizados na árvore do registro, possuindo valores específicos. Os programas geralmente utilizados para visualizar o registro são: regedit e o regedt32. SMB - Protocolo em nível de aplicação responsável pelo compartilhamento de arquivos e impressoras em redes Microsoft. sgid - é acrônimo para Switch Group Id, ou seja, altera a identificação de grupo. O bit sgid é aplicável tanto para arquivos quanto para diretórios, geralmente configurado pelo comando chmod. Por exemplo, execute um dos comandos equivalentes, em um arquivo de testes: chmod g+srwx teste_sgid ou chmod 2770 teste_sgid. Liste as permissões deste arquivo e note que no lugar onde normalmente fica a letra x, que indica permissão de execução, é encontrado o valor s. Desta forma temos, então o sgid configurado, que faz com que este arquivo quando executado, produza processos com o grupo especificado do arquivo, independente do grupo primário do usuário que o executou. De maneira análoga o sgid pode ser aplicado em diretórios, mas neste caso, o comportamento é outro: quando um arquivo é criado, as permissões deste é tal que o grupo é o que está configurado no diretório, da mesma forma ocorre para diretórios e além disto, todo diretório criado também herda a opção de sgid do diretório pai. sticky bit - tem aplicação semelhante ao sgid e o suid, porém é aplicável somente a diretórios. Quando é configurado em um diretório, faz com que os arquivos possam ser deletados somente pelo dono do arquivo, mesmo que o diretório onde se encontra o arquivo forneça esta permissão. Isto é utilizado por exemplo, no diretório /tmp, no sentido de evitar que processos deletem arquivos temporários de outros processos. Por exemplo: - crie um arquivo como fulano: touch /tmp/teste_sticky; - tente remover o mesmo arquivo, como usuário beltrano: rm /tmp/teste_sticky; - verifique as permissões do diretório /tmp e note que mesmo possuindo a permissão de deletar qualquer arquivo do diretório, ele possui marcado o sticky bit (letra t) no lugar do x da permissão para outros: ls -ld /tmp. suid - é acrônimo para Switch User Id, ou seja, altera a identificação de usuário. O suid é uma opção de permissão de acesso aplicável à arquivos, geralmente configurada através do comando chmod. Por exemplo, execute um dos comando equivalentes, em um arquivo de testes: chmod u+srwx teste_suid ou chmod 4700 teste_suid. Liste as permissões deste arquivo e note que no lugar onde normalmente fica a letra x, que indica permissão de execução, é encontrado o valor s. Isto significa que o arquivo está com bit suid configurado. Isto faz com que este arquivo quando executado, produza processos com o usuário especificado do arquivo, independente do usuário que o executou. O bit suid em diretórios não causa nenhum efeito. UNC - acrônimo para Universal Naming Convention - é o padrão utilizado no protocolo SMB para acessar compartilhamentos. Tem uma sintaxe bastante simples, como: //servidor/comp, onde servidor é o computador que compartilha o compartilhamento comp. WINS - Windows® Internet Name Server – Serviço desenvolvido pela Microsoft® onde todas as máquinas registram seu endereço IP, o seu nome e função no Servidor WINS, de forma análoga ao DNS utilizado na Internet. Deste modo, o servidor WINS mantém uma relação de nomes e endereços IPs de todas as máquinas da rede, podendo então responder por pesquisas a essas máquinas.
1.Escreva o comando para montar em um cliente Linux, um compartilhamento chamado docs de um computador de nome serv1 para o ponto de montagem /var/documentos. O número IP do servidor é 10.1.0.2 e o usuário é fulano.
2.Como faço para: a) visualizar quais são os compartilhamentos de um servidor de arquivos Windows através do Linux? b) Visualizar um conteúdo de um compartilhamento CIFS pelo Linux, sem montar o diretório no Linux?
3.Quais são as opções para a diretiva security e quais as diferenças entre elas?
4.Qual são os passos necessários para se fazer um servidor Samba atuar simplesmente como um servidor de arquivos, sem identificar os usuários, porém com autenticação por senha? E para um PDC, com autenticação de senhas?
5.Preciso fazer com que todos arquivos e diretórios criados no compartilhamento “vendas” sejam criados como pertencentes ao grupo “vendas”, e também que todos os arquivos tenham permissão de escrita e leitura para o grupo e os diretórios tenham permissões de leitura, acesso e escrita. Como isto poderia ser feito?
6.Qual as semelhanças e diferenças do WINS e do DNS? Como se configura um servidor WINS no samba?
7.Quais são os passos necessários para se compartilhar uma impressora no Linux?
8.Descreva as características dos protocolos: SMB, NetBEUI, NetBIOS. O que é CIFS? E o que é NetBT?
9.Quais seriam os passos para se incluir uma estação Windows NT Workstation em um domínio controlado pelo Samba? Quais seriam os passos para se incluir um servidor samba em um domínio pré-existente, tendo um PDC Samba? E se o PDC for Windows NT?
10.O que é o serviço localizador [browsing] e qual é a sua função em um grupo de trabalho? Quais são os tipos de localizadores em um domínio? Como você pode influenciar uma votação de um localizador através da configuração de um servidor samba? Se já existir um PDC na rede, é conveniente configurar o samba como localizador mestre do domínio?