SaMBa 3.x -> Tudo o que você precisa saber (e não tinha para quem perguntar :)

Tiago Cruz - tiagocruz AT linuxrapido.org
Atualizado em: 28/01/2005

Changelog

Introdução

Este documento visa abranger as dúvidas mais comuns de usuários ja experientes vindos do SaMBa 2.x, ou até mesmo novatos no SaMBa 3.0.

Veja bem: Novatos no servidor SaMBa, mas pressupõem-se que você tenha algum conhecimento em servidores linux, que saiba iniciar e parar serviços, editar arquivos de configuração e etc.

Estou usando o Conectiva 10 e o Kurumin 3.0 no artigo, adapte os comandos caso seja necessário.

Instalação

Não complique, procure binários no CD de instalação de sua distribuição ou use uma ferramenta para baixar a versão mais nova dos sites da mesma. No Conectiva, o comando ficaria (depois do bom e velho 'apt-get update')

  # apt-get install task-profile-sambaserver

Esse 'task', no Conectiva Linux, é um meta-pacote que inclui:

  [root@gateway root]# rpm -qa | grep samba
  samba-winbind-3.0.10-72731U10_7cl
  samba-server-3.0.10-72731U10_7cl
  samba-doc-3.0.10-72731U10_7cl
  samba-swat-3.0.10-72731U10_7cl
  samba-vfs-3.0.10-72731U10_7cl
  samba-vscan-clamav-3.0.10-72731U10_7cl
  samba-testprogs-3.0.10-72731U10_7cl
  samba-common-3.0.10-72731U10_7cl
  samba-clients-3.0.10-72731U10_7cl

Claro que você pode instalar um a um, via apt, yast ou urpmi em sua distribuição.

No Kurumin, o comando para pegar a versão 3.0 do SaMBa ficaria:

  # apt-get install samba -t unstable

Configuração

Você até pode usar ferramentas genéricas como o webmin ou o swat, ou ainda, ferramentas próprias de sua distribuição como o Mandrake Control Center ou o YaST do SuSE, mas, de toda forma, ajustes finos devem ser feito diretamente no .conf do danado.

Concentre-se então no arquivo que geralmente fica em /etc/samba/smb.conf

No Conectiva, o padrão dele é ótimo, vem com ótimos "hacks" que se tornaram indispensáveis hoje em dia ao invés daquele enorme arquivo default do samba que quase ninguém lê :)

Ainda no Conectiva 10, você tem a opção de dar um 'reload' no serviço, ao invés de dar um 'restart' que nada mais é um 'stop + start', ou seja, você pode fuçar no arquivo sem o medo de escutar reclamação dos usuários dizendo que a rede está caindo! :) Leia mais sobre o reload aqui.

Nas seções seguintes, vou abordar as configurações mais usadas e problemas mais freqüentes. No final, exemplos funcionais do mesmo.

Migrando do SaMBa 2.x

O SaMBa 3.x está bem melhor do que seu antecessor, sem sombra de dúvidas. Leia essa nota:

"O projeto Samba anunciou o lançamento da versão 3.0 oficial de seu sistema, cuja principal novidade em relação à série 2.x é o suporte a ActiveDirectory. Isto significa que ele pode se integrar a redes gerenciadas pela família Windows 2000, identificando-se como um servidor membro e autenticando usuários usando LDAP/Kerberos. Outras novidades, incluindo o suporte a unicode, nova autenticação, o surgimento do comando net (similar ao que existe no Windows) e muito mais você encontra no anúncio de lançamento."

Contudo, você pode ter problemas com os caracteres, anti-vírus, lixeira e outras coisas no novo SaMBa, no qual irei tentar passar algumas dicas rápidas, porém precisas (como uma espadada do Ninja TuxKiller :)

Os artigos anteriores sobre o SaMBa 2.x continuam disponíveis para consulta, e provavelmente você precisará consultar algum deles

Arrumando os caracteres

Ainda bem que agora temos suporte ao Unicode e não precisamos arrancar a força o UTF do sistema para que os caracteres fiquem normais, como era feio anteriormente.

Faça um teste: Pelo windão, crie um arquivo chamado 'çççããã' e veja no Linux como ele ficou. Agora pense na possibilidade de tentar recuperar um backup do mesmo via linha de comando. Meio difícil, né?

A forma de dizer para o SaMBa que nós somos da Ilha de Vera Cruz e falamos Tupiniquim mudou do SaMBa 2.x para o 3.x, agora é usado:

  unix charset = iso8859-1
  display charset = cp850

Isso, logicamente levando em consideração que suas estações Windows também falem Português! Caso tenha dúvidas verifique o autoexec.bat da estação, lá no meio daquela tranqueiralhada vai ter o tal o 850.

Lixeira

A lixeira também mudou uma série de coisas. Mas ela continua sendo um módulo VFS (Virtual File System)

Insira o bloco abaixo no seu [global] para fazer efeito em todos os compartilhamentos, ou apenas em um específico.

  recycle:exclude = *.tmp *.temp *.o *.obj ~$*
  recycle:keeptree = True
  recycle:touch = True
  recycle:versions = True
  recycle:noversions = .doc|.xls|.ppt
  recycle:repository = .recycle
  recycle:maxsize = 10000000
  vfs objects = recycle

Aprenda mais sobre os tais VFS aqui: http://info.ccone.at/INFO/Samba/VFS.html

Se tudo der certo, depois do 'reload' no SaMBa, o arquivo apagado via Windows irá parar em, por exemplo, f:\\.recycle

Manutenção da Lixeira

Se sua lixeira estiver funcionando corretamente, em pouco tempo ela vai lotar até acabar o espaço em seu servidor :) Para evitar isso, agende no seu crontab:

  00 18 * * 1-5 find /dados/.recycle/ -type f -mtime 15 -exec rm -rf {} \\; 

Cuidado com o comando, que apagará os arquivos que estão na lixeira há mais de 15 dias, de segunda a sexta as 18:00!

Anti-vírus

Esse é outro cara que mudou, e, como a prima Lixeira, ainda é um módulo VFS.

No Conectiva 10 com o pacote 'clamav' e 'samba-vscan-clamav' instalados e o serviço 'clamd' rodando, insira as linhas abaixo na seção [global] para que o danado atue em todos os compartilhamentos ou insira apenas onde você queira que anti-vírus funcione.

  vfs object = vscan-clamav
  vscan-clamav:config-file = /etc/samba/vscan-clamav.conf

Vale-se notar que o ClamAV não tem permissão de entrar no diretório $HOME dos usuários ;)

Dê uma afinada no seu 'vscan-clamav.conf' e tome cuidado com a perda de desempenho, principalmente com arquivos grandes em rede 10/10 :)

A opção 'verbose file logging' pode ser inicialmente definida para yes, para você acompanhar em /var/log/messages o que está acontecendo no seu servidor.

Recomendo que defina a opção 'max file size' para '10000000' que é algo próximo a 10 MB, senão o windão pode parecer travado quando o usuário tentar abrir aquele Service Pack de 200 MB que está no servidor, e fora que a sua CPU vai ficar um tempinho com 100% de utilização.

Recomendo também que a opção 'infected file action' seja definida para 'quarantine' (o diretório padrão é /var/lib/samba/quarantine)

Para testar, use o Eicar especialmente desenvolvido para essa finalidade.

Se não funcionar com o reload, apele para o restart (do samba e do clamd).

Se for usa-lo em conjunto com a lixeira, faça uma única vez:

  vfs object = recycle, vscan-clamav

Segurança!

Esse, na minha opinião, foi uma grade mancada "dos caras" do SaMBa, na minha opinião.

Ao levantar o SaMBa em um gateway (com duas placas de rede), é conveniente que somente a rede interna tenha acesso aos arquivos, concorda? Isso era feito com a linha:

  interfaces = eth1

Mas, sei lá porque cargas d'agua, agora também é necessário que a linha abaixo ativada (por padrão ele é 'no')

  bind interfaces only = Yes

Aí sim, você restringi o acesso apenas ao pessoal da eth1 (caso essa seja sua LAN). Mas, você pode ter problemas caso use autenticação do SQUID integrada com o SaMBa. Aí a autenticação começa a falhar, mesmo liberando o 'lo' (loopback) junto a eth1.

Você terá que resolver a nível de firewall mesmo. Use-o também se quiser redundância :)

  iptables -A INPUT -p tcp -i eth0 --dport 137:139 -j REJECT
  iptables -A INPUT -p udp -i eth0 --dport 137:139 -j REJECT
  iptables -A INPUT -p tcp -i eth1 --dport 137:139 -j ACCEPT
  iptables -A INPUT -p udp -i eth1 --dport 137:139 -j ACCEPT
  

Impressora

No Conectiva 10, os "hacks" necessários funcionam que é uma beleza! Testei com uma HP 1200 e foi tudo ok! Certifique-se primeiro, que a impressora imprime localmente (dã...) antes de tentar colocá-la no SaMBa (parece óbvio, mas tem cara um por ae....)

No [global]:

  printcap name = cups
  load printers = yes
  printing = cups

Nos [share's]:

  [print$]
  path = /var/lib/samba/drivers
  guest ok = yes
  browseable = yes
  read only = yes
  write list = root
  
  [printers]
  comment = All Printers
  path = /var/spool/samba
  browseable = no
  # Defina 'public = yes' para permitir que o usuário 'convidado' a imprimir
  guest ok = no
  writable = no
  printable = yes
  printer admin = root

Bloqueando extensões

Isso continua igual, e é bem legal fazê-lo :)

  veto files = /*.mp3/*.wmv/*.wma/*.ogg/

Resolvendo problemas

Meu professor de Integradas, na universidade, mandava a gente conversar com o exercício... agora eu entendo o que ele quis dizer, e digo a vocês: Conversem com o SaMBa!!!! :)

Caso algo dê errado, corra seu terminal para /var/log/samba e veja os arquivos alterados recentemente. Olhe minuciosamente cada detalhe, se necessário, delete todos e de um 'reload' no SaMBa para ver de novo qual é o problema. Eu costumo fazer assim:

  # cd /var/log/samba
  # ll -tr

Assim, os arquivos que foram alterados por último aparecem em baixo. Use o 'tail' para acompanhar em tempo real o que está acontecendo:

  # tail -f log.smbd

(aperte crtl+c para fechá-lo)

Caso necessário, delete tudo de novo, aumente no smb.conf o 'debug level' para '=3' (ou mais ainda!), reload no samba e veja de novo o que ocorre. Caso não entenda nada, olhe de novo. Repita esse passo até entender algo!!!! (heheheh)

Claro, consultem também o oráculo (google.com) copiando e colando trechos do log... Vai na fé (isso dizia meu professor de Prolog) que você consegue resolver o pepino ;)

Exemplo prático 1: Compartilhando arquivos

Um pequeno estudo de caso para ilustrar essa ocasião:

Em lindo dia, chovendo pra caramba e um baita trânsito em São Paulo, um cliente me acorda no buzão dizendo que o Windão 2000 dele travou as quatro rodas e o bicho não liga mais. Depois de uma longa viajem até o local, realmente, o windão tava ruim das pernas, nem em modo de segurança ele entrava! (ahhhh, que novidade!!!) =)

O W2k (vou chamá-lo dessa forma a partir de agora) apenas compartilhava uma pasta com uma galera, sem permissão nem restrição nenhuma... e ele era também os servidor do Norton Corporate da galera.

Então fiz o seguinte: Levantei o SaMBa no meu servidor de Internet e e-mail que tinha ao lado rodando Kurumin, joguei os arquivos para lá usando um Live-CD antigo também do Kurumin, deixei o mesmo NetBIOS do defunto, startei o SamBa, a galera acordou e voltou a trabalhar sem saber de nada... hehehhe... enquanto isso, mais uma vez, eu cometi o "seppuku" (suicídio dos samurais :), iniciado pelo comando 'fdisk', logo depois 'format c:' que vocês devem bem conhecer...

A parte que interessa, é a seguinte:

Depois de instalado no Kurumin, o instalador faz algumas perguntas, como por exemplo se deseja senhas criptografadas. Responda que SIM caso trabalhe com algum Windows superior ao 95 (provavelmente sim!!!)

Abrindo o smb.conf dele, deixei como mostra o setup abaixo, e vou comentando melhor ao longo do artigo as principais opções.

  ##########################################
  # Arquivo de configuração do SaMBa
  # Por Tiago Cruz - http://linuxrapido.org
  # Em 05/01/2005
  ##########################################
  [global]
  	# Grupo, nome do servidor e comentário
  	# que aparece no ambiente de rede
          workgroup = GRUPO
          netbios name = SERVIDOR
          netbios aliases = SERVIDOR
          server string = Backup dos Vendas
  
  	# Acentuação
  	unix charset = iso8859-1
          display charset = cp850
  
  	# Tenho duas placas de rede, a eth0 é internet
          interfaces = eth1
          bind interfaces only = Yes
  
  	# Aqui! Somente compartilha!
          security = SHARE
  
  	# Nem esquenta com o restante por enquanto...
  	obey pam restrictions = Yes
          passdb backend = smbpasswd, guest
          passwd program = /usr/bin/passwd %u
          passwd chat = *Enter\\snew\\sUNIX\\spassword:* %n\\n *Retype\\snew\\sUNIX\\spassword:* %n\\n .
          syslog = 0
          log file = /var/log/samba/log.%m
          max log size = 1000
          socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
          dns proxy = No
          panic action = /usr/share/samba/panic-action %d
          invalid users = root
          include = /etc/samba/dhcp.conf
  
  # 'dados' é o nome que o pessoal estava acostumado a procurar no ambiente
  # de rede (\\\\servidor\\dados)
  [dados]
          comment = Dados do pessoal
          path = /dados
          force user = nobody
          force group = nobody
          force create mode = 0777
          force directory mode = 0777
          guest only = Yes
  

Alguns detalhes importantes:

Bom, precisei criar a pasta /dados e dar permissão para todos nela:

  # mkdir /dados
  # chown nobody.nobody /dados -R
  # chmod 777 /dados -R

Verifique também se o usuário 'nobody' existe em seu sistema, e veja que, os arquivos criados dentro do servidor serão acessíveis para todos os usuários devidos devido ao '777'

Veja que tomei o cuidado de deixar o mesmo nome que o servidor tinha e o mesmo nome do compartilhamento!

Nota aos desatentos: Tudo isso foi feito sem nenhum boot no servidor de internet e e-mail =)

Umas horas depois, depois de tudo ok com o W2k de volta ao ar, com o Nortão instalado, parei de novo os usuários e troquei o "netbios name" do SaMBa para que ele não se batesse com o Wk2 (acredite: é bem mais fácil trocar o do samba! Se o windão tiver Active Directoy então....), voltei os arquivos e mais um dia com o final feliz! :)

Nota: O windão teve que continuar lá devido ao Nortão Corporate >:(

Exemplo prático 2: PDC da rede

Nesse outro cenário, agora vamos montar um cara que será o PDC (Personal Digital Cellular? Não!!! Primary Domain Controller!) da rede, validando usuário e senha, rodando script de logon, sincronizando horário com as estações velhas sem baterias na BIOS :), restrição de acesso e tudo mais!! :)

O .conf pode ficar mais ou menos assim:

  #####################################
  # Arquivo de configuração do SaMBa
  # Por Tiago Cruz e Bruno
  # Configurado para SHARE em 05/12/04
  # Configurado para PDC em 07/01/05
  
  
  [global]
  	# Grupo, nome e comentário
  	workgroup = EMPRESA
  	netbios name = SERVER
  	server string = Servidor de Dados
  	
  	# Arquivo de log
  	log file = /var/log/samba/%m.log
  	# Tamanho maximo do mesmo
  	max log size = 50
  	# Nivel de detalhamento dos logs
  	debug level = 2
  
  	# Aqui eu alterei o 'security = SHARE' para o abaixo
  	security = USER	
  
  	# Necessário para Windows >= 98
  	encrypt passwords = yes
  
  	# Senha criptografada :)
  	smb passwd file = /etc/samba/smbpasswd
  	username map = /etc/samba/smbusers
  
  	# Isso tem a ver com o desempenho do servidor
  	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  
  	# Essa linha é a fodona que coloca estações 2k para sambar!
  	add machine script = /usr/sbin/adduser -n -r -g machines -c "Samba machine" -d /dev/null -s /bin/false %u
  	passdb backend = smbpasswd
  
  	# Somente para a LAN
  	interfaces = eth0
  	bind interfaces only = yes
  
  	# Acentos pt_BR
  	unix charset = iso8859-1
  	display charset = cp850
  
  	# Opcoes para PDC da rede
  	domain logons = Yes
  	os level = 100
  	preferred master = Yes
  	domain master = Yes
  
  	# Arquivo de lote que sera executado no logon
  	logon script = todos.bat
  
  	# Para não criar profile so server
  	logon path =
  
          idmap uid = 16777216-33554431
          idmap gid = 16777216-33554431
          template shell = /bin/false
          winbind use default domain = no
  
  [homes]
  	comment = Diretorio do Usuario
  	browseable = no
  	writable = yes
  
  [netlogon]
  	comment = Network Logon Service
  	path = /home/netlogon
  	guest ok = yes
  	write list = tiago, bruno, roger
  
  
  [dados]
  	comment = Drive de dados do Servidor
  	path = /dados/empresa
  	writable = yes
  

Nessa configuração do [dados], diferente da anteior, o que o usuário criar dentro do servidor vai ser dele, obedecendo o 'umask' do seu servidor Linux. No Kurumin, ele é 022 o que significa que o diretório criado pelo mesmo terá permissão '744' ou seja: 'usuário=rwx, grupo=rx, outros=rx'

Logo, outros usuários não modificação suas pastas ou seus arquivos! Só para lembrar: read = 4, write = 2 e execute = 1. Detalhes no 'man chmod' :)

Outras pontos importantes a comentar:

'add machine script': Essa linha já vem no Conectiva 10, facilitando coisa de 300% o processo de colocar uma máquina com 2000 ou XP na rede pois ela cria a conta de máquina "automagicamente". Não acredita? De uma lida na seção "Colocando o WinXP na rede" do meu artigo "Samba como PDC da rede"

'logon script': Arquivo de lote que as estações irão executar ao logar no PDC. Pode-se usar variáveis, como por exemplo %m ou %u para separar os scripts por usuários ou por maquinas (não necessariamente nessa mesma ordem, detalhes na documentação :)

A parta /home/netlogon deverá ser criada, e o arquivo 'todos.bat' lá deverá existir, ** criado a partir de uma estação windows** para manter a quebra de linhas, ou convertido posteriormente com o utilitário 'unix2dos'. Um exemplo do todos.bat:

  @echo off
  net use F: \\\\server\\share
  net use h: /home
  net time \\\\server /set /yes
  regedit /s f:\\caminho\\arquivo.reg

Veja que você pode mapear o diretório HOME do usuário, sincronizar a data com o servidor, e até mesmo forçar a leitura de um arquivo de registro!!! Legal né? Se você colocar um 'deltree /y c:\*.*' deve funcionar também, heheheh 8-)

'os level': Aumente esse número para que o SaMBa seja realmente o PDC da rede. Acompanhe nos log's, e verá que a cada inicialização ele procura por quem é mais poderoso do que ele, e, como no Highlander (só pode haver um :) ele detona o cara e assume o posto de soberano. Acha que eu estou louco? Então olhe você mesmo nos log's... Abaixe esse número para deixar uma estção Windows ganhar... hehehe

'logon path': Deixe-o em branco se quiser evitar em em todo login/ logoff a estação windows 2k/XP copie todo o seu perfil para o servidor (demora um bocado....)

Bom, agora que temos o PDC, precisamos... de usuários para logar nele!!!

Adicionando/ Removendo usuários

Continua a mesma coisa: Necessário usuário cadastrado e válido no Linux e no SaMBa

  # useradd tuxkiller
  # passwd tuxkiller
  # smbpasswd -a tuxkiller

Note que esse usuário não terá uma shell válida, sendo impossibilitado de fazer logon via ssh/ ftp!

O que mudou efetivamente, é que o stdin do smbpasswd mudou. "O que quer dizer isso", você pergunta.

Antes, um simples:

  # smbpasswd -a login senha

Era capaz de cadastrar um fulano no SaMBa sem ter que digitar e confirmar a senha dele. Imagine esse processo x100 usuários, que legal vai ser para você, responsável pela migração...

Agora, no SaMBa 3.x tive que bolar algo assim:

  # ( echo senha ; echo senha ) | smbpasswd -s -a login

"Para que isso??" você me pergunta! Para automatizar em um script, uai!

Eu achei, muito tempo atrás, um script na NET que adicionava e removia usuários no Linux, dei uma mexida no script e agora ele faz o serviço completo: Adiciona no Linux e no SaMBa, digitando uma única vez. Tem até uma cara mais amigável para o usuário final, tanto é que eu configurei o sudo em um conectiva para que um usuário mortal pudesse fazer o serviço sem a minha intervenção!

Para saber mais sobre o sudo, consulte esse outro artigo nosso: Controle o acesso a Internet e diminua sua conta de telefone =)

Segue o danado logo abaixo. O 'changelog' dele não está aí a toa, é para ler e configurar como é solicitado.

Como em toda GPL, só peço que mantenha os créditos e caso faça alguma modificação interessante no código, que mande-o de volta para mim. Assim eu atualizo aqui e todo mundo fica feliz ;)

  #!/bin/bash
  #######################################################
  # Funcionamento básico escrito por leof - www.leofc.tk
  # Adicionado recursos para o SaMBa por
  # Tiago Cruz - tiagocruz@linuxrapido.org
  # Adicionar/Remover usuários no Linux e no SaMBa
  # Versão 0.1 criada em 10/10/2003
  # -----------------------------------------------------
  # Versão 0.2 em 13/10/2003 por Tiago Cruz 
  # Senha do usuário criada junto com a o SaMBa, mas
  # necessita do pacote libgii
  # -----------------------------------------------------
  # Versão 0.3 em 18/01/05 por Tiago Cruz
  # Adicionar com o visudo (pacote sudo) para um usuário
  # mortal poder criar e deletar o povo :)
  # usuario ALL=(ALL) NOPASSWD: /usr/sbin/useradd
  # usuario ALL=(ALL) NOPASSWD: /usr/sbin/userdel
  # usuario ALL=(ALL) NOPASSWD: /usr/bin/smbpasswd
  # usuario ALL=(ALL) NOPASSWD: /usr/bin/passwd
  # usuario ALL=(ALL) NOPASSWD: /bin/cut
  # ----------------------------------------------------
  # Versão 0.4 em 28/01/05 por Ronivaldo Uriel 
  # e-mail uriemca@ipiranga.com.br
  # Adicionado opção para listar os usuários
  #######################################################
  
  Principal() {
     clear
     dir="Diretório: `pwd`"
     kernel="Kernel: `uname -r`"
     arquitetura="Arquitetura: `uname -m`"
     echo "+-------------------------------------------------+"
     echo "|               Utilies for LinuX                 |"
     echo "+-------------------------------------------------+"
     echo "| Adicionar/ Remover usuários no SaMBa e no Linux |"
     echo "+-------------------------------------------------+"
     echo "| Escrito por:                                    |"
     echo "| Tiago Cruz - www.linuxrapido.org                |"
     echo "+-------------------------------------------------+"
     echo
     echo $dir
     echo $kernel
     echo $arquitetura
     echo
     echo "Opções:"
     echo "1. Adicionar um usuário"
     echo "2. Deletar um usuário"
     echo "3. Listas os usuários"
     echo "0. Sair"	
     echo -n "Entre com a opção desejada => "
     read opcao
     echo
     case $opcao in
        1) Adicionar ;;
        2) Deletar ;;
        3) Listar ;;
        0) exit ;;
        *) echo "Opção desconhecida." ; echo ; read msg  ; Principal ;;
     esac
  }
  Adicionar() {
     echo -n "Entre com o login do usuário: "
     read login
     echo -n "Entre com o nome completo do usuário: "
     read nome
     #echo -n "Entre com o depto do usuário: "
     #read depto
     echo -n "Entre com a senha do usuário: "
     stty -echo
     read senha
     stty echo
     echo
     echo "Mensagens do sistema: "
     echo
     sudo /usr/sbin/useradd $login -c "$nome" -s /bin/false; echo "$senha" | sudo /usr/bin/passwd $login --stdin
     echo
     ( echo $senha ; echo $senha ) | sudo smbpasswd -s -a $login
     #smbpasswd -a $login $senha
     echo
     echo "Pressione qualquer tecla para continuar..."
     read msg
     Principal
  }
  Deletar() {
     echo -n "Entre com o login do usuário a deletar: "
     read login
     echo
     echo "Mensagens do sistema: "
     echo
     sudo /usr/bin/smbpasswd -x $login
     echo
     sudo /usr/sbin/userdel $login
     echo
     echo "Pressione qualquer tecla para continuar..."
     read msg
     Principal
  }
  Listar() {
     echo "Usuários existentes: "
     echo
     sudo cut -d: -f1 /etc/samba/smbpasswd | sort | more
     read msg
     Principal
  }
  Principal 

Estação 9x/Me

Recomendo fortemente que começe por aqui que é bem mais fácil! Basta alterar a estação para fazer parte de um domínio, reiniciar e etc... fique esperto nos log's para entender o que está acontecendo. Depois que estiver tudo ok, passe para as NT-like

Estação 2000/XP

Elas são chatas, mas basta seguir as dicas do Edinho em SaMBa como PDC: Enfrentando Problemas e Aplicando Soluções! que não tem erro. Como disse antes, o processo melhorou muito e não é mais necessário editar o registro do windão, graças ao SaMBa :)

Resumidamente, não acesse o servidor antes de ingressar em domínio, senão o XP vai reclamar que não pode fazer duas conexões com o mesmo usuário no mesmo servidor, algo assim. Para contornar isso, reinicie a máquina ou mande um 'net session /d' no XP e tente de novo.

O root deverá estar cadastrado no SaMBa (smbpasswd -a root)

Lembre-se que o novo usuário vai "perder" os e-mails, ícones, papel de parede e outras coisas, porque será criado um novo usuário no windão. Portanto, trate de backupear essas coisas em um local acessível para posterior importação.

Usuário administrador

Nos NT-like (NT, 2000, XP e 2003) você irá perceber que seu usuário é um mísero mortal e que nada pode fazer no sistema. Talvez você precise instalar algum programa, então precisará tornar seu usuário um administrador na máquina NT-like.

Para isso, o --d@niel-- postou umas dicas muito interessante que se resume em:

1-) Criar um grupo de administradores

  # groupadd god

Depois, via webmin ou alguma ferramenta de administração de usuários como o kuser, ou diretamente no arquivo de grupos, adicione os usuários que serão administradores. Exemplo de uma entrada no /etc/group:

  god:x:1001:tiago,tuxkiller

2-) Mapeie o grupo "Domain Admins" do Samba para o seu grupo

  # net groupmap modify ntgroup="Domain Admins" unixgroup=god

Isto associará o grupo "Domain Admins" (Administradores do Domínio) ao grupo "god" (troque pelo que você definiu no passo 1). Verifique se a saída do 'net groupmap list' possui algo semelhante a:

  Domain Admins (S-1-5-21-1518627310-3038261392-4081985781-512) -> god

E verifique se esse "Domain Admins" não está duplicado. Se estiver, delete e faça de novo senão vai dar uma confusão tremenda :-)

Se precisar de mais ajuda, consulte o documento Group Mapping MS Windows and UNIX.

Imprimindo em PDF

Contribuição de Washington de Lima aka Wconserta (olwm AT bol.com.br )

Neste tutorial explicarei como fazer, a partir do smb.conf do PDC do tutorial do Tiago Cruz, a criar uma impressora virtual no samba que numa rede Windows terá a função de converter tudo o que for mandado para esta impressora uma cópia em PDF no home do usuário no samba, isso é muito útil pois ja pensou em converte arquivos do autocad de DWG ou DWF para PDF ou mesmo um documento em DOC e XLS converter em PDF para mandar por e-mail para algum cliente além de arquivos de imagens como gerados num coreldraw, gimp, photoshop converte-los sem perda para pdf e compartilhar por e-mail ou mesmo uma pagina da web você queira salvar em PDF, com esta impressora virtual tudo isso é possível.

Chega de delonga e vamos ao que interessa :-)

Primeiro de tudo vamos instalar os programas que fazem o trabalho, eu uso o conectiva 10 então não irei compilar nada mais sim usar os pacotes oficiais da distro, este esquema foi testado e funcionou nas distro Conectiva 10, mandrake 10, mandrake 10.1, whiteboxlinux.org, sem problemas .

Vamos puxar os pacotes

  # apt-get  install gv xpdf ghostscript 

Com esta linha acima, irá instalar os pacotes que serão usados pois não basta só o GhostScript

Depois de instalado vamos fazer uns teste antes tipo com o gv tente abrir um arquivo PDF e a mesma coisa com o xpdf, tem que abrir em ambos, pois é sinal de que esta tudo funcionando.

Depois vamos para o smb.conf, como disse me baseei no do PDC do Tiago Cruz

  #Onde será salvo os pdf gerados, ou seja será salvo no home de cada usuário da rede  
  [home]
  comment =
  public = no
  path = /home/%u
  browsable = yes
  writable = yes
  create mask = 0600
  directory mask = 0700
  
  # para compartilhar as impressoras que você tem pelo cups
  [printers]
  comment = All Printers
  path = /var/spool/samba
  browseable = no
  printable = yes
  
  # Aqui está as linhas da Impressora virtual de gerar PDF 
  [pdf-gen]
  comment = Gerador de PDF
  path = /var/tmp
  guest ok = no
  printable = yes
  printing = bsd
  printcap name = cups
  print command = /usr/share/samba/scripts/print-pdf "%s" "%H" "//%L/%u" "%m" "%I" "%J" &
  lpq command = /bin/true 

Bem depois que copiou isso no seu smb.conf vamos fazer o script que realmente faz todo o trabalho, este script ele vem por padrão no mandrake 10.

Para criar o script vamos digitar assim

  vi /usr/share/samba/scripts/print-pdf    

se você não gosta do vi pode usar o mcedit ou kedit numa boa

e copie o script abaixo sem alterar nada

  _______________________________________________________________________
  #!/bin/bash
  # samba-print-pdf
  # This is a script which allows you to set up a virtual printer on samba
  # which will take the file (generated by a postscript filter on windows)
  # and turn it into a PDF, informing the user of where it is when it
  # is done
  #
  # (c) Buchan Milne <bgmilne@cae.co.za> 2002 
  # License: GPLv2
  # Changelog
  # v0.0.6 20030428
  #  - Allow options passed as env. variables from print command
  #  - Inline and simplify sed (use tr) clean script
  #  - Ensure file arrives in PREFIX even if TEMP is used without provided name
  #  - Changes from Joshua M. Schmidlkofer <joshua@imr-net.com> 20030425
  #    - Debugging, adjustments, and corrections.
  #    - Stupid sed sanitizing script. [probably horribly inefficient also]. 
  #    - Temp file usage cleanup.
  # v0.0.5 20020723
  #  - Add support for preset settings
  #  - Allow passing of filename provided by client as final filename
  #
  # Arguments:
  # $1 = file (usually passed with %s from samba)
  # $2 = unix prefix to where to place the file (~%u should work)
  # $3 = windows prefix to the same location (//%L/%u should work)
  # $4 = user/computer to send a notification to (%u or %m)
  # $5 = IP address of client (%I)
  # $6 = Name of destination file without extension (%J)
  # $7 = PDF setting (prepress,print,screen etc)
  #
  # If you want to customise any of the following configuration defaults, 
  # you can place them in the file /etc/samba/print-pdf.conf.
  # If you need to modify anything in this script, please provide me with your
  # changes, preferably in such a way that the changes are configurable.
  
  PS2PDF=ps2pdf13 
  OPTIONS="-dAutoFilterColorImages=false -sColorImageFilter=FlateEncode"
  #Values taken from arguments:
  INPUT=$1
  PREFIX="$2"
  WINBASE=$(echo "$3"|sed -e 's,/,\\\\\\\\,g')
  #NAME=`echo "$6"|sed -e 's/[&/:{}\\\\\\[<>$#@*^!?=|]/-/g;s/\]/-/g'`
  NAME=`echo "$6"|tr '[:punct:]' '[-*]'`
  
  # Source config file if it exists:
  CONFFILE=/etc/samba/print-pdf.conf
  [ -e $CONFFILE ] && . $CONFFILE
  
  #Values not taken as arguments, could be set via env. vars (?) or config file
  KEEP_PS=${KEEP_PS=0}
  PERMS=${PERMS=640}
  BASEFILE=${BASEFILE=pdf-service}
  TEMP="${TEMP=$2}"
  UMASK=${UMASK=006}
  
  #Make sure that destination directory exists
  mkdir -p "$PREFIX"
  
  INFILE=$(basename $INPUT)
  
  umask $UMASK
  
  [ -n "$NAME" ] && TEMP="$PREFIX"
  
  #make a temp file to use for the output of the PDF
  OUTPUT=`mktemp -q $TEMP/$BASEFILE-XXXXXX`
  if [ $? -ne 0 ]; then
  echo "$0: Can't create temp file $TEMP/$OUTPUT, exiting..."
  exit 1
  fi
  if [ -n "$NAME" ]; then
  FINALOUTPUT="$PREFIX/$NAME"
  else
  FINALOUTPUT="$OUTPUT"
  fi
  if [ -n "$7" ]; then
  OPTIONS="$OPTIONS -dPDFSETTINGS=/${7#pdf-}"
  else
  OPTIONS="$OPTIONS -dPDFSETTINGS=/default"
  fi
  
  WIN_OUTPUT="$WINBASE\\\\"`basename "$FINALOUTPUT"`
  #mv "$INPUT" "$INPUT.ps";INPUT="$INPUT.ps"
  
  # create the pdf
  $PS2PDF $OPTIONS "$INPUT" "$OUTPUT.pdf" >/dev/null 2>&1
  mv -f "${OUTPUT}.pdf" "${FINALOUTPUT}".pdf
  
  # Generate a message to send to the user, and deal with the original file:
  MESSAGE=$(echo "Your PDF file has been created as $WIN_OUTPUT.pdf\n")
  
  
  # Cleanup
  if [ $KEEP_PS != 0 ];then
  mv -f $INPUT "${FINALOUTPUT}".ps
  MESSAGE=$(echo "$MESSAGE and your postscript file as $WIN_OUTPUT.ps")
  # Fix permissions on the generated files
  chmod $PERMS "${FINALOUTPUT}".ps "${FINALOUTPUT}".pdf
  else
  rm -f $INPUT
  # Fix permissions on the generated files
  chmod $PERMS "${FINALOUTPUT}".pdf
  fi
                                              
  #Remove empty file from mktemp:
  rm -f  $OUTPUT
  
  # Send notification to user
  echo -e $MESSAGE|smbclient -M $4 -I $5 -U "PDF Generator" >/dev/null 2>&1

Como pode ver é um script um pouco complexo mais eu mantive ele original, funciona sem problema no Conectiva 10, Mandrake 10, Whiteboxlinux.org, Red Hat 9, eu só tive problema no Fedora core 3 onde não funcionou, mais isso é devido a estrutura dos diretórios do Fedora ser diferente das outras.

Depois de tudo feito vamos para o Windows configurar a impressora.

Em Painel de Controle - Impressoras e adicione uma impressora "da rede", onde a impressora a ser utilizada é aquela que criamos ou seja “pdf-gen”

O Windows irá mostrar uma caixa de diálogo dizendo que o servidor não possui drivers para a impressora, é só ignorar

Vamos escolha uma impressora POSTSCRIPT,

Eu Recomendo a “HP Color Laser 5/5M PS” pois esta vai gerar um arquivo pdf mantendo as cores do documento original, agora se sua intenção é que seja gerado pdf em preto e braco ai escolha esta “HP Laserjet 4P/4MP Postscript”

Ficamos por aqui qualquer dúvida que possa ter mandar para o FórumGdH sessão Linux que lá eu e mais colegas poderão tirar suas duvidas, não me mande e-mail nem MP pois só ajudo no fórum.

Assim uns artigos que na qual podem ajudar a quem tiver dificuldade são esse e esse, eu me baseie neles em alguma coisa, menos no script e config do smb.conf que foi totalmente diferente, porém pode ajudar a quem tiver dificuldade, se caso o meu não servir para a sua distro.

Considerações finais

Espero que este documento ajude alguém como vem me ajudado, afinal, é uma ótima coletânea de quase 1 ano acumulando dicas e resolvendo problemas nessa nova versão do software.

Caso você tenha alguma contribuição para fazer ao este documento, alguma melhoria, correção de português (deve ter vários...), elogio ou algo do tipo, por favor, sinta-se a vontade em me mandar um e-mail (tiagocruz AT linuxrapido.org)

Agora, caso você tenha alguma dúvida, por favor, não me mande e-mail em particular, e sim, poste no fórum para que outras pessoas ajudem a resolvê-la também.

Infelizmente não posso me recordar todos que me ajudaram, de uma forma ou outra, a elaborar este documento, mas indico cegamente o FAQ do meu amigo ZAGO que muita coisa daqui saiu de lá. Também indico como leitura "extra-curricular" o Manual Oficial do SaMBa para que tudo dê certo no final.

Este material é livre para leitura, uso, redistribuição ou modificação, entre outros direitos, conforme definido na licença livre GNU Free Documentation License.