sexta-feira, 10 de julho de 2015

Configuração Básica do SAMBA em Servidores Linux

Olá Pessoal.

O SAMBA é uma suíte de ferramentas instaladas em um servidor Linux que permite a integração de ambientes heterogêneos através da comunicação entre sistemas Linux e Windows, viabilizando serviços de diretórios no Linux (controlador de domínio), o controle de acesso dos usuários, compartilhamento de arquivos e de impressoras, etc. A integração é possível porque em ambos os sistemas a comunicação é baseada no protocolo SMB/CIFS (Server Message Block / Common Internet File System).


# Configuração do Servidor SAMBA

Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação do pacote denominado samba para que o Linux possa ser posteriormente configurado como servidor de arquivos para clientes Windows e Linux. Essa tarefa é simples e rápida através do APT:

root@smb-server:/# apt-get install samba

Para exemplificar o processo de compartilhamento de diretórios no servidor com os demais clientes da rede, vamos criar os diretórios "/smb/publico" (acesso total público) e também "/smb/privado" (acesso restrito ao usuário shbbrito):

root@smb-server:/# mkdir -p /smb/publico
root@smb-server:/# chown nobody.nogroup /smb/publico
root@smb-server:/# chmod 777 /smb/publico

root@smb-server:/# mkdir -p /smb/privado
root@smb-server:/# chown shbbrito.shbbrito /smb/privado
root@smb-server:/# chmod 750 /smb/privado

O arquivo de configuração do SAMBA fica lozalicado em "/etc/samba/smb.conf", sendo bem documentado e organizado em diferentes seções para facilitar sua configuração. O simples compartilhamento de diretórios (objeto deste artigo) é realizado através da inserção de novos diretórios entre colchetes na seção denominada "Share Definitions", como pode ser observado no exemplo abaixo.

###--- em /etc/samba/smb.conf

(...) Conteúdo Omitido

workgroup = SAMBA
interfaces 192.168.221.11/24 ethX
bind interfaces only = yes
server role = standalone server
passdb backend = smbpasswd

######### Share Definitions

[smb-publico]
   comment = "Diretorio Publico"
   path = /smb/publico
   public = yes
   only guest = yes
   writable = yes
   printable = no

[smb-privado]
   comment = "Diretorio Privado (shbbrito)"
   path = /smb/privado
   public = no
   only guest = no
   valid users = shbbrito
   valid users = @shbbrito
   writable = yes
   printable= no

Obs.: Caso não haja integração do SAMBA com nenhum serviço de diretórios para fins de autenticação dos usuários, como é o caso deste exemplo em que o servidor é standalone, é necessário: (1) criar o arquivo de usuários reconhecidos pelo serviço, (2) limitar seu acesso para somente leitura e (3) adicionar os usuários que também devem existir previamente no servidor Linux.

root@smb-server:/# touch /etc/samba/smbpasswd
root@smb-server:/# chmod 644 /etc/samba/smbpasswd
root@smb-server:/# smbpasswd -a nome_do_usuario
Password: *****
Re-Type Password: *****

Depois de realizadas as configurações, basta (re)iniciar o serviço SAMBA:

root@smb-server:/# service smbd restart

# Configuração do Cliente Windows

Na realidade não há nenhum segredo a ser detalhado nessa seção. O acesso aos compartilhamentos do servidor SAMBA através de estações clientes que estejam executando alguma versão do Windows pode ser feito através da execução (atalho Windows+R) do endereço ou nome do servidor (\\192.168.221.11). Também é possível fazer o acesso direto a um diretório específico (\\192.168.221.11\smb-publico\) e mapear unidades de rede para facilitar o acesso do usuário.

# Configuração do Cliente Linux

De forma muito similar aos clientes Windows, em clientes Linux que tenham um ambiente gráfico é possível localizar os compartilhamentos através da simples navegação na rede ou mesmo através da navegação manual ao servidor, por ex.: smb://192.168.221.11. Na ocasião do acesso através de clientes que não tenham uma interface gráfica, o acesso pode ser realizado através da ferramenta smbclient.

01. apt-get install smbclient
02. smbclient -L 192.168.221.11
03. smbclient //192.168.221.11/smb-publico -U nome_usuario

Na linha 01 estamos instalando o cliente SAMBA (smbclient), caso não haja nenhum instalado na máquina. O comando da linha 02 (parâmetro -L) pode ser utilizado para visualizar os compartilhamentos disponibilizados pelo servidor que responde por um determinado nome ou IP. O acesso ao diretório propriamente dito é realizado na linha 03, sendo que na sequência o usuário será direcionado para um prompt SMB similar ao prompt do FTP. No prompt SMB o comando get é utilizado para baixar um arquivo remoto na máquina local, enquanto que o comando put é utilizado para subir um arquivo local no servidor remoto. Para obter mais detalhes dos outros comandos e da ferramenta smbclient, recomendo a leitura do seu manual através do comando "man smbclient".

Uma alternativa à manipualação dos arquivos compartilhados através do smbclient é montar localmente na máquina cliente o diretório remoto compartilhado pelo servidor. Esse procedimento pode ser realizado através do seguinte comando:

mount -t cifs //192.168.221.11/smb-publico /home/shbbrito/smb-publico -o username=shbbrito

Façam seus testes...

Samuel.

7 comentários:

  1. Boa Noite Samuel!
    Tive apenas um pequeno problema ao adicionar a senha ao meu usuário (luciano), quando digito no terminal aparece o erro:
    luciano@ubuntu-lts:/etc/samba$ sudo sbmpasswd -a luciano
    sudo: sbmpasswd: command not found
    luciano@ubuntu-lts:/etc/samba$ sudo sbmpasswd -a luciano
    sudo: sbmpasswd: command not found
    luciano@ubuntu-lts:/etc/samba$ sbmpasswd -a luciano
    Comando 'sbmpasswd' não encontrado, você quis dizer:
    Comando 'smbpasswd' do pacote 'samba-common-bin' (main)
    sbmpasswd: comando não encontrado

    Qual a possível solução do problema para que possa adicionar a senha ao ususário luciano?

    ResponderExcluir
    Respostas
    1. o comando é " smbpasswd -a seu_usuário" é "smb" ao invés de "sbm", um erro de digitação.

      Excluir
  2. Samuel, ótimo tutorial, já segui alguns e continuo com um problema, o acesso pelo windows fica pedindo ao infinito credenciais. Tem alguma solução?

    ResponderExcluir
    Respostas
    1. Para a posterioridade. Tive o mesmo problema e resolvi acrescentando na seção [global] as seguintes linhas

      #### WINDOWS XP #####
      lanman auth = yes
      ntlm auth = yes

      Excluir
  3. Olá Anônimo:

    Você precisa criar um usuário no linux, e depois no samba,

    #adduser usuario

    #smbpasswd -a usuario

    ok?

    ResponderExcluir