Compartilhamento de arquivos entre máquinas Linux com NFS

Quando se fala em compartilhar arquivos a primeira ferramentas que vem a mente dos mais afoitos é o Samba, que implementa os protocolos SMB e CIFS simulando assim uma rede Windows. Mas se nós tivermos a intenção de compartilhar arquivos apenas entre estações Linux apenas um módulo NFS rodando diretamente sob o Kernel é o bastante.

Não há necessidade de se configurar um servidor Samba para compartilhar arquivos entre máquinas puramente Linux. O tempo em que o protocolo existe na estrada é o bastante para testemunhar por si e portanto dispensa maiores comentários.

O NFS implementa um sistema de arquivos em rede que embora não seja a perfeição dos sistemas de compartilhamento é bem simples de se implementar e em apenas poucos minutos você poderá compartilhar arquivos entre suas máquinas.

Por que compartilhar?

Basicamente, porque assim você não precisa usar um pendrive para copiar um arquivo de uma maquina para outra que está na mesa ao lado.

Você pode centralizar os seus arquivos em um único local o que facilitará bastante o seu trabalho de fazer backups, procurar arquivos etc.

Digamos que você tenha um computador Desktop e um notebook (ambos com Linux), você poderia manter seus arquivos de músicas no Desktop e o Notebook você as acessaria via compartilhamento de rede.

Usando um compartilhamento como o NFS, você ainda poderá usar praticamente todos os atributos e propriedades dos sistemas de arquivos existentes no Linux.

Instalação dos pacotes

A instalação se resume a instalar somente os pacotes nfs-kernel-server e portmap. Em sistemas Debian Like, tal como o Ubuntu, a linha de comandos abaixo resolveria o problema:

sudo aptitude install nfs-kernel-server portmap

Uma vez que estes pacotes estejam instalados você poderá configurar os seus compartilhamentos.

Configurando o portmap

Portmap é um servidor que converte os números de processos RPC, tais como as geradas pelo NFS e NIS em números de portas do protocolo DARPA (TCP/IP ou UDP/IP). Para mais informações sobre ele recomendo os links [1] [2] [3] e [4]. Este último, o site oficial do projeto.

Basicamente duas tarefas simples que são (1) permitir a conexão via máquinas na rede e (2) limitar quais máquinas podem acessar o serviço

Permitindo conexões ao portmapper

Edite o arquivo /etc/default/portmap e certifique-se que a linha abaixo esteja comentada:

OPTIONS="-i 127.0.0.1"

Basta colocar um “#” na frente, deixando-a como está abaixo para comenta-la.

#OPTIONS="-i 127.0.0.1"

Se isto não for feito o portmap apenas escutará requisições RPC da própria máquina e você terá problemas para se conectar ao NFS.

Limitando as máquinas que podem acessar os compartilhamentos

O Portmapper é um serviço que roda sem qualquer tipo de autenticação, então se você tem uma rede muito promiscua é bom ficar alerta e não pular esta etapa.

Edite o arquivo /etc/hosts.allow e inclua a seguinte linha:

portmap: <Faixa de endereço IP das estações>

Por exemplo a minha rede doméstica tem a faixa de IPs 192.168.254.0/24 então eu coloco a seguinte linha neste arquivo:

portmap: 192.168.254.

Perceba que não informei o último octeto da faixa de endereço IP. Isso seria o mesmo que indicar a faixa de endereços na notação padrão (que também poderia ser usada).

Desta forma qualquer máquina da minha rede poderá fazer requisições ao Portmapper, mas vale enfatizar que isto não significa que poderão acessar algum compartilhamento, OK? Tal permissão será dada individualmente a cada compartilhamento

Para mais informações sobre como configurar o /etc/hosts.allow consulte a sua página de manual (man hosts.allow).

Feitas as alterações reinicie o serviço do Portmapper com a linha de comandos abaixo:

sudo invoke-rc.d portmap restart

Configurando o(s) compartilhamento(s)

Para configurar um compartilhamento nós devemos escolher/criar um diretório a ser exportado e então informar seu caminho e as permissões de acesso no arquivo /etc/exports

Suponhamos então que tenha um diretório em /srv/Musicas no meu computador e queira exportá-lo para minha rede.

A primeira coisa a ser feita é editar o arquivo /etc/exports acrescentar uma linha descrevendo “ONDE” “QUEM” (“COMO”). No nosso exemplo a seguinte linha é suficiente:

/srv/Musicas 192.168.254.0/24 (rw,no_all_squash)

Esta linha define que o diretório /srv/Musicas poderá ser exportado para todas as estações da minha rede, em modo Read Write (rw) e nenhum usuário deve ser mapeado para “anônimo”, o que significa que todos os arquivos serão gravados com propriedade e grupo originais, ao invés de gravados como anônimo.

Se quisermos exportar o diretório para apenas duas máquinas da rede, poderios fazer assim:

/srv/Musicas 192.168.254.20 (rw,no_all_squash) 192.168.254.30 (ro,no_all_squash)

Desta maneira apenas as duas máquinas informadas terão permissão de acessar o compartilhamento, mas observe que no exemplo eu defini que a segunda máquina não poderá gravar nada (Read Only – ro).

Você pode configurar quantos diretórios desejar dando as permissões necessárias para cada máquina (lembre-se que as permissões são por máquina e não por usuários).

Caso tenha dúvidas quanto aos parâmetros uma olhada no manual do arquivo /etc/exports pode ajudar (man exports).

Feito isto podemos informar ao daemon do NFS que a lista de diretórios a serem exportados deve ser atualizada.

sudo exportfs -ra
sudo exportfs -v

As duas linhas acima, respectivamente atualiza a lista de diretórios exportados; e mostra quais são eles (use este último comando sempre que quiser saber quais diretórios estão configurados).

Acessando o compartilhamento a partir dos clientes

Uma vez que o servidor esteja configurado, acessá-los é bem simples e resume-se a montar o diretório em um ponto de montagem (tal como fazemos com pendrivers, cd, dvds e outras mídias).

A diferença fica por conta do tipo do sistema de arquivos e a informação do servidor onde está o diretório, como se pode ver no exemplo abaixo em que o diretório exportado é montado via linha de comandos:

sudo mount 192.168.254.10:/srv/Musicas /srv/Musicas

Desta forma o comando mount está mapeando o diretório /srv/Musicas do servidor (IP 192.168.254.10) na pasta /srv/Musicas.

Se considermos que eu tenha digitado este comando no meu notebook, ao acessar a pasta /srv/Musicas, na verdade eu estaria vendo o conteúdo daquela pasta no desktop.

Para desmontar bastaria usar o comando umount da forma comumente usada:

sudo umount /srv/Musicas

Montagem automática nos clientes

Para que o compartilhamento seja montado todas as vezes que o notebook for ligado, basta editar o arquivo /etc/fstab e acrescentar a seguinte linha:

192.168.254.10:/srv/Musicas /srv/Musicas nfs soft,defaults 0 0

Desta forma não será mais necessário usar o comando mount manualmente.

Atente para o parâmetro “soft” que faz com que a montagem falhe caso o servidor esteja fora do ar. Caso ele não seja definido e o servidor esteja desligado sua máquina poderá ficar alguns minutos perdida durante a tentativa de montar o compartilhamento, no momento de boot.

Últimos avisos e finalizando

O exemplo que deixei foi o básico e deve funcionar sem grandes problemas na maioria das situações. Mas existem muitas opções a serem exploradas e que poderão ser usadas para adequá-lo as suas necessidades.

Caso algo falhe, esteja atento as permissões da pasta veja as mensagens de erro e não esqueça dos registros do /var/log/syslog.  Uma lida nos links abaixo e nas páginas de manuais também poderá ajudar a sanar boa parte das dúvidas, mas se ainda persistir é só deixar um comentário.

Referências

[1] Wikipedia. Portmap. Disponível em <http://en.wikipedia.org/wiki/Portmap>.

[2] Redhat. Protegendo o Portmap in RHEL 4: Guia de segurança. Disponível em <http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-pt_br-4/s1-server-port.html>.

[3] Kukuk, Thorsten. O Portmapper RPC in O How-To oficial do NIS (yp) do Linux Documentation Project. Tradução de Strube, Alexandre. Disponível em <http://www.surak.eti.br/nis-HOWTO/portmapper.html>.

[4] Brown, Neil. Portmap. disponível em <http://neil.brown.name/portmap/>

Alexandre Otto Strube

6 thoughts on “Compartilhamento de arquivos entre máquinas Linux com NFS”

  1. Gostaria de saber como fazer para compartilhar o diretório raiz “/ “, quando tento compartilha-lo o sistema me traz uma mensagem de acesso negado.

    O objetivo dessa manobra é para fazer o antivirus funcionar nos mapeamentos da rede.

  2. Olá @Rammy

    Acabei de fazer um teste usando o Debian Squeeze e não tive dificuldades para compartilhar o diretório “/” de uma máquina para outra.

    No /etc/exports do servidor (a que tem o diretório a ser compartilhado) eu declarei o diretório “/” normalmente, como era de se esperar:
    / ip.meu.cliente(rw,no_all_squash)

    E então atualizar as novas configurações com exportfs -ra

    Pra não dizer que não vi qualquer mensagem de erro no processo, a que vi (apenas ao executar o exportfs) foi na verdade um alerta referente ao parâmetro subtree_check, mas que não interferiu em nada na montagem que ocorreu com sucesso.

    Após montar o diretório na estação cliente o diretório / da outra máquina estava prontamente disponível:
    mount ip.meu.servidor:/ /mnt/raizserver

    Certifique-se de que você esteja executando todos os comandos com privilégios administrativos (usuário root) ou precedendo os comandos com “sudo” (mas neste último caso certifique-se que o seu usuário tenha privilégios no sudoers).

    abç.

  3. Cara, muito bom o tutorial penei para achar algo assim para solucionar a questão de compartilhamentos entre estações linux, vou testar e se funcionar retornarei.

    Valeu, e que a força esteja com vc 🙂

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *