12.1. Como configurar o NFS ?

O NFS é um serviço de rede que usa RPC (Chamada de Procedimento Remoto), e que permite o compartilhamento de arquivos e diretórios. É simples e fácil de configurar, tanto o servidor como o cliente, de uma rede baseada em NFS. O NFS é uma ferramenta poderosa, é a mais usada/indicada para montar uma rede de compartilhamento de arquivos em redes com máquinas Linux. Funciona permitindo as "máquinas" acessar arquivos em máquinas remotas, como se estivesse em um diretório da máquina local. Se o NFS for instalado junto ao NIS - Network Information System (Sistema de informação de Rede), os "usuários" podem acessar qualquer sistema e ainda trabalhar em um único conjunto de arquivos.

Para saber mais sobre o NIS acesse e leia: linux.unicamp.br/docs/howtos/BR-NIS-HOWTO.html

A maneira como o NFS trabalha, rapidamente, podemos dizer que quando dá-se a linha de comando:

    # mount -t nfs <servidor>:/<caminho_diretório> /<diretório_local> [opções]

O servidor irá verificar se a máquina tem permissão para acessar os dados daquele diretório, caso tenha, e isto deve estar especificado no arquivo /etc/exports do servidor, retorna um descritor de arquivos. Quando é acessado o NFS, o kernel envia uma chamada RPC ao servidor nfsd na máquina servidora, nesta são enviados os parâmetros, descritor de arquivos, o nome do arquivo, o identificador de usuário e grupo, usados para controle. As funcionalidades do NFS no Linux são implementadas em nível kernel, o VFS (sistema de arquivo virtual) é integrado no kernel.

Estes pacotes, na maioria das vezes já são instalados por default, mas caso não tenham sido instalados, os pacotes são estes:

# Marumbi

    # rpm -ivh nfs-server-2.2beta29-2.i386.rpm nfs-server-clients-2.2beta29-2.i386.rpm

# Servidor 3.0

    # rpm -ivh nfs-server-2.2beta40-1cl.i386.rpm nfs-server-clients-2.2beta40-1cl.i386.rpm

# Guaraní 3.0

    # rpm -ivh nfs-server-2.2beta37-2cl.i386.rpm nfs-server-clients-2.2beta37-2cl.i386.rpm

# Ipanema 4.0

    # rpm -ivh knfsd-1.4.1-5cl.i386.rpm knfsd-clients-1.4.1-5cl.i386.rpm

# Servidor 4.2

    # rpm -ivh knfsd-1.5.1-7cl.i386.rpm knfsd-clients-1.5.1-7cl.i386.rpm

# Xavante 5.0

    # rpm -ivh nfs-server-2.2beta47-1cl.i386.rpm
      nfs-utils-0.1.6-3cl.i386.rpm

# Servidor 5.1

    # rpm -ivh nfs-server-2.2beta47-1cl.i386.rpm nfs-utils-0.1.8-3cl.i386.rpm

# Desktop e Servidor 6.0

    # rpm -ivh nfs-server-2.2beta47-3cl.i386.rpm nfs-utils-0.2-2cl.i386.rpm

Ative-o pelo comando:

    [root@localhost]# ntsysv

Ativar, tecle F1 para saber para que serve cada serviço.

    [X] netfs
    [X] network
    [X] nfs
    [X] nfslock
    [X] portmap

Pode-se tambem habilitar um por um, é só dar, como root, o comando:

    # cds

e habilitar os serviços

    ./<serviço> start

Para configurar o NFS, temos, primeiramente que ter certeza que o Kernel tem suporte a NFS e que os serviços estejam funcionando, nos kernels modernos podemos verificar isto dando o seguinte comando:

    # cat /proc/filesystems
    
            ext2
    nodev   proc
            iso9660
    nodev   devpts
    nodev   nfs       <------  Observar a existência deste.

Caso não exista, poderá ser necessário recompilar o kernel e habilitar o suporte a NFS. Em kernels mais antigos a maneira mais simples de saber se está habilitado o serviço de NFS é totalmente empírica, tente montar um diretório, se o comando mount não funcionar e apresentar uma mensagem do tipo "tipo de sistema de arquivos nfs não suportado pelo kernel", será necessário compilar e habilitá-lo.

Ex: (como root)

    # mount localhost:/tmp /mnt

Nota: O aparecimento da opção nodev nfs no arquivo /proc/filesystems não é necessariamente obrigatória para indicar que existe suporte a NFS no kernel utilizado. Portanto, o teste acima indicado é necessário para verificação de tal suporte.

Montando um Volume NFS

Para montar volumes NFS, é usado o comando mount com o seguinte formato:

    # mount -t nfs <máquina_remota>:/<diretório_remoto> /<diretório_local> [opções]
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                 Volume NFS

Cabe notar que os parâmetros "-t nfs" não são necessários, pois por ser a notação própria do sistema de arquivos NFS, ele interpreta por default. Existem opções adicionais que podem ser especificadas com o comando mount. Elas pode ser informadas depois da opção -o na linha de comando, ou no campo de opções de arquivo /etc/fstab, em ambos casos, as multiplas opções devem ser separadas por vírgulas. Tenha-se em conta que as opções dadas na linha de comando tem precedencia pelas opções dadas no arquivo /etc/fstab.

Exemplo de entrada do arquivo /etc/fstab:

         Volume NFS         Diretório  Tipo        Opções           Verifica a
                              Local                                  partição
    
    192.168.255.220:/wb       /wb       nfs     soft,bg,nosuid          0 0
    192.168.255.2:/d          /d        nfs     noauto,soft,bg          0 0
    192.168.255.122:/home     /home     nfs     soft,bg,nosuid,nolock   0 0
    192.168.255.122:/faq      /faq      nfs     soft,bg,nosuid          0 0
    192.168.255.122:/faq-es   /es       nfs     soft,bg,nosuid          0 0
    192.168.255.122:/suporte  /suporte  nfs     soft,bg,nosuid          0 0
   

OPÇÕES

    rsize=n     O número de bytes que NFS usará ao ler arquivos de um servidor
                NFS.  O valor padrão depende do kernel e normalmente é de 1.024
                bytes (ainda que a velocidade  de  acesso cresça
                substancialmente ao se informar rsize=8192).
    
    wsize=n     O número de bytes que NFS usará ao gravar arquivos em um
                servidor NFS.  O valor padrão depende do kernel e normalmente é
                de 1.024 bytes (ainda que a velocidade de acesso cresça
                substancialmente ao se informar wsize=8192).
    
    timeo=n     O número de décimos de segundo antes de enviar a primeira
                retransmissão após findo o tempo de espera de uma RPC. O valor
                padrão é de 7 décimos de segundo. Após a primeira espera, o
                tempo é dobrado após cada espera sem respostas, até um máximo de
                60 segundos ou um número máximo de retransmissões ser atingido.
                Então, caso o sistema de arquivos esteja montado com a opção
                hard, cada novo tempo de espera começa com o dobro do tempo da
                anterior, novamente dobrando a cada retransmissão. O tempo
                máximo de espera é sempre de 60 segundos. Uma melhor
                performance  pode  ser atingida ao se incrementar o tempo de
                espera, quando se está montando sistemas sobre uma rede com
                muito tráfego, utilizando-se servidores lentos ou usando o
                sistema através de diversos roteadores e gateways.
    
    retrans=n   O número de tempo limite e retransmissões que devem ocorrer
                antes que um  alarme de tempo de resposta seja acionado. O
                padrão é de 3 ocorrências.  Quando um alarme de tempo de espera
                maior ocorre, a operação é interrompida ou uma mensagem de
                "servidor não está respondendo" é apresentada na console.
    
    
    acregmin=n  O tempo mínimo em segundos que os atributos de um arquivo normal
                devem estar em memória cache antes de solicitar novas
                informações para o servidor.  O padrão é de 3 segundos.
    
    acregmax=n  O tempo máximo em segundos que os atributos de um arquivo normal
                devem estar em  memória cache antes de solicitar novas
                informações para o servidor. O padrão é de 60 segundos.
    
    acdirmin=n  O tempo mínimo em segundos que os atributos de um diretório
                devem estar em memória cache antes de solicitar novas
                informações para o servidor. O padrão é de 30 segundos.
    
    acdirmax=n  O tempo máximo em segundos que os atributos de um diretório
                devem estar em memória cache antes de solicitar novas
                informações para o servidor. O padrão é de 60 segundos.
    
    actimeo=n   Utilizando-se actimeo, os parâmetros acregmin, acregmax,
                acdirmin, e acdirmax recebem o mesmo valor. Não há valor padrão.
    
    retry=n     O número de minutos na tentativa de executar operações de
                montagem NFS em primeiro ou segundo plano antes de desistir
                definitivamente.  O valor padrão é de 10.000 minutos, o que é
                quase uma semana.
    
    namlen=n    Quando um servidor NFS não suporta a versão 2 do protocolo de
                montagem RPC, esta opção pode ser usada para especificar o
                tamanho máximo do nome de arquivos que é suportado pelo sistema
                de arquivos remoto. Esta opção é usada para suportar as funções
                pathconf do POSIX. O padrão é de 255 caracteres.
    
    port=n      O número da porta para conexão no servidor NFS. Caso esta porta
                seja igual a 0 (o padrão), então será perguntado ao programa
                mapeador de portas do servidor, qual o número a ser usado. Caso
                o servidor NFS não esteja registrado no programa mapeador, a
                porta padrão NFS 2039 será usada.
    
    mountport=n O número da porta de mountd.
    
    mounthost=nome O nome do servidor executando mountd.
    
    mountprog=n Número de programa RPC alternativo para contatar o servidor
                mount no servidor remoto. Esta opção é útil para servidores que
                podem rodar múltiplos servidores NFS.  O valor padrão é 100.005,
                o qual é o padrão para o número do servidor mount.
    
    mountvers=n Versão alternativa do RPC usado para contatar o servidor mount
                no servidor remoto. Esta opção é útil para servidores que podem
                executar múltiplos servidores NFS. O valor padrão é versão 1.
    
    nfsprog=n   Número alternativo do programa RPC usado para contatar o
                servidor NFS no servidor remoto. Esta opção é útil para
                servidores que podem executar múltiplos servidores NFS. O valor
                padrão é 100.003 para o número do servidor NFS.
    
    nfsvers=n   Versão alternativa do RPC usado para contatar o servidor NFS no
                servidor remoto.  Esta opção é útil para servidores que podem
                executar múltiplos servidores NFS.  O valor padrão é versão 2.
    
    bg          Caso a primeira tentativa de montagem NFS não ocorra dentro do
                tempo de espera definido, tenta a montagem em segundo plano.
                Após a transferência para segundo plano da operação de montagem,
                todas as tentativas subseqüentes no mesmo servidor NFS serão
                transferidas para segundo plano automaticamente, sem a primeira
                tentativa de montagem em primeiro plano.  Um ponto de montagem
                não encontrado é tratado como a ultrapassagem do tempo de
                espera, para permitir montagens NFS encadeadas.
    
    fg          Caso a primeira tentativa de montagem ultrapasse o tempo de
                espera, tenta novamente  a montagem, porém em primeiro plano.
                Isso complementa a opção bg, e o comportamento padrão.
    
    soft        Caso uma operação NFS ultrapasse o tempo de espera, então relata
                um erro de E/S a o programa que a acionou. O padrão é continuar
                tentando a operação indefinidamente.
    
    hard        Caso uma operação NFS ultrapasse o tempo de espera, então
                apresenta a mensagem "servidor não responde" na console e
                continua indefinidamente. Este é o padrão.
    
    intr        Se uma operação NFS ultrapassar o tempo de espera e estiver
                montada com a opção hard, permite o envio de sinais de
                interrupção da operação e provoca um retorno EINTR para o
                programa de origem.  O padrão é não permitir que as operações
                sejam interrompidas.
    
    posix       Monta o sistema de arquivos usando a semântica POSIX. Isso
                permite que um sistema de arquivos NFS suporte adequadamente o
                comando POSIX pathconf através da solicitação de informações ao
                servidor sobre o tamanho máximo de um nome de arquivo. Para
                fazer isso, o servidor remoto deve suportar a versão 2 do
                protocolo de montagem RPC. Muitos servidores NFS suportam
                somente a versão 1.
    
    nocto       Suprime a recuperação de novos atributos na criação de um
                arquivo.
    
    noac        Desabilita inteiramente o cache de atributos. Esta forma de
                trabalho penaliza a performance de um servidor, mas permite que
                dois diferentes clientes NFS tenham resultados razoáveis ao
                utilizar ativamente um sistema de arquivos comum para gravação
                no servidor.
    
    tcp         Monta o sistema de arquivos usando o protocolo TCP ao invés do
                protocolo padrão UDP. Muitos servidores NFS suportam somente
                UDP.
    
    udp         Monta o sistema de arquivos NFS usando o protocolo UDP. Este é o
                padrão.

Manipulação do Arquivo exports

O arquivo exports é o arquivo que contém os diretórios que serão exportados pelo servidor para a(s) máquina(s) remota(s) da rede; pois por default o mount não permite que ninguém acesse seus diretórios, assim, aqueles diretórios que se desejam exportar, tem que estar relacionados no arquivo: /etc/exports

Exemplo de arquivo exports:

     Volume a ser           Máquina(s) remota(s)(opção(ões))
      exportado
    
    /tmp/sol                192.168.255.202(rw,no_root_squash)
    /home/bugs              192.168.255.14(rw,no_root_squash)
    /home/slowly            192.168.255.13(rw,no_root_squash)
    /home/skippy            192.168.255.102(rw,no_root_squash)
    /usr                    *.conectiva(ro,no_root_squash)
    /mnt                    administrador(rw) cliente(rw)

Cada vez que seja necessário acrescentar algum diretório, máquina ou alguma modificação for feita no /etc/exports, é necessário "restartar" o serviço de nfs do servidor para que as mudançãs tenham efeito, para fazer isto faça, no servidor e como root:

    # cds
    
    # ./nfsd restart

OPÇÕES

    insecure    Permite o acesso não autenticado a partir desta máquina.
    
    unix-rpm    Requer autenticação RPC (domínio UNIX) para esta máquina. Isto é
                requerido somente para as requisições originadas a partir de uma
                porta reservada Internet (isto é, portas com números menor que
                1024). Esta opção está ativa por padrão.
    
    secure-rpc  Requer autenticação segura RPC para esta máquina. Isto ainda não
                foi implementado. Veja a documentação da Sun em ``Secure RPC''.
    
    kerberos    Requer autenticação Kerberos para acesso desta máquina. Isto
                ainda não está implementado. Veja a documentação do MIT sobre
                sistemas de autenticação Kerberos.
    
    root_squash Esta é uma característica de segurança que proíbe que o
                superusuário dos servidores especificados tenha qualquer direito
                de acesso especial a partir de sua identificação igual a 0 no
                cliente, que será alterada no servidor para 65534 (-2). Esta
                identificação deve ser associada ao usuário nobody.
    
    no_root_squash Não mapeia requisições do usuário com identificação 0. Esta
                opção é ativada por padrão.
    
    ro          Monta hierarquicamente os arquivos, somente para leitura. Esta
                opção é usada por padrão.
    
    rw          Monta hierarquicamente os arquivos, com autorizações para
                leitura e gravação.
    
    link_relativa Converte ligações simbólicas absolutas (onde a ligação começa
                com uma barra) em ligações relativas colocando os prefixos ../
                que sejam necessários para obter a rota do diretório que contém
                a ligação para a raiz no servidor.  Esta opção somente faz
                sentido quanto é montado um sistema de arquivos completo de uma
                máquina, onde algumas ligações podem apontar para arquivos
                inválidos, ou pior, para arquivos que nunca deveriam ser
                apontados. Esta opção é usada por padrão.
    
    link_absolute Deixa todas as ligações simbólicas inalteradas (é a opção
                normal dos servidores NFS da Sun).
    
    map_identity A opção map_identity indica ao servidor para assumir que o
                cliente usa as mesmas identificações de usuário e grupos que o
                servidor. Esta opção é usada por padrão.
    
    map_daemon  Esta opção avisa o servidor NFS para assumir que o cliente e o
                servidor não compartilham a mesma identificação de usuários e
                grupos. O servidor nfsd irá então construir uma lista da
                identificação de mapas entre cliente e servidor, através da
                chamada ao servidor ugidd na máquina cliente.

Para montar um servidor NFS para outras máquinas, antes de nada, deve ser executado o programa nfsd e o servidor mountd nas máquinas locais e no servidor, ainda no servidor, certifique-se que o 'portmap' tenha sido inicializado.

Para saber mais acesse: linux.unicamp.br/docs/howtos/BR-NFS-HOWTO.html