23 de jul de 2011

O melhor do samba para sua rede local

Para máquinas se comunicarem em rede e trocarem recursos, como compartilhamento de arquivos, impressoras, autenticação, mapeamento de usuários etc, temos o samba (SMB - Server Message Block) que implementa o protocolo NetBEUI do Windows, servindo como um poderoso recurso para interligar redes heterogêneas. O Samba foi criado pelo australiano Andrew Tridgell com o objetivo de resolver seus problemas de integração com um servidor Unix e uma máquina rodando DOS. Na época, o protocolo SMB não tinha sua especificação aberta pela Microsoft o que obrigava a utilizar a engenharia reversa para resolver o problema, utilizando para isso Packet Sniffer. Em pouco tempo, após decifrar o modo de operação do protocolo, Andrew conseguiu fazer com que seu servidor Unix aparecesse na rede NetBIOS como um servidor de arquivos. A partir de 1992 Adrew continuou a trabalhar no código e para conectar seu computador rodando Linux com o computador da sua esposa rodando Windows, utilizou seu próprio código, tendo como surpresa sucesso. Neste ínterim, a Microsoft tornou publica a especificação do SMB e da arquitetura NetBIOS. Desde então o Samba cresce como uma excelente alternativa de servidor. O nome Samba se deu devido o SMB já ser um nome comercial registrado, então, Samba foi escolhido por ser uma palavra que contém as letras SMB.

Apesar de o Samba poder ser usado como um grupo de trabalho (workgroups) Sysadmins exigentes, ou experientes preferem sempre o modo de PDC , onde o acesso ao domínio não é livre e necessita de ajustes no Sampa para que as máquinas clientes sejam adicionadas ao domínio. Com isto, apesar do trabalho extra inicialmente, ganha-se em segurança pois cada equipamento na rede tem uma função bem definida no controlador de domínio e as permissões para acesso aos recursos. No modo grupo de trabalho, as permissões precisam ser setadas por ip de máquina e estas não tem uma relação de confiança estabelecida o que enfraquece a política de segurança.

Uma outra vantagem da utilização de um Domínio de Rede através do Samba, é a redução de tráfego indesejado de máquinas Windows se anunciando em rede. O Samba trabalha muito bem com isso e uma vez bem configurado, recebe as listas de recursos de outras máquinas através de broadcasting e indexa localmente todos os recursos disponíveis. Assim, permite um barramento de rede mais limpo a medida que o Samba se torne um Local Master Browser. Reforçando, uma rede sem um Local Master Browser, sempre terá suas estações Windows brigando para vencerem eleições na rede, elevando o tráfego de dados e gerando "ruídos" no barramento. Estas "eleições", acontecem a cada 36 minutos ou a cada vez que o LMB seja removido ou desligado.

O Samba também pode ser configurado para ser um servidor Wins e assim reduzir tráfego de broadcast para aplicações que utilizam resolução de nomes NetBIOS. Esta função do samba é ativada ao utilizá-lo como um DMB (Domain Master Browser) que se encarrega de propagar uma lista de recursos para computadores envolvidos em um Domínio. 

Estruturas maiores, podem requerer além do PDC (Primary Domain Controller), um BDC (Backup Domain Controller) o que aumenta a disponibilidade em caso de falhas no servidor principal. 

Este pequeno artigo NÃO é um tutorial, no entanto, vou disponibilizar minha versão do smb.conf e indico o Guia Foca Linux para estudo aprofundado, comparando as opções e sua indicação no Guia. Para saber sobre o Samba, utilize a versão avançada do manual. Perguntas nos comentários são sempre bem vindas.

#======================= Global Settings =======================

[global]
   workgroup = NOMEDOWORKGROUP
   netbios name = SERVER
   hosts allow = 192.168.0.0/24
   admin users = cpd
   domain master = yes 
   preferred master = yes 
   local master = yes
   time server = yes
   server string = %h server
   wins support = yes
   wins proxy   = no
   dns proxy = no
   max wins ttl = 518400
   min wins ttl = 21600
   name resolve order = lmhosts host wins bcast
   interfaces = 127.0.0.0/8 eth0
   bind interfaces only = yes
   log file = /var/log/samba/log.%m
   follow symlinks = yes
   debug level = 0
   debug timestamp = yes
   max log size = 1000
   syslog only = no
   syslog = 0
   os level = 120
   panic action = /usr/share/samba/panic-action %d
   security = user
   smb passwd file = /etc/samba/smbpasswd
   encrypt passwords = yes
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   domain logons = yes
   logon path = \\%N\%U\profile
   logon drive = U: 
   logon script = logon.bat
   unix charset = iso8859-1
   display charset = cp850
   logon home = \\%L\%U\.profiles
   logon path = \\%L\profiles\%U
   add machine script  = /usr/sbin/useradd -g pdc -c "Maquina de dominio" -s /bin/false -d /dev/null %u 

   preserve case = no
   short preserve case = no
   case sensitive = no
   default case = lower
#======================= desempenho, misc =======================
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 
   read raw = yes
   write raw = yes
   oplocks = yes
   max xmit = 65536
   getwd cache = yes
   message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &
   idmap uid = 10000-20000
   idmap gid = 10000-20000
   template shell = /bin/bash

   preexec = /bin/mount /cdrom
   postexec = /bin/umount /cdrom
#======================= Share Definitions =======================
[homes]
   comment = Pasta %U 
   browseable = no
   writable = yes 
   valid users = %S

[netlogon]
   comment = Network Logon Service
   path = /var/samba/netlogon
   writable = no 
   browseable = no 

[profiles]
   path = /var/profiles
   browseable = no
   writable = yes
   create mask = 0600
   directory mask = 0700

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

#======================= Impressao =======================
  load printers = yes
  printing = cups
  printcap name = cups

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
;   write list = root, @lpadmin

#======================= impressora pdf =======================
[pdf]
   comment = gerador de pdf no home do usuario
   path = /var/tmp
   guest ok = no
   printable = yes
   printing = bsd
   printcap name = cups
   use client driver = yes
   print command = /etc/samba/pdf_printer \
   "%s" "%H" "//%L/%u" "%m" "%I" "%J" &
   lpq command = /bin/true

[cdrom]
   comment = Samba server's CD-ROM
   read only = yes
   locking = no
   path = /cdrom
   guest ok = yes

[aplic]
comment = Outros tipos de compartilhamentos
path = /aplic
available = yes
browseable = yes
public = yes
guest only = no
writable = yes
force user = suporte
force group = flex
guest account = root
create mode = 0664
directory mode = 0775
veto files = /*.mp3/*.wma/*.wmv/*.avi/*.mpg/*.wav/*.mpeg/
delete veto files = yes

Referências: