Nos clientes Linux, a forma mais prática de acessar os compartilhamentos
do Samba é utilizar clientes gráficos como o Smb4K e o módulo smb:/ do
Konqueror. Apesar disso, o Samba possui também um cliente de modo texto,
o smbclient e é possível também montar os compartilhamentos,
funcionalidade que equivale à opção "mapear unidade de rede" disponível
nos clientes Windows.
É possível também fazer com que os compartilhamentos sejam montados
automaticamente durante o boot, adicionando as entradas apropriadas no
arquivo "/etc/fstab". Desta forma, os compartilhamentos são montados
automaticamente durante o boot e ficam acessíveis de forma permanente
nas pastas especificadas por você. Esta é uma opção interessante em
muitos ambientes, já que é mais fácil para os usuários simplesmente
acessarem os arquivos através de uma pasta, do que terem que montar o
compartilhamento usando o Smb4K.
O primeiro passo é aprender a sintaxe da montagem dos
compartilhamentos via linha de comando, já que as entradas do fstab
utilizam os mesmos argumentos.
Começando do básico, você pode listar os compartilhamentos disponíveis em um servidor da rede usando o comando:
$ smbclient -L 192.168.1.254 -U gdh
Veja que o comando especifica o endereço do servidor (você pode usar
também o nome na rede Windows) e a conta de usuário que será usado para
abrir a conexão. Depois de fornecer a senha, você obtém uma lista dos
compartilhamentos disponíveis, como em:
E230 Printer
print$ Disk Drivers de impress_o para os clientes Windows
arquivos Disk
projetos Disk
backup Disk
IPC$ IPC IPC Service (Samba PDC)
O exemplo mais simples para montar um dos compartilhamentos via linha de comando seria:
# mount -t smbfs //servidor/arquivos /mnt/smb
Aqui, estou montando o compartilhamento "arquivos" na pasta
"/mnt/smb" (que deve ser previamente criada usando o comando mkdir). O
"servidor" pode tanto ser o nome da máquina, dentro da rede Windows,
quanto seu endereço IP. Como em outros comandos de montagem, você
precisa executar o comando como root.
O comando mount é um dos comandos mais tradicionais do Linux, que permite "mapear" um diretório qualquer dentro d
e
outro diretório do sistema. A opção "-t" serve para especificar o
sistema de arquivos, neste caso o "smbfs", usado para acessar
compartilhamentos Windows. Note que a localização do compartilhamento é
fornecida numa sintaxe muito similar à que usaríamos para mapear um
compartilhamento no Windows, com a sintaxe "barra barra servidor barra
compartilhamento". A única diferença é que aqui usamos barras "normais"
ao invés de barras invertidas. :)
Só para efeito de comparação, ao mapear o mesmo compartilhamento numa máquina Windows, teríamos:
O problema com o comando acima é que ele só funciona realmente ao
montar compartilhamentos do Windows 98/ME, que não possuem senhas. No
Windows 2000/XP/Vista (com exceção das estações com o simple sharing
ativado), você vai receber uma mensagem de acesso negado, já que neles
você precisa se autenticar para obter acesso aos compartilhamentos. Para
isso, é necessário incluir a opção "-o username=usuario" (tudo junto,
sem espaços), especificando o login que será usado, como em:
# mount -t smbfs //servidor/arquivos /mnt/smb -o username=gdh
É possível também especificar a senha diretamente no comando, o que permite usar o comando em scripts:
# mount -t smbfs //servidor/arquivos /mnt/smb -o username=gdh,password=1234
Depois de montado o compartilhamento, os arquivos podem ser acessados
normalmente, usando o Konqueror, Nautilus ou outro gerenciador de
arquivos. É muito similar ao acessar uma compartilhamento mapeado no
Windows, a principal diferença é que você define uma pasta onde ele será
montado, ao invés de acessá-lo através de uma letra, como "E:" ou "Z:".
Uma peculiaridade do mount é que os arquivos dentro da pasta montada
passarão por padrão a ser propriedade do root. Isso não altera as
permissões de acesso dos arquivos no servidor (a mudança é apenas
local), mas impede que seu login de usuário consiga alterar os arquivos,
mesmo que as permissões de acesso do Samba digam o contrário.
Para evitar isso é necessário adicionar a opção "uid=", especificando o login de usuário (na máquina local) correto, como em:
# mount -t smbfs //servidor/arquivos /mnt/smb -o username=gdh,password=1234,uid=gdh
A opção "uid=" é interpretada localmente. O login especificado não é
repassado ao servidor Samba, de forma que você pode usar qualquer conta
de usuário local. Ele serve apenas para corrigir as permissões de
acesso, de forma que você possa alterar os arquivos normalmente usando
seu login de usuário.
O passo seguinte é tornar a montagem permanente, já que, usando o comando mount, ela é perdida ao reiniciar o micro.
Para isso, inserimos uma nova linha no final do arquivo "
/etc/fstab".
A ordem dos parâmetros fica um pouco diferente, mas você notará que os
parâmetros continuam os mesmos que usamos no comando anterior:
//servidor/arquivos /mnt/smb smbfs username=gdh,password=1234,uid=gdh 0 0
Caso necessário, você pode também indicar o grupo, junto com o usuário local, usando a opção "gid=", como em:
//servidor/arquivos /mnt/smb smbfs username=gdh,password=1234,uid=gdh,gid=users 0 0
O fstab é um dos principais arquivos de configuração, por isso é sempre
importante ter cuidado ao editá-lo. Apenas adicione a nova linha, sem
alterar as anteriores e lembre-se sempre de deixar uma linha em branco
no final do arquivo.
Um parâmetro útil que pode ser incluído é a opção "users"
que permite que você consiga montar e desmontar o compartilhamento
usando seu login de usuário, sem precisar usar a conta de root. Para
isso, adicione o parâmetro "user", antes do "username=" (sem espaços),
como em:
//servidor/arquivos /mnt/smb smbfs users,username=gdh,password=1234,uid=gdh 0 0
A montagem e desmontagem neste caso é feita indicando apenas o
diretório, como em "umount /mnt/smb" e "mount /mnt/smb". A principal
observação é que o smbmnt só aceita fazer a montagem em uma pasta de
propriedade do usuário, por isso é necessário ajustar as permissões da
pasta usando o comando chown, como em:
# chown gdh.gdh /mnt/smb
O "0 0" incluído sempre no final da linha é um parâmetro passado
sistema, que diz que ele não deve verificar o sistema de arquivos usando
o fsck durante a inicialização, já que aqui estamos montando um
compartilhamento de rede e não uma partição.
Embora não seja muito recomendável do ponto de vista da segurança,
também é possível escancarar as permissões, fazendo com que qualquer
usuário logado no cliente Linux tenha acesso completo a todos os
arquivos. Para isso, você usaria o parâmetro
"smbpasswd,fmask=777,dmask=777", como em
//servidor/arquivos /mnt/smb smbfs users,username=gdh,password=1234
smbpasswd,fmask=777,dmask=777 0 0
(tudo em uma única linha)
Como estamos adicionando as senhas dos compartilhamentos dentro do
arquivo, também é fortemente recomendável manter as permissões de
leitura do arquivo em "600", de forma que apenas o root tenha permissão
para ver seu conteúdo. Para isso, use o comando:
# chmod 600 /etc/fstab
É possível montar diversos compartilhamentos, adicionando uma linha
para cada um. Não existe limitação para o número máximo de
compartilhamentos que podem ser adicionados, mas você deve ter cuidado
de adicionar apenas compartilhamentos de servidores que fiquem ligados
continuamente. Se o servidor estiver desligado durante o boot da
estação, o boot do cliente vai demorar muito mais que o normal e o
usuário verá o erro relacionado à montagem do compartilhamento, o que
não é muito elegante, nem muito bom para sua reputação como
administrador. :)
Nos exemplos anteriores, especificamos as senhas de montagem dos
compartilhamentos diretamente no arquivo "/etc/fstab". Mesmo protegendo o
arquivo com o "chmod 600", muita gente afirma que isso é um problema
grave de segurança, já que alguém que conseguisse obter acesso ao
arquivo, obteria automaticamente as senhas dos compartilhamentos.
Uma opção é usar um arquivo externo para armazenar as senhas. Ele
pode ser armazenado tanto dentro do diretório /home/root, quanto dentro
do home do usuário do sistema que tem acesso ao compartilhamento. Você
pode também usar diversos arquivos de senha, um para cada
compartilhamento que precisa ser montado.
Para criar os arquivos de senha, use os três comandos abaixo, ainda como root:
# echo "username=gdh" > /home/gdh/.smbpasswd
# echo "password=1234" >> /home/gdh/.smbpasswd
# chmod 600 /home/gdh/.smbpasswd
Usado desta forma, o comando echo permite criar arquivos de texto e
adicionar novas linhas. O primeiro comando cria o arquivo, adicionando a
linha com o nome do usuário, enquanto o segundo adiciona a linha com a
senha. Se por acaso o arquivo já existir, ele é subscrito.
Como o arquivo foi criado pelo root, o comando "chmod 600" usado no
final faz com que, mesmo colocado dentro do home do usuário "joao",
apenas o root tenha acesso ao arquivo, evitando acidentes.
Você pode também criar o arquivo usando um editor de textos qualquer e
ajustar as permissões manualmente. Neste caso, bastaria adicionar as
duas linhas:
username=gdh
password=1234
Com o arquivo criado, você pode modificar a(s) linha(s) no fstab,
especificando a localização do arquivo, ao invés de colocar o usuário e
senha diretamente, como em:
//servidor/arquivos /mnt/smb smbfs users,credentials=/home/gdh/.smbpasswd 0 0
ou:
//servidor/arquivos /mnt/smb smbfs users,credentials=/home/gdh/.smbpasswd
smbpasswd,uid=gdh,gid=gdh 0 0
(tudo em uma única linha)
Ao montar vários compartilhamentos, que são acessados usando o mesmo
login e senha, você pode especificar o mesmo arquivo em todas as linhas,
mas, no caso de diversos compartilhamentos, montados usando credenciais
diferentes, você deve criar arquivos separados para cada um e
especificar o arquivo correto dentro da linha de montagem de cada
compartilhamento.
Você pode criar quantos arquivos de senha diferentes quiser, mas cada arquivo deve conter um único usuário e senha.