Unidade F - Samba

F.6. Instalação e configuração do servidor SAMBA

Podemos instalar o servidor SAMBA no Debian/Linux com o comando apt-get:

# apt-get install samba

Toda a configuração deste serviço está centralizada em um único arquivo denominado o smb.conf que se encontra no diretório padrão do Samba /etc/samba. O arquivo é organizado por seções, definidas por um nome entre colchetes ("[ ]"), que determinam a aplicação dos parâmetros declarados no arquivo de configuração do servidor. A principal seção chama-se [global] e contém especificações gerais do servidor. Os parâmetros dessa seção têm efeito em todo o servidor Samba, incluindo os compartilhamentos. As demais seções são declaradas da mesma forma, porém seus parâmetros têm efeito apenas no compartilhamento a que se referem.
A versão do arquivo smb.conf que é instalado pelo pacote samba está organizado em áreas temáticas como  segurança, redes, etc.  Esta  organização muitas vezes confunde os usuários iniciantes. Recomenda-se renomear o arquivo atual para e utilizá-lo como referência:

# mv /etc/samba/smb.conf  /etc/samba/smb.conf.bak

E criar um novo arquivo com configurações mínimas:

#gedit /etc/samba/smb.conf

Veja um exemplo de um arquivo de configuração padrão que pode ser utilizado no seu servidor:

[global]
     netbios name = SERVIDOR    
     workgroup = IFSUL
     server string = %h server
     security = share
     os level = 65
     syslog = 0
     log file = /var/log/samba/log.%m
     max log size = 1000
     printing  =cups
     load printers =yes
     panic action = /usr/share/samba/panic-action %d
     print command =
     lpq command = %p
     lprm command =
 [homes]
    comment = Home Directories
    valid users = %S
    create mask = 0700
    directory mask = 0700
    browseable = No
[printers]
    comment = All Printers
    path = /var/spool/samba
    create mask = 0700
    print ok = yes
    guest ok = Yes
    printable = Yes
    browseable = yes

Na sequência vamos destacar alguns parâmetros importantes deste trecho de código. Como você pode ver, inicialmente temos a declaração da seção global (linhas 1 a 15) na qual encontramos a especificação do nome NetBIOS do servidor (linha 2) seu grupo de trabalho (linha 3) e  rótulo (linha 4) do servidor na rede.

Na linha 5 encontra-se o parâmetro security que especifica o nível de segurança utilizado pelo servidor em seus compartilhamentos. As opções mais comuns são:

Na linha 6, temos o parâmetro os level que indica o papel desse servidor na rede. Pode-se especificar os valores de 1 a 255, sendo que nos valores mais altos identificam os servidores de servidor de domínio. O padrão é utilizarmos o valor 65 que é o mesmo utilizado pelos sistemas operacionais clientes como o Windows XP. Para especificar um servidor de domínio, deve-se especificar valores mais elevados, como veremos na próxima unidade. As instruções das linhas 7 a 9 definem como será realizado o log do servidor SAMBA.

A partir da linha 16, temos a especificação da seção [homes] que tem uma função especial: disponibilizar remotamente o diretório home dos usuários previamente criados no servidor.  Esse recurso geralmente é utilizado em conjunto com a permissão de segurança user, pois permite que o usuário tenha acesso aos seus arquivos pessoais independentemente da estação de trabalho onde o mesmo está logado. As instruções create mask e directory mask (linhas 19 e 20) fazem com que os arquivos e diretórios criados pelo usuário dentro do home sejam acessíveis apenas por ele mesmo.

A seção [printers] (linhas 22 a 29) tem a função de compartilhar as impressoras instaladas no servidor. Esse compartilhamento de impressoras controlado pela variável print ok (linha 26) para qual podem ser atribuídos os valores “yes” e “no” que,  respectivamente, habilitam e desabilitam  o compartilhamento de impressoras.

O compartilhamento é acionado pelas linhas printing e load printers da seção global (linhas 10 e 11). A primeira opção indica qual o servidor de impressão que será utilizado pelo sistema. Neste exemplo utilizou-se o CUPS (Common Unix Printing System) que, além de realizar o compartilhamento local de impressoras, permite a configuração de um servidor impressão, sendo possível cadastrar as impressoras instaladas em hosts remotos e gerenciar o processo de impressão das mesmas.  Para instalarmos o CUPS no Debian/Linux utilizamos o comando:

#apt-get install cups

A manutenção do servidor de impressão é realizada através de uma interface web, que pode ser acessada informando na barra de endereços no navegador o endereço IP do servidor e a porta padrão do CUPS (no caso, 631), em destaque na Figura F6.1.1.

Para realizar a instalação e o compartilhamento de impressoras, deve-se selecionar a aba Administration dessa interface. Ao acessá-la, será solicitado um usuário que tenha permissão para realizar esta tarefa, como o root, por exemplo. O primeiro passo neste processo é determinar que tipo de porta de comunicação será utilizada pela impressora que será compartilhada (LPT, SCSI, etc.) e, na sequência, deve-se ser informar o fabricante da mesma (Figura F6.1.2).

Com base nessa informação, na tela seguinte será solicitado modelo da impressora que será instalada. Caso o mesmo não esteja entre as opções listadas, é possível informar o caminho para o arquivo que contém o driver do dispositivo (Figura 6.1.3).

Após, serão solicitadas informações relativas ao tipo de impressão que será realizada nessa impressora: tamanho de papel, qualidade da cópia, etc. Após confirmar essas informações, a nova impressora estará instalada no sistema e pronta para ser utilizada.

A administração dos trabalhos de impressão deve ser realizada acessando a aba printers, onde são exibidas todas as impressoras instaladas no servidor (Figura F6.1.4). Nesta página é possível gerenciar a fila de impressão das impressoras e até alterar suas configurações, se necessário.

Após instalar o servidor CUPS e configurar as instruções no arquivo de configuração do SAMBA, deve-se reiniciar esse servidor para efetivar as alterações:

#Invoke-rc.d samba restart

Como de praxe, para gerenciar o serviço do SAMBA devemos utilizar os comandos invoke-rc.d samba start/restart/stop. Após reiniciar o servidor, a impressora instalada no servidor estará disponível para ser utilizada pelos clientes da rede local.

As estações de rede Windows podem localizar o servidor e os recursos compartilhados através do Windows Explorer, informando na barra o nome netbios do servidor após duas contra-barras (Figura F6.1.5). Você deve lembrar que na seção global definimos o nome netbios “SERVIDOR” (linha 2), logo, para acessá-lo, devemos digitar \\SERVIDOR na barra de endereços para acessar os recursos compartilhados pelo servidor. Nas redes Windows dos nomes netbios não são case sentitive, portanto, não há problemas em localizar o servidor utilizando letras maiúsculas ou minúsculas.

Além do disponibilizar impressoras, também é possível compartilhar diretórios e pode-se fazer isso inserido uma nova seção correspondente à pasta que queremos compartilhar ao final do smb.conf. Deve-se especificar o seu nome entre “[]“ e após inserir os parâmetros que determinarão o comportamento do mesmo. Os parâmetros mais utilizados são:

Para compreender melhor, um exemplo: vamos supor que seja necessário criar no servidor uma pasta pública que será utilizada para compartilhar arquivos para serem acessados livremente por todos os usuários da sua rede e que será armazenada em um diretório próprio em /mnt. O primeiro passo, é claro, será criar a pasta que deve ser compartilhada:

# mkdir   /mnt/publico

Como esta pasta será pública, vamos ajustar as permissões para que os usuários possam ter acesso à mesma:

# chmod  -Rf   777  /mnt/publico

Vale lembrar que as permissões de acesso atribuídas a pastas e arquivos no sistema Linux serão respeitadas pelo SAMBA. Dessa forma, devemos sempre adequá-las para ter acesso aos compartilhamentos do servidor. Agora vamos criar o compartilhamento adicionando uma seção ao final do smb.conf. Devemos informar o nome do compartilhamento e as opções de acesso:

[publico]
comment = pasta publica de arquivos
path = /mnt/publico
available = yes
writable = no
guest ok =yes
browseable = yes

Na linha 1 temos no nome do compartilhamento seguido de um comentário que identifica a sua finalidade. A opção path (linha 3) indica o caminho até a pasta  que se deseja compartilhar; a instrução available (linha 4) indica que o compartilhamento está ativado, porém, não será possível copiar ou excluir conteúdo para a mesma, pois trata-se de uma pasta somente destinada à leitura do seu conteúdo. Este comportamento é determinado pela opção writable (linha 5). Estamos informando, também, na linha 6, que este compartilhamento estará acessível para o usuário convidado. A linha 7 indica que este compartilhamento será acessível através do ambiente de rede dos clientes Windows.
 Após adicionar essas informações, deve-se salvar o arquivo de configuração do SAMBA. A alteração manual de parâmetros no arquivo de configuração é sempre suscetível a erros de digitação, assim, para verificar se as configurações inseridas no smb.conf estão corretas podemos utilizar o comando testparm:

# testparm

Load smb config files from /etc/samba/smb.conf
Processing section "[publico]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Caso nenhum erro seja exibido na tela e você receba como resultado da execução deste comando uma mensagem semelhante, é sinal que o compartilhamento está corretamente configurado. Após reiniciar o SAMBA, a pasta “publico” já estará disponível para os clientes Windows da rede local (Figura F6.1.6).

A opção de compartilhamento security = share (linha 5 da seção global) indica que as permissões de acesso deverão ser controladas diretamente por compartilhamento, política semelhante à utilizada por sistemas operacionais, como no Windows 98, onde se adicionava senhas individualmente aos compartilhamentos realizados. Podemos tornar os compartilhamentos do servidor mais seguros e configurá-lo para apenas permitir o acesso de usuários cadastrados previamente no servidor e fazer esta política valer para todos os compartilhamentos criados no servidor. Para tanto, é necessário alterar a instrução security na seção global:

security = user

Dessa forma, são sempre exigidos usuário e senhas válidas para acesso aos compartilhamentos do servidor. Para tanto, os usuários deverão ser cadastrados no SAMBA através do comando:

#smbpasswd –a nome_do_usuario

Após informar o usuário será solicitado o cadastro de uma senha para o mesmo. Caso você queira excluir um usuário basta trocar a opção “-a” por “-x”:

#smbpasswd –x nome_do_usuario

Ao reiniciar o serviço do SAMBA, você perceberá que ao tentar acessar o servidor,  será exibida uma tela solicitando autenticação (Figura F6.1.7):

Após a autenticação, além dos recursos compartilhados, você também perceberá que é exibida uma pasta com o nome do usuário. O nível de segurança user viabiliza o compartilhamento do diretório home dos usuários autenticados, permitindo que os mesmos tenham acesso aos seus arquivos pessoais ao acessarem o servidor (Figura F6.1.8).

O SAMBA permite programar políticas de acesso aos diretórios compartilhados baseados no login de usuários. Por exemplo, é possível restringir o acesso de pastas a apenas alguns usuários e utilizar a opção valid users:

[publico]
comment = pasta de arquivos
path = /mnt/publico
available = yes
writable = no
guest ok = yes
browseable = yes
valid users = alberto, bernardo

Além de especificar individualmente os usuários, também é possível especificar os grupos que terão acesso ao compartilhamento:

valid users = +desenvolvedores

Ou ambos:

valid users = +desenvolvedores, alberto, bernardo

Pode-se inverter a lógica e bloquear o compartilhamento a determinados usuários utilizando a opção invalid users:

[publico]
comment = pasta de arquivos
path = /mnt/publico
available = yes
writable = no
guest ok =Yes
browseable = yes
valid users = +desenvolvedores
invalid users = alberto, bernardo

Nesse caso, todos os usuários do grupo desenvolvedores terão acesso ao compartilhamento, menos os usuários especificados na opção invalid users.
Apesar de podermos controlar o acesso dos usuários desta forma, o indicado é criar os compartilhamentos com políticas mais restritivas, atribuindo a posse dos diretórios compartilhados a grupos de usuários específicos. As opções de acesso aos compartilhamentos do SAMBA não se sobrepõem às políticas de acesso às pastas locais do servidor. Vamos supor que os desenvolvedores de uma empresa queiram armazenar os seus programas em um diretório do servidor que seja compartilhado, exclusivamente, para o seu grupo de usuários. Nesse caso, após criar esta pasta:

#mkdir  /mnt/programas

E restringir o acesso ao mesmo, atribuindo a posse deste diretório a grupo desenvolvedores:

# chgrp  -R desenvolvedores  /mnt/programas
# chmod  -R  770  /mnt/programas

Dessa forma, apenas os usuários que pertencem ao grupo “desenvolvedores” poderão ter acesso aos arquivos do compartilhamento. Agora observe como esse compartilhamento é declarado no smb.conf.

[programas]
comment = pasta de arquivos
path = /mnt/programas
available = yes
writable = no
browseable = yes
valid users = +desenvolvedores
write list = alberto, bernardo

Nesse exemplo, restringem-se ainda mais o acesso aos arquivos armazenados neste diretório. Com a opção write list em conjunto com a opção “writable = no” estamos informando que apesar de todos os usuários do grupo de desenvolvedores terem acesso ao compartilhamento apenas os usuários especificados poderão realizar alterações nos arquivos armazenados no mesmo.

Assim como no exemplo anterior, podemos inverter a lógica utilizando a opção read list

[programas]
comment = pasta de arquivos
path = /mnt/programas
available = yes
writable = yes
valid users = +desenvolvedores
read list = alberto, bernardo

Nesse caso, todos os usuários podem tem acesso de leitura e escrita e apenas os usuários especificados têm permissão somente de leitura neste diretório.

O SAMBA também permite realizar restrições com base no endereço IP dos clientes de rede, através da cláusula hosts allow:

[programas]
comment = pasta de arquivos
path = /mnt/programas
available = yes
writable = yes
valid users = +desenvolvedores
browseable = yes
read list = alberto, bernardo
hosts allow = 192.168.1.10, 192.168.1.20

Dessa forma, apenas os clientes com os IPs especificados nesta cláusula terão acesso ao compartilhamento. Também é possível criar compartilhamentos para um intervalo de endereços IP:

hosts allow = 192.168.1.

Omitindo o valor do último octeto do endereço IP, estamos compartilhando esta pasta para todos os clientes desta sub-rede.
Invertendo mais uma vez a lógica, é possível restringir o acesso a determinados endereços IP utilizando a instrução hosts deny:

hosts allow = 192.168.1.30

Um recurso interessante é a instrução copy, que permite que novos compartilhamentos herdem as especificações de compartilhamentos já existentes. Vamos supor que você precise compartilhar a pasta /mnt/projetos com as mesmas características da pasta /mnt/programas. Utilizando  a instrução copy bastaria adicionar as seguintes linhas no arquivo de configuração:

[projetos]
comment = pasta de arquivos
path = /mnt/projetos
copy = programas

A instrução copy indica que todas as instruções do compartilhamento anterior serão herdadas pelo novo compartilhamento. Vale ressaltar que se alguma instrução já existente no compartilhamento anterior for novamente declarada nesse compartilhamento, o valor da última instrução irá se sobrepor ao da instrução herdada.

Como se sabe, os arquivos com o nome por iniciados pontos são considerados ocultos. Se quisermos que arquivos ocultos não sejam exibidos neste compartilhamento, podemos inserir a opção hide dot files:

[programas]
comment = pasta de arquivos
path = /mnt/programas
copy = programas
hide dot files = yes

Finalizando, o SAMBA também disponibiliza um utilitário que permite verificar os usuários que estão acessando os compartilhamentos do servidor chamado smbstatus. Para executá-lo basta chamá-lo no terminal como root:

#smbstatus

O SAMBA possui uma infinidade de opções de compartilhamento, o que o torna muito mais minucioso e preciso que o próprio Windows. Na documentação página SAMBA você pode obter mais informações sobre as opções de compartilhamento. No material de apoio você encontrará um vídeo que demonstra a configuração de compartilhamentos no servidor SAMBA.

Nesta unidade, optamos por mostrar a configuração manual dos compartilhamentos a partir do arquivo de configuração do SAMBA, entretanto, você pode optar por utilizar aplicativos gráficos para auxiliar nesta tarefa. Um dos mais conhecidos é o SWAT (Samba Web Administration Tool). Para instalá-lo no Debian/Linux utiliza-se o comando:

#apt-get install swat

A sua administração é realizada através de uma interface web que pode ser acessada localmente através da porta de comunicação 901. Após inserir a URL o http://localhost:901 na barra de endereços do navegador deverá ser exibida uma caixa de diálogo solicitando login, como apresentada na F6.1.9. Nessa operação, deverá ser informado o usuário root e sua respectiva senha.

Após a autenticação, é exibida a página de administração do SWAT composta por ícones e links como na F6.1.10. Praticamente toda a administração do servidor pode ser realizada através desta ferramenta, que é bastante intuitiva. No ícone “Globals” você pode realizar as configurações da seção [global]. Em “Shares” e “Printers” criar e administrar compartilhamentos de diretórios e impressoras respectivamente. Na opção “Status” é possível gerenciar o serviço do SAMBA (iniciar, parar, reiniciar).

Apesar da comprovada eficácia do SWAT, é sempre interessante verificar as alterações  desta ferramenta, editando smb.conf e conferindo se as mudanças solicitadas foram realizadas corretamente.