segunda-feira, 28 de maio de 2012

Samba PDC como Debian Squeeze


Pessoal esse artigo mostra como configurar um servidor samba como PDC (Primary Domain Controler), é uma coisa bem simples de se fazer e de suma importância em uma rede, esse serviço irá proporcionar uma serie de recursos como controle de acesso a arquivos e diretórios, gerenciamento centralizado, perfil móvel e uma serie de outros benefícios.

Instalando o Samba

Logo depois de instalar o Debian GNU/Linux é preciso atualizar o sistema, para isso altere o sources.list colocando as seguintes linhas: 

# pico /etc/apt/sources.list 

deb http://security.debian.org/ squeeze/updates main contrib
deb-src http://security.debian.org/ squeeze/updates main contrib

deb http://ftp.debian.org/debian/ squeeze-updates main contrib
deb-src http://ftp.debian.org/debian/ squeeze-updates main contrib

deb http://ftp.br.debian.org/debian/ squeeze main contrib
deb-src http://ftp.br.debian.org/debian/ squeeze main contrib

Tecle (ctrl + o) para salvar e (ctrl + x) para sair. 

Depois atualize o sistema: 


# aptitude update 

Instale as atualizações: 

# aptitude upgrade 

Com seu sistema atualizado é hora de instalar o Samba: 

# aptitude install samba

Alterando o smb.conf

Logo após a instalação do Samba é hora de alterar o smb.conf, para isso vá até o diretório onde ele foi instalado e altere o smb.conf. É interessante também você manter o smb.conf original para isso: 

# cd /etc/samba/ 

Renomeie o smb.conf: 

# mv smb.conf smb.conf.orig 

Crie um novo smb.conf: 

# pico smb.conf 

Coloque as seguintes linhas no novo arquivo; 
[global]
# aqui você substitua o GUIADOTI pelo nome do seu dominio
workgroup = GUIADOTI
# você substitua o ZEUS pelo nome do seu servidor
netbios name = FENIX
server string = Servidor de Arquivos

domain master = yes
domain logons = yes
# aqui coloquei um script de logon para cada usuario, mas você pode usar um script somente colocando netlogon.bat
logon script = %U.bat
logon home = \\%L\%U\.profiles
logon path= \\%L\profiles\%U

security = user
encrypt passwords = true
enable privileges = yes
passdb backend = tdbsam

# aqui eu proibo a gravação de arquivos .iso e .mp3 no servidor, acredite proibir o .mp3 e outros tipos de musicas ajuda muito.
veto files = /*.iso, *.mp3

prefered master = yes
local master = yes
os level = 100
wins support = yes

panic action = /usr/share/samba/panic-action %d
# ajudar a melhorar a permormace 
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

log file = /var/log/samba.log
log level = 1
max log size = 10000

# aqui define os logs que serão gerados, e cria a lixeira do samba
vfs objects = full_audit, recycle
recycle:versions = yes
recycle:repository = /var/samba/trash/%U
recycle:keeptree = yes
recycle:exclude = *.mp3, *.iso
recycle:exclude_dir = tmp, cache

full_audit:success = write, unlink, rename, rmdir, chmod, chown
full_audit:prefix = %u|%S
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice


[netlogon]
comment = servico de logon
path = /var/samba/netlogon
read only = yes
browseable = no

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

[homes]
path = /home/%u/profile.pds
valid users = %S
read only = no
create mask = 0700
directory mask = 0700
browseable = no

[lixeira]
path = /var/samba/trash/%U
writable = yes
create mask = 0700
directory mask = 0700
browseable = yes

[arquivos]
path = /arquivos
browseable = yes
writable = yes
valid users = +geral
write list = +geral


Tecle (ctrl + o) para salvar e (ctrl + x) para sair. 

Criando e configurando usuarios e diretórios

Bem pessoal, depois de alterar o smb.conf é hora de criar os usuários, grupos e diretórios. 

Antes de começar a configuração, liste todos os usuários da rede dividindo por setores que serão os grupos.

O diretório skel é o "molde" para criação de usuários do Linux, então vamos criar a pasta profile.pds para servir de padrão.

Criar a pasta profile.pds no skel:

# cd /etc/skel
# mkdir profile.pds
# chmod 775 profile.pds/ 

É muito interessante também criar um grupo geral para adicionar todos os usuários do domínio.

Criar o grupo geral:

# groupadd geral 

Agora vamos criar a pasta samba e a netlogon:

# cd /var
# mkdir samba
# chmod 775 samba/
# chown root:geral samba/

# cd samba/
# mkdir netlogon
# chmod 775 netlogon/
# chown root:geral netlogon/ 

Agora vamos criar a pasta trash que será a lixeira do Samba:

# cd /var/samba/
# mkdir trash
# chmod -R 775 trash/
# chown root:geral trash/ 

Agora é hora de adicionar os usuários no sistema e no Samba, aqui como teste a hierarquia é a seguinte:

GERAL: 
RH
COMPRAS
FINANCEIRO
QUALIDADE
maria
joao
rafael
jose
felipe
marcelo
diogo
amanda


Lembrando que os setores serão os grupos criados e todos sem exceção pertencerão ao grupo GERAL.

Bem, vamos criar os usuários, mão na massa.

Lembrando que a senha tem que ser a mesma para o sistema e para o Samba.

Adiciona usuário no sistema:

# adduser [usuario] 

Adiciona usuário no Samba: 

# smbpasswd -a [usuario] 

Não podemos esquecer de adicionar o root no Samba também (com a mesma senha do sistema): 

# smbpasswd -a root 

Agora vamos criar os grupos que são os setores: 

# groupadd rh compras financeiro qualidade 

Agora temos que adicionar os usuários ao seu determinado grupo: 

# adduser maria rh
# adduser felipe rh
# adduser joao compras 

e assim por diante...

Lopo apos vamos cadastrar TODOS os usuários ao grupo geral:

# adduser [usuario] geral 

Depois do trabalho maçante de cadastrar os usuários no sistema e no Samba, é hora de cadastrar as contas de máquina, você também pode usar um script automático, mas sinceramente gosto de criar conta por conta, pois já tive um problema com esses scripts automáticos, mas fique a vontade para escolher.

Pra isso é preciso adicionar a linha /bin/false ao arquivo /etc/shells:
 

# pico /etc/shells 

E insira no final do arquivo:

/bin/false

Crie o grupo de máquinas
: 

# groupadd maquinas 

Adicionar as contas de máquinas: 

# useradd -g maquinas -d /dev/null -s /bin/false maquina$
# passwd -l maquina$
# smbpasswd -a -m maquina 

Crie a pasta profiles, nela que ficarão os arquivos do usuário, área de trabalho, meus documentos etc.

# cd /var
# mkdir profiles
# chmod 1777 profiles/ 

Crie a pasta para compartilhamento:
 

# cd /
# mkdir arquivos
# chmod 775 arquivos/
# chown root:geral arquivos/
# mkdir rh 
# cd /arquivos/rh
# chmod 770 rh/
# chown root:rh rh/
# mkdir compras 
# cd /arquivos/compras
# chmod 770 compras/
# chown root:compras compras/
# mkdir financeiro 
# cd /arquivos/financeiro
# chmod 770 financeiro/
# chown root:financeiro financeiro/
# mkdir qualidade 
# cd /arquivos/qualidade
# chmod 770 qualidade
# chown root:qualidade qualidade/ 

Agora basta criar os scripts de logon:
 

# cd /var/samba/netlogon/
# pico usuario.bat 

net use X: \\ZEUS\arquivos
net use L: \\ZEUS\lixeira

# chmod 775 usuario.bat 


Troca de senha automática

Você pode determinar o tempo em que a senha do usuario irá expirar: 

# pdbedit -i smbpasswd -e tdbsam 

O tempo é em segundos, 60x60x24x42, assim a senha irá expirar em 42 dias: 

# pdbedit -P "maximum password age" -C 3628800 

# pdbedit -Lv -u usuario 

Pronto.

Espero que esse tutorial seja útil a todos, qualquer dúvida é só deixar um comentário para discutir.

14 comentários:

  1. Amigo muito bom seu artigo ! Parabens !

    Só fiquei com uma dúvida , nos testes que eu fiz, o usuário da área financeira consegue apagar a pasta "financeiro" se ele quiser... tem como eu bloquear isso sem que o usuário fique sem acesso as modificações dos arquivos na pasta ?

    Att rafaeç

    ResponderExcluir
  2. Rafael pode sim, você pode dar permissão de somente leitura na pasta financeiro e forçar as permissões dos arquivos criados dentro desse diretório, use o comando abaixo para mudar a permissão:

    # chmod 750 /arquivos/financeiro
    # chown root:financeiro /arquivos/financeiro

    e adicione a sessão abaixo em seu smb.conf caso ainda não tenha feito.

    [financeiro]
    path = /arquivos/financeiro
    browseable = yes
    writable = yes
    valid users = +financeiro
    write list = +financeiro
    create mask = 0777
    directory mask = 0777

    as duas ultimas linhas definem que os arquivos modificados ou criados terão acesso para todos. Assim só entrará no diretório financeiro quem tiver dentro do grupo financeiro e todos os arquivos la dentro terão permissão total.
    Obs: Não esqueça de adicionar os usuários dentro do grupo financeiro.

    ResponderExcluir
    Respostas
    1. Ricardo obrigado pelo retorno !

      Mas não funcionou ... o usuário ainda consegue entrar em [arquivos] e excluir a pasta financeiro... porem a diferença é que agora ele não consegue editar os arquivos do financeiro...

      Mais uma dúvida se não for incomodar , qual a finalidade de ter o compartilhamento
      [arquivos](que contem financeiro , compras , rh, etc) dentro do samba? já que eu vou ter o compartilhamento de cada área para seu respectivo grupo ex : usuario joao do financeiro tem o compartilhamento[financeiro], e tambem tem o compartilhamento [arquivos] onde tem a pasta financeiro novamente... entendeu ?

      Excluir
  3. Rafael no exemplo do post eu deixei somente o compartilhamento arquivos, mas no caso se tu for criar um compartilhamento para cada setor não tem a necessidade de deixar o compartilhamento arquivos, deixe só os compartilhamentos de cada setor, e quanto ao problema de apagar a pasta deve estar avendo algum mal entendido, pois se você setar a permissão 750 na pasta e dono root com grupo financeiro os usuários do grupo financeiro só terão permissão de ler a pasta, se ele tentar apagar vai dar erro.

    ResponderExcluir
  4. E aí Ricardo Galossi blz?

    cara, é o seguinte, estou com uma pequena duvida, o servidor samba já foi instalado, tudo virtualizado (VIRTUALBOX).. o arquivo smb.conf configurado, só queria que vc desse uma olhada no meu smb.conf, estou com duvida onde devo alterar para fazer os compartilhamentos:

    Versão do Ubuntu 12.10.

    ####smb.conf comentado####
    ### inicio da sessão global ###


    [global]
    #Nome do dominio ou grupo de trabalho
    workgroup = betulla.com
    #Nome que será visivel na rede
    netbios name = servidor
    #Nome e comentario do servidor na rede
    server string = Samba PDC
    #Definição como controlador de dominio sim/não
    domain master = yes
    #Primeiro servidor a responder na rede
    preferred master = yes
    local master = yes
    #Login no dominio
    domain logons = yes

    ##Descomente a linha abaixo para add usuario maquina automaticamente
    ##Lembrando que essa linha foi testada apenas no ubuntu 10.04##
    add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody %u

    ##Descomenta linha abaixo para inserir usuario maquina no samba automaticamente
    #Lembre-se que essa linha foi testa apenas no debian##
    add user script = /usr/sbin/adduser --quiet --disabled-password --gecos ""%u

    #essa linha indica que os usuarios vao utilizar script de logon
    #muito utilizado para mapeamentos e etc
    logon script = netlogon.bat

    # essas linhas abaixo vamos criar um perfil
    #%L indica o nome do servidor, %U o nome do usuario que fez o logon
    #e mapeia o usuario # \\nomeservidor\profiles\usuario
    logon home = \\%L\%U\.profiles

    #essa linha abaixo mapeia \\nomeservidor\profiles\usuario
    logon path = \\%L\profiles\%U

    #exige altenticação para acesso ao domínio e compartilhamentos
    security = user

    #Aa senhas serão criptografadas
    encrypt passwords = yes

    #Quanto maior for o valor, maior será o servidor na rede
    os level = 100

    ## Definição de pastas e compartilhamentos ##

    [netlogon]
    ##comentário da pasta
    comment = Serviço de logon
    ##caminho da pasta
    path = /var/samba/netlogon
    ##Visivel na rede
    guest ok = yes
    ##Não acessivel via browser
    browseable = no

    [homes]
    comment = directorio home
    ##Valido apenas para usuarios cadastrados
    valid users = %S
    ##visivel na rede
    guest ok = yes
    ## Não acessivel via browser
    browseable = no


    [profiles]
    ## Caminho da pasta
    path = /var/profiles
    ## Gravavel
    writeable = yes
    ## Não acessivel via browser
    browseable = no
    ## Permissão apenas para o dono
    create mask = 0600
    ##Permissão apenas para o dono
    directory mask = 0700

    [arquivos]
    #compartilhamento para todos os usuarios da rede
    comment = compartilhamento padrao
    #caminho da pasta
    path = /mnt/arquivos
    #tipo de acesso como publico
    public = yes
    #compartilhamento visivel a todos
    browseable = yes
    #Permite gravar
    writable = yes
    # somente leitura sim ou não
    read only = no
    # tera permissão rxw somente para o root
    create mask = 0700
    # mascara que sera criada os diretorios
    directory mask = 0700


    instalei uma maquina cliente (XP) na VM, ingressei a mesma no domínio (betulla.com), está tudo funcionando, porem gostaria de fazer algumas mudanças tipo:

    Cadastrei o usuário maria e ingressei a mesma ao domínio (betulla.com), conforme mostra a foto abaixo:

    http://img11.imageshack.us/img11/7969/linuxmd.jpg

    Quero criar alguns grupos e usuários e dar as permissões para as devidas pastas:

    Exemplo:
    As pastas e arquivos do setor (RH) só quem vai acessar é (João, Maria, Letícia, Edvan e Jéssica).

    As pastas e arquivos do setor (COMPRAS) só quem vai acessar é (Pedro, Diego, Walber, Willian e Polyana).

    As pastas e arquivos do setor (PRESTAÇÃO DE COMPRAS) só quem vai acessar é (George, Francisco, Wallan, Antonio e Vinicius).


    É preciso modificar meu smb.conf?
    cadastro os usuários e grupos na /home mesmo?

    ResponderExcluir
  5. Edvan no artigo acima mostro o passo a passo de como criar as restrições por grupos, é só tu dar uma olhada e testar.

    ResponderExcluir
    Respostas
    1. Então amigo, meu smb.conf é diferente do seu, por isso que perguntei, e no vivaolinux vou postou as configurações do seu smb.conf diferente daqui do blog, daí fiquei confuso..heheh.

      Veja:

      [arquivos]
      path = /arquivos
      browseable = yes
      writable = yes
      valid users = +geral
      write list = +geral

      [rh]
      path = /arquivos/rh
      browseable = yes
      writable = yes
      valid users = +rh
      write list = +rh

      [compras]
      path = /arquivos/compras
      browseable = yes
      writable = yes
      valid users = +compras
      write list = +compras

      [financeiro]
      path = /arquivos/financeiro
      browseable = yes
      writable = yes
      valid users = +financeiro
      write list = +financeiro

      [qualidade]
      path = /arquivos/qualidade
      browseable = yes
      writable = yes
      valid users = +qualidade
      write list = +qualidade

      Excluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
  7. No seu artigo do VOL parei aqui:

    useradd -g maquinas -d /dev/null -s /bin/false maquina$
    # passwd -l maquina$
    # smbpasswd -a -m maquina

    Pois o comando passwd -l maquina$ não deu certo, veja a imagem logo abaixo:
    http://img96.imageshack.us/img96/1148/linuxxp.jpg

    ResponderExcluir
  8. Amigo voce tem que colocar o nome na sua máquina e não máquina como esta no exemplo, um outro exemplo seria:

    # useradd -g maquinas -d /dev/null -s /bin/false pcmaria$
    # passwd -l pcmaria$
    # smbpasswd -a -m pcmaria

    ou também voce pode adicionar essa linha em seu smb.conf para não precisar criar as contas de máquina na mão:

    add machine script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u

    ResponderExcluir
  9. Blz, adicionei esse script ao meu smb.conf. vou terminar de fazer os procedimentos, qualquer coisa posto aqui ou no VOL mesmo.

    ResponderExcluir
  10. Blz Ricardo, creio que deu tudo certo.

    As pastas para compartilhamento são essas abaixo:

    # cd /
    # mkdir arquivos
    # chmod 775 arquivos/
    # chown root:geral arquivos/

    # cd /arquivos/rh
    # mkdir rh
    # chmod 770 rh/
    # chown root:rh rh/

    # cd /arquivos/compras
    # mkdir compras
    # chmod 770 compras/
    # chown root:compras compras/

    # cd /arquivos/financeiro
    # mkdir financeiro
    # chmod 770 financeiro/
    # chown root:financeiro financeiro/

    # cd /arquivos/pagamento
    # mkdir pagamento
    # chmod 770 pagamento
    # chown root:pagamento pagamento/


    Por exemplo:
    O usuário vania tem acesso ao RH, conforme mostra a foto abaixo, o resto das pastas que aparece no compartilhamento ela nao tem permissão de acesso..

    veja: http://img5.imageshack.us/img5/4297/servidorsambavirtualiza.jpg

    Quando acesso meu computador aparece o nome vania mapeado, mais nao contem nada dentro, deve ser para ela ir salvando os arquivos, se ela criar uma pasta lá, automaticamente vai para aqui:

    veja: http://img5.imageshack.us/img5/2849/servidorsambavirtualizai.jpg
    Veja: http://img16.imageshack.us/img16/4297/servidorsambavirtualiza.jpg
    Veja: http://img685.imageshack.us/img685/4297/servidorsambavirtualiza.jpg


    P.S: Creio que está tudo certo, entrei no domínio com o usuário vania, vou testar os outros usuários depois.

    ResponderExcluir
  11. Sr Ricardo estou com duvida no cadastramento de maquinas, para que eu possa finalizar a configuração do servidor.
    essas maquinas é para ser cadastrada no terminal conforme os comandos que você deixou acima.
    e que nome eu daria para essas maquinas.
    aguardo retorno

    ResponderExcluir
  12. fiz exatamente conforme o guia explicou mas na hora de logar no windowns com o usuario e senha, aparece a mensagem Erro durante a tentativa de ingresso no dominio "GUIADOTI" o dominio espeficado não existe ou não pode ser contatado

    ResponderExcluir