Instalar serviço NFS no Debian (Wheezy Debian 7.0)

Publicado: 21/03/2014 em Linux, Serviços IP
Tags:

1. Introdução
Network File System (NFS) é um sistema de arquivos distribuídos desenvolvido inicialmente pela Sun Microsystems Inc. desde 1984, com o objetivo de compartilhar arquivos e diretórios entre computadores conectados em rede, formando assim um diretório virtual. A função do NFS é permitir que de forma transparente diretórios possam ser usados via rede, utilizando o modelo cliente/servidor onde uma máquina disponibiliza um diretório via rede e as outras recebem e montam este diretório em sua árvore de diretórios local.

O NFS segue o modelo computacional cliente/servidor. O servidor implementa o sistema de arquivos e o armazenamento compartilhado aos quais os clientes se conectam. É simples e fácil de configurar, tanto o servidor como o cliente, de uma rede baseada em NFS.

Vejamos alguns benefícios que o NFS pode oferecer:

  • estações locais usam menos espaço em disco porque dados frequentemente usados podem ser armazenados em uma única máquina e ainda permanecerem acessíveis a outras pela rede.
  • não há necessidade de usuários terem diretórios pessoais separados em cada máquina da rede. Diretórios pessoais podem ser configurados no servidor NFS e serem disponibilizados através da rede.
  • dispositivos de armazenamento como leitores de CD-ROM e drives USB podem ser usados por outras máquinas na rede, reduzindo o número de leitores de mídia removível em toda a rede e centralizando o controle de mídias.

O protocolo NFS reside na camada de aplicação do modelo TCP/IP. As funcionalidades do NFS no Linux são implementadas em nível kernel, onde o VFS (sistema de arquivo virtual) está integrado no kernel.

2. Máquina servidora
Na prática é o computador que conterá a pasta que será compartilhada com os outros micros da rede.

2.1 Instalar o servidor NFS
O pacote “nfs-kernel-server” é o servidor “Network File System” (NFS) do “kernel” recomendado para uso com o Linux. É o pacote recomendado aos administradores que desejam instalar um servidor NFS.

No Debian Wheezy:
# apt-get install nfs-kernel-server

No Debian Squeezy:
# apt-get install nfs-kernel-server portmap

Observações quanto ao portmap:
a) Até a versão Debian Squeezy (Debian 6.0), o serviço de mapeamento de portas era realizado pelo pacote portmap. A partir do Debian Wheezy (Debian 7.0) este serviço ficou obsoleto, sendo sucedido pelo “rpcbind” (rpcbind é um servidor que converte números de programa RPC em endereços universais).

b) O NFS é um serviço que utiliza RPC (“Remote Procedure Call” – Chamada de Procedimento Remoto), necessitando da tradução de número de programas RPC para endereços universais (UDP/TCP) através de um mapeador de porta. Fundamentalmente esta mudança deveu-se ao fato do portmap não suportar IPv6 e o rpcbind ser uma alternativa ao portmap que provê este suporte. No Wheezy o rpcbind já vem instalado junto com o kernel por padrão, e não há necessidade de maiores preocupações. Observe:

https://packages.debian.org/search?keywords=portmap
Package portmap
    squeeze (oldstable) (net): mapeador de portas RPC
    6.0.0-2: amd64 armel i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
    also provided by: rpcbind
    wheezy (stable): Virtual package
    provided by: rpcbind 

c) No Debian Squeezy, a verificação da instalação do portmap poderia ser feita facilmente das seguintes formas:
$ ls -la /sbin/portmap
-rwxr-xr-x 1 root root 16840 Fev 24 2010 /sbin/portmap

$ apt-cache policy portmap
portmap:
Instalado: 6.0.0-2
Candidato: 6.0.0-2

$ ps -A | grep portmap
746 ? 00:00:00 portmap

d) Tanto do Debian Squeeze como Wheezy, para verificar se o serviço RPC está ativo fazer:

$ rpcinfo -p
   programa vers protocolo   porta  servico
    100000    4   tcp         111  portmapper
    100000    3   tcp         111  portmapper
    100000    2   tcp         111  portmapper
    100000    4   udp         111  portmapper
    100000    3   udp         111  portmapper
    100000    2   udp         111  portmapper
    100024    1   udp        56369  status
    100024    1   tcp        50822  status

2.2 Verificar a instalação do nfs-kernel-server
Uma verificação simples é saber se o arquivo /etc/exports fora criado. Inicialmente seu conteúdo é de apenas alguns comentários orientativos, mas sem conteúdos válidos. Isto fará com que o daemon NFS do kernel ainda não esteja iniciado.

Outras verificações:
a) Verificar se foi instalado o nfs-kernel-server
$ apt-cache policy nfs-kernel-server
nfs-kernel-server:
Instalado: 1:1.2.6-4
Candidato: 1:1.2.6-4

b) Verificar se o kernel tem suporte ao NFS
$ cat /proc/filesystems | grep -E 'nfs|rpc'
nodev rpc_pipefs
nodev nfs
nodev nfs4
nodev nfsd

2.3 Configurar o servidor NFS
A configuração do servidor NFS é relativamente simples: através do arquivo /etc/exports configuramos os diretórios que serão exportados, para quais redes e com quais opções. Vejamos como fazer isto:
a) Editar o arquivo /etc/exports e editar as configurações de preferências
/caminho/pasta_compartilhada host1(regraA, ... regraN) host2(regraD, ... regraX)

Exemplo:
Na hipótese de existir dois usuários na máquina do servidor, jose (uid=1001 e gid=1001) e maria (uid=1000 e gid=1000), poderíamos ter a seguinte configuração:
/home/jose \
192.168.1.102(rw,no_subtree_check,all_squash,anonuid=1001,anongid=1001) \
192.168.1.103(ro,no_subtree_check,all_squash)
/home/maria \
192.168.1.102(rw,no_subtree_check,all_squash,anonuid=1000,anongid=1000)

Vejamos algumas explicações para configuração ilustrada acima:
– sobre o diretório /home/jose, os hosts 192.168.1.102 e 192.168.1.103 podem montar este diretório;
– sobre o diretório /home/maria, apenas o host 192.168.1.102 pode montar este diretório;
– todas as requisições oriundas do host 192.168.1.102 terão permissões de não root (all_squash, o que é mais seguro);
– todas as operações sobre a pasta /home/jose dos usuários oriundos do host 192.168.1.102 serão mapeadas para o ID e GID do usuário do servidor jose (1001).
– todas as operações sobre a pasta /home/maria dos usuários oriundos do host 192.168.1.102 serão mapeadas para o ID e GID da usuária do servidor maria (1000).

Outras possíveis configurações (cuidado com a segurança):
home/jose \
192.168.1.0/24(rw,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
home/jose \
*(rw,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
home/jose \
192.168.1.0/255.255.255.0(rw,no_subtree_check,all_squash,anonuid=1001,anongid=1001)

Obs:
– para saber mais sobre as possíveis configurações no arquivo exports, veja o manual através do comando:
$ man exports
– a opção all_squash significa: mapear todos os UIDs e GIDs para o usuário anônimo. Útil para diretórios de FTP públicos exportados por NFS, spool de diretórios notícias, etc. Com a configuração all_squash, um usuário cliente qualquer do serviço NFS, mesmo que seja usuário que contenha UID root e GID root, será mapeado para usuário anônimo (“nobody”). Ista é uma configuração recomendável de ser feita, POR SEGURANÇA.

b) Exportar a configuração e iniciar o servidor NFS
# exportfs -var
# /etc/init.d/nfs-kernel-server start

2.4 Verificar se o serviço de NFS está ativo:

$  ps -A | grep nfsd
   11382 ?        00:00:00 nfsd4
   11383 ?        00:00:00 nfsd4_callbacks
   11384 ?        00:00:00 nfsd
   11385 ?        00:00:00 nfsd
   11386 ?        00:00:00 nfsd
   11387 ?        00:00:00 nfsd
   11388 ?        00:00:00 nfsd
   11389 ?        00:00:00 nfsd
   11390 ?        00:00:00 nfsd
   11391 ?        00:00:00 nfsd

Obs: nfsd – daemon NFS, que atende requisições dos clientes NFS.

2.5 Verificar a lista de pastas que estão sendo exportadas:
O comando showmount lista os diretórios NFS exportados por um determinado host e quais clientes podem montar os diretórios.
# showmount -e
# showmount --export localhost

3. Máquina cliente
3.1 Instalar o serviço NFS cliente
No Debian Wheezy:
# apt-get install nfs-common

No Debian Squeezy:
# apt-get install nfs-common portmap

3.2 Verificar se o cliente de NFS está ativo
$ ps -A | grep nfs
4656 ? 00:00:00 nfsiod

3.3 Criar ponto de montagem
Antes de um usuário usar um diretório NFS, é necessário anexar os diretórios exportados pelo servidor ao sistema de arquivos locais. Volumes NFS podem ser montados diretamente por linhas de comando através do “mount”.

mkdir /caminho/ponto_montagem
mount -vt nfs IP-server:/caminho/pasta_compartilhada /caminho/ponto_montagem

Exemplo:
# mkdir -p /mnt/remoto/jose /mnt/remoto/maria
# mount -vt nfs 192.168.1.104:/home/jose /mnt/remoto/jose
# mount -vt nfs 192.168.1.104:/home/maria /mnt/remoto/maria

Quando destes comandos mount, a máquina servidora (192.168.1.104) irá verificar se o host cliente tem permissão para acessar os dados daquele diretório, e caso tenha (isto deverá estar especificado no arquivo /etc/exports do servidor), retorna um descritor de arquivos para a máquina cliente.

Ao final da utilização, pode-se desmontar o compartilhamento:
# umount /mnt/remoto/jose /mnt/remoto/maria

3.4 Verificar os filesystems tipo NFS montados
$ mount -lt nfs
192.168.1.104:/home/maria on /mnt/remoto/maria type nfs(rw,vers=4,addr=192.168.1.104,clientaddr=192.168.1.102)
192.168.1.104:/home/jose on /mnt/remoto/jose type nfs (ro,vers=4,addr=192.168.1.104,clientaddr=192.168.1.102)

3.5 Montar volumes NFS automaticamente em tempo de boot da máquina
É mais usual para clientes montar volumes NFS automaticamente em tempo de iniciação da máquina. Volumes NFS podem ser especificados como qualquer outro em /etc/fstab.

Exemplos de especificação de volumes NFS em /etc/fstab:
# Volumes NFS
192.168.1.104:/home/maria /mnt/remoto/maria nfs rw,rsize=4096,wsize=4096,hard,intr,async,nodev,nosuid 0 0
192.168.1.104:/home/jose /mnt/remoto/jose nfs ro,rsize=8192,hard,intr,nfsvers=3,tcp,noatime,nodev,async 0 0

Para fazer o Linux montar todos os sistemas de arquivos listados em /etc/fstab:
# mount -a

4. Aprendendo um pouco mais
4.1 Arquivo /etc/exports
O arquivo /etc/exports contém uma lista de locais físicos que são acessíveis pelos clientes NFS. Cada entrada nesta tabela possui um conjunto de opções e regras de controle de acesso. A tabela é utilizada pelo comando exportfs, que monta uma tabela master em /var/lib/nfs/etab. Ou seja, a tabela master é inicializada com o conteúdo do arquivo /etc/exports através do comando “exportfs -a”. Esta tabela master é linda através de rpc.mountd quando um cliente envia uma solicitação de NFS MOUNT.
Mais detalhes em:
$ man exportfs

4.2 Portas do NFS
Os deamons que processam as solicitações NFS no servidor não têm números de porta UDP padrão. Ao invés disto, a eles são atribuídos dinamicamente um número de porta pelo portmapper do RPC. O portmapper é um serviço que converte chamadas RPC em número de portas de rede. Assim, quando um servidor RPC é iniciado ele abre a porta 111 (porta padrão definida em /etc/services), que é o padrão de um portmapper. Quando um cliente utiliza um serviço RPC ele contata o portmapper e descobre qual é a porta atribuida ao serviço desejado. Para ver o número de portas que o portmapper atribui aos programas, utilizar o comando:

$ rpcinfo -p
   programa versão protocolo   porta
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  56369  status
    100024    1   tcp  50822  status
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049
    100227    3   tcp   2049
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049
    100227    3   udp   2049
    100021    1   udp  42358  nlockmgr
    100021    3   udp  42358  nlockmgr
    100021    4   udp  42358  nlockmgr
    100021    1   tcp  41453  nlockmgr
    100021    3   tcp  41453  nlockmgr
    100021    4   tcp  41453  nlockmgr
    100005    1   udp  53390  mountd
    100005    1   tcp  49764  mountd
    100005    2   udp  33681  mountd
    100005    2   tcp  40913  mountd
    100005    3   udp  52128  mountd
    100005    3   tcp  58555  mountd

OBS:
mountd – daemon mount que processa as solicitações de montagem de sistema de arquivos do clientes.
nlockmgr – gerenciador de bloqueios NFS que manipula solicitações de bloqueio de arquivos de clientes.

Referências:
1- Como configurar o NFS ?
2- Network File System (NFS) Server and Client Configuration in Debian

Anúncios
comentários
  1. AntonioDoralino disse:

    Muito bom amigo excelente tutorial

  2. André disse:

    Ola, primeiramente parabéns pela matéria, o conteúdo é bem esclarecedor, agora estou tendo um problema com o NFS em um Cluster Beowulf que estou montando no Debian Jessie 8.2 quando vou montar o NFS com o comando mount -a da esse erro:
    # mount.nfs:
    Connection timed out.
    ontem chegou a funcionar mas agora voltou o erro de antes, e não monta mais.

  3. Eduardo disse:

    Muito bom !!! Ja tinha tentado outros sites, blogs .. mas sua orientação foi precisa e muito didática. Valeu e até a próxima.

  4. Bruno disse:

    ótima dica amigo obrigado me ajudou muito .

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s