Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
espec:servico_samba [2008/08/23 09:29] mazieroespec:servico_samba [2020/08/18 19:52] (atual) – edição externa 127.0.0.1
Linha 1: Linha 1:
 +====== 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:
 +
 +<code>
 +# 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
 +    ...
 +
 +...
 +</code>
 +
 +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:
 +
 +<code>
 +[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
 +</code>
 +
 +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:
 +
 +<code>
 +# 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
 +</code>
 +
 +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''":
 +
 +<code>
 +(server)$ smbpasswd -a teodoro
 +New SMB password: *****
 +Retype new SMB password: ******
 +</code>
 +
 +===== 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'').
 +