Como Fazer - NFS
  Nicolai Langfeldt janl@math.uio.no - Tradução da Conectiva
  Informática - Janeiro de 1999.
  v0.7, 3 de Novembro de 1997

  Como Fazer - configuração de servidores e clientes NFS.
  ______________________________________________________________________

  Índice geral


  1. Preâmbulo

     1.1 Nota Legal
     1.2 Outros Assuntos
     1.3 Dedicatória

  2. LEIAME.antes

  3. Configurando um Servidor NFS

     3.1 Pré-Requisitos
     3.2 Primeiros Passos
     3.3 O portmapper
     3.4 Mountd e nfsd

  4. Configurando um cliente NFS

     4.1 Opções de Montagem
     4.2 Otimizando o NFS

  5. NFS Sobre Linhas de Baixa Velocidade

  6. Segurança e NFS

     6.1 Segurança no Cliente
     6.2 Segurança no Servidor: nfsd
     6.3 Segurança no Servidor: o portmapper
     6.4 NFS e Firewalls
     6.5 Resumo

  7. Pontos de Verificação de Montagem

  8. FAQ

  9. Exportando Sistemas de Arquivos

     9.1 IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4 (Solaris 1), AIX
     9.2 Solaris 2

  10. PC-NFS



  ______________________________________________________________________

  11..  PPrreeââmmbbuulloo

  11..11..  NNoottaa LLeeggaall

  (C)opyright 1997 Nicolai Langfeldt.  Não é permitida a alteração deste
  documento sem a publicação dos direitos autorais. Pode ser livremente
  distribuído desde que contenha este parágrafo. A seção de Perguntas e
  Respostas é baseada no FAQ NFS de Alan Cox. A seção da lista de
  verificações é baseada na lista de problemas de montagem compilada
  pela IBM Corporation.
  11..22..  OOuuttrrooss AAssssuunnttooss

  Este nunca será um documento finalizado, devido à dinâmica do tema.
  Por favor envie-nos informações sobre problemas e sucessos, que possam
  melhorar este Como Fazer. Por favor contribuições financeiras,
  comentários e questões podem ser enviadas para janl@math.uio.no.  Caso
  uma mensagem seja enviada, por favor esteja _s_e_g_u_r_o de que o endereço
  para resposta está correto e funcionando, pois eu recebo _m_u_i_t_o_s emails
  e tentar descobrir endereços pode ser uma tarefa cansativa. Obrigado.


  Caso se deseje traduzir este Como Fazer, por favor, avise-me para que
  eu possa estar ciente sobre a quantidade de idiomas em que eu já fui
  publicado :-).


  Agradecimentos a Olaf Kirch que me convenceu a escrever este documento
  e forneceu-me grandes sugestões. :-)


  Este Como Fazer cobre o NFS nas versões 2.0 do kernel. Há melhorias
  significativas, e mudanças do NFS nas versões subseqüentes do kernel.


  11..33..  DDeeddiiccaattóórriiaa

  Este Como Fazer é dedicado a Anne Line Norheim Langfeldt, que
  provavelmente nunca o lerá, já que ela não é deste tipo de garota.


  22..  LLEEIIAAMMEE..aanntteess

  NFS, o Sistema de Arquivos em Rede tem três importantes
  características:

  ·  Possibilita o compartilhamento de arquivos sobre uma rede local.

  ·  Funciona bastante bem.

  ·  Possibilita diversos problemas de segurança que são bem conhecidos
     por intrusos, e podem ser explorados na obtenção de acesso
     (leitura, gravação e remoção) de todos os arquivos de um sistema.


  Abordaremos todos estes assuntos neste Como Fazer. Por favor, não
  deixe de ler os itens sobre segurança neste Como Fazer, o que tornará
  a rede menos vulnerável a riscos tolos de segurança. As passagens
  sobre segurança serão bastante técnicas e exigirão conhecimento sobre
  redes IP e sobre os termos usados. Caso não se reconheça algum dos
  termos aqui usados, verifique o Como Fazer - Redes ou obtenha um livro
  sobre administração de redes TCP/IP. Esta é uma boa idéia de qualquer
  forma, caso se esteja administrando máquinas Unix/Linux. Um livro
  muito bom é _T_C_P_/_I_P _N_e_t_w_o_r_k _A_d_m_i_n_i_s_t_r_a_t_i_o_n de Craig Hunt, publicado
  pela O'Reilly & Associates, Inc.  E após toda esta leitura, certamente
  você será mais valorizado no mercado de trabalho, e isso não se pode
  perder ;-)


  Há duas seções de ajuda com problemas no NFS, chamadas _L_i_s_t_a _d_e
  _V_e_r_i_f_i_c_a_ç_ã_o e _F_A_Q_s.  Por favor, leia estas seções com atenção caso
  algo não funcione da maneira esperada.





  33..  CCoonnffiigguurraannddoo uumm SSeerrvviiddoorr NNFFSS

  33..11..  PPrréé--RReeqquuiissiittooss

  Antes de continuar a ler este Como fazer, será necessário poder
  executar o  programa telnet de e para as máquinas que serão usadas
  como servidor e cliente. Caso isso não esteja funcionando, pedimos que
  seja checada a rede e sugerimos a leitura do Como Fazer Net-2 para
  configurar a rede adequadamente.


  33..22..  PPrriimmeeiirrooss PPaassssooss

  Antes que se possa fazer qualquer coisa, será necessário ter um
  servidor NFS configurado. Caso se faça parte de alguma rede de um
  departamento ou rede universitária provavelmente já existirão diversos
  servidores NFS sendo executados. Casos eles permitam o acesso ou ao
  invés disso, se esteja lendo este Como Fazer para se obter acesso a um
  servidor NFS, não é necessário ler esta seção, podendo passar
  diretamente à seção ``configurando um cliente NFS''.


  Caso se necessite configurar um sistema diferente do Linux para atuar
  como servidor, será necessário ler o manual do sistema para descobrir
  como habilitar o NFS e a exportação de sistemas de arquivos. Há uma
  seção neste documento explicando como fazer isto em muitos sistemas
  diferentes. Após se descobrir isso tudo pode-se continuar na leitura
  desta seção.


  Aqueles que continuaram a sua leitura estão avisados: vamos ter que
  configurar uma série de programas.


  33..33..  OO ppoorrttmmaappppeerr

  O portmapper no Linux é chamado também de portmap ou rpc.portmap.  A
  página de manual online diz que se trata de "mapeador de portas DARPA
  para números de programas RPC". Este é o primeiro problema de
  segurança com o qual nos deparamos neste Como Fazer. A descrição de
  como evitar estes problemas podem ser encontrada na ``seção de
  seguranção'', a qual eu repito  que deve ser lida.


  Inicializando o portmapper! Ele é chamado de portmap ou rpc.portmap e
  deve estar localizado no diretório /usr/sbin (em algumas máquinas ele
  é chamado de rpcbind). Pode-se inicializá-lo manualmente por hora, mas
  ele deverá ser reinicializado toda vez que o sistema operacional for
  ativado, sendo então necessário editar os programas rc. Este programas
  são explicados mais detalhadamente na página de manual do processo
  init, e usualmente estão localizados nos diretórios /etc/rc.d,
  /etc/init.d ou /etc/rc.d/init.d. Caso haja um programa chamado inet ou
  algo similar, este provavelmente será aquele que deve ser editado.
  Porém, como fazê-lo está além do escopo deste documento. Deve-se
  iniciar o programa portmap e verificar se ele está ativo através do
  comando ps aux. Encontrou-o?  Ótimo.



  33..44..  MMoouunnttdd ee nnffssdd

  Os próximos programas que necessitam ser executados são chamados
  mountd e nfsd. Porém, antes, é necessário editar outro arquivo. Desta
  vez o  /etc/exports. Digamos que se deseje que o sistema de arquivo
  /mn/parolin/local, o qual está localizado na máquina parolin  se torne
  disponível para a máquina chamada batel. Deve-se então utilizar a
  seguinte configuração no arquivo /etc/exports na  parolin:


  ______________________________________________________________________
  /mn/parolin/local       batel(rw)
  ______________________________________________________________________



  As linhas acima fornecem a batel acesso de leitura e gravação (rw)
  para /mn/parolin/local.  Ao invés de rw poderíamos informar ro, o que
  fornece acesso somente para leitura e que é o padrão quando este
  parâmetro não é informado. Há diversas opções que podem ser utilizadas
  e que serão discutidas juntamente com aspectos de segurança mais
  adiante. Elas estão descritas nas páginas de manual online do comando
  exports, a qual deve ser lida ao menos uma vez na vida. Há ainda
  formas melhores de incluir diversas máquinas no arquivo exports. Pode-
  se por exemplo, usar grupos de rede caso se esteja utilizando NIS (ou
  NYS) (NIS foi conhecido como YP) e especificar sempre um domínio com
  caracteres de generalização, ou subredes IP como máquinas que têm
  permissão para montar algo. Porém é necessário considerar que poderá
  ser possível obter acesso ao servidor de forma não autorizadas caso se
  utilize autorizações tão genéricas.

  NNoottaa:: oo aarrqquuiivvoo eexxppoorrttss nnããoo tteemm aa mmeessmmaa ssiinnttaaxxee qquuee eemm oouuttrrooss UUnniixxeess..
  Há uma seção específica neste Como fazer sobre arquivos exports de
  outros sistemas.


  Agora que configuramos o mountd (ou talvez ele seja chamado
  rpc.mountd) e o nfsd (o qual pode ser chamado rpc.nfsd), ambos irão
  ler o arquivo exports.


  Caso se edite o /etc/exports deve-se estar seguro de que os programas
  nfsd e mountd fiquem cientes destas alterações. A forma tradicional é
  através da execução do comando exportfs. Muitas distribuições Linux
  não possuem o programa exportfs. Caso este seja o seu caso, pode-se
  instalar o seguinte programa na máquina local:


  ______________________________________________________________________
  #!/bin/sh
  killall -HUP /usr/sbin/rpc.mountd
  killall -HUP /usr/sbin/rpc.nfsd
  echo re-exportando sistemas de arquivos
  ______________________________________________________________________




  O programa acima deve ser salvo, como por exemplo como
  /usr/sbin/exportfs, e deve ser executado o comando chmod a+rx
  exportfs. Agora, toda vez que uma alteração for efetuada, deve-se
  executar o comando exportfs a seguir, com privilégios de superusuário.


  Agora deve-se checar se mountd e nfsd estão sendo adequadamente
  executados. Inicialmente deve-se executar o comando rpcinfo -p. Ele
  deverá apresentar uma saída similar a:






  ______________________________________________________________________
     program vers proto   port
      100000    2   tcp    111  portmapper
      100000    2   udp    111  portmapper
      100005    1   udp    745  mountd
      100005    1   tcp    747  mountd
      100003    2   udp   2049  nfs
      100003    2   tcp   2049  nfs
  ______________________________________________________________________



  Como se pode perceber, o portmapper anunciou os seus serviços, assim
  como mountd e nfsd.


  Caso se obtenha uma mensagem similar a rpcinfo: não foi possível
  contactar o portmapper: RPC: Erro no sistema remoto - Conexão recusada
  ou algo similar, possivelmente o portmapper não esteja sendo
  executado. Caso se obtenha uma mensagem similar a Nenhum programa
  remoto registrado. então, ou o portmapper não deseja falar com a
  máquina local ou existe algum erro. Pode-se finalizar o nfsd, o mountd
  e o portmapper e tentar reiniciá-los nesta ordem novamente.


  Após verificar os serviços disponíveis segundo o portmapper, pode-se
  fazer uma checagem através do comando ps. O portmapper continuará a
  reportar um serviço, mesmo após o programa responsável ter sido
  finalizado com erro, por exemplo. Então um comando ps poderá ser a
  maneira mais simples de descobrir que programas estão efetivamente
  sendo executados.


  Evidentemente, será necessário modificar os arquivos rc do sistema
  para inicializar o mountd e o nfsd, assim como o portmapper, quando o
  sistema operacional for carregado. É muito provável que estes
  programas já existam na máquina local e que se deva somente
  descomentar as seções adequadas ou ativá-los nos níveis de execução
  corretos.


  Páginas de manual online que já devem ter sido visitadas até agora:
  portmap, mountd, nfsd, e exports.


  Bem, caso tudo tenha sido feito exatamente como foi descrito aqui, já
  temos à disposição todo o conjunto de ferramentas necessárias para
  iniciar um cliente NFS.


  44..  CCoonnffiigguurraannddoo uumm cclliieennttee NNFFSS

  Inicialmente é necessário ter um kernel com o suporte a sistemas de
  arquivo NFS compilado ou como um módulo. Isso deve ser configurado
  antes da compilação do kernel. Caso não se tenha feito isto, por favor
  verifique o Como Fazer - Kernel para instruções sobre como proceder.
  Caso se esteja utilizando uma distribuição muito boa (como o Conectiva
  Linux) e nunca se tenha lidado com o kernel ou módulos, nfs está
  magicamente à sua disposição.


  Pode-se agora, na linha de comandos do superusuário, informar o
  comando de montagem apropriado e o sistema de arquivos estará
  disponível. Continuando com nosso exemplo anterior, desejamos montar
  /mn/parolin/local a partir de parolin. Isso deve ser feito através do
  seguinte comando:
  ______________________________________________________________________
  mount -o rsize=1024,wsize=1024 parolin:/mn/parolin/local /mnt
  ______________________________________________________________________




  (Retornaremos posteriormente às opções rsize e wsize). O sistema de
  arquivos está agora disponível sob /mnt e pode-se acessá-lo através do
  comando cd, assim como verificar o seu conteúdo através do comando ls,
  e observar os arquivo individualmente. Pode-se perceber que ele não é
  tão rápido quando um sistema local, mas muito mais amigável que o uso
  do ftp. Se, ao invés de montar um sistema de arquivos, o comando mount
  apresente uma mensagem de erro como mount:parolin:/mn/parolin/local
  falhou, razão fornecida pelo servidor: Permissão negada, então o
  arquivo exports contém algum erro. Caso ele informe mount
  clntudp_create: RPC: Programa não registrado isso significa que os
  programas nfsd ou mountd não estão sendo executados no servidor.


  Para desmontar o sistema de arquivos basta comandar:


  ______________________________________________________________________
  umount /mnt
  ______________________________________________________________________




  Para que um sistema de arquivos nfs seja montado na inicialização do
  sistema operacional, deve-se editar o arquivo /etc/fstab da forma
  usual. No caso de nosso exemplo, deve-se adicioar a seguinte linha:


  ______________________________________________________________________
  # dispositivo  pto.montagem tipo_sist_arqs  opções         dump ordem verif.
  ...
  parolin:/mn/parolin/local  /mnt    nfs  rsize=1024,wsize=1024 0    0
  ...
  ______________________________________________________________________




  Bem, parece tudo. Quase. Continue a leitura por favor.


  44..11..  OOppççõõeess ddee MMoonnttaaggeemm

  Há algumas opções que devem ser consideradas. Eles definem a forma
  como o cliente NFS lida com uma queda do servidor ou da rede. Um dos
  aspectos mais interessantes sobre NFS é que ele lida com estas
  situações com elegância, desde que o cliente esteja corretamente
  configurado. Há dois tipos distintos de parâmetros de tratamento de
  falhas:


     ssoofftt
        O cliente NFS reporta um erro ao processar o acesso a um arquivo
        localizado em um sistema de arquivos montado via NFS. Alguns
        programas podem lidar com isto com compostura, outros não. Esta
        opção não é recomendada.



     hhaarrdd
        O programa que acessa um arquivo em um sistema de arquivos
        montado via NFS irá travar sempre que o servidor não responder.
        O processo não pode ser interrompido ou finalizado a menos que
        se tenha especificado intr. Quando o servidor NFS esteja
        novamente ativo, o programa irá continuar a partir do ponto onde
        tenha parado. Isso é provavelmente o que se deseje. Recomendamos
        o uso do parâmetro hard,intr em todos os sistemas de arquivos
        montados via NFS.



  A partir do exemplo anterior, esta seria a entrada no arquivo fstab:


  ______________________________________________________________________
  # dispositivo  pto.montagem tipo_sist_arqs  opções         dump ordem verif.
  ...
  parolin:/mn/parolin/local  /mnt    nfs  rsize=1024,wsize=1024,hard,intr 0 0
  ...
  ______________________________________________________________________





  44..22..  OOttiimmiizzaannddoo oo NNFFSS

  Normalmente, caso as opções rsize e wsize seja especificados, o NFS
  irá ler e gravar blocos de 4096 e 8172 bytes. Algumas combinações de
  kernel do Linux e placas de rede não podem lidar com blocos grandes e
  não podem ser otimizados. Então vamos tentar descobrir como encontrar
  os parâmetros rsize e wsize que funcionem da maneira mais otimizada
  possível. É possível testar a velocidade das opções com um simples
  comando. Dado o comando mount conforme descrito acima, logo temos
  acesso de gravação ao disco, podendo executar um teste de performance
  de gravação seqüencial:


  ______________________________________________________________________
  time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096
  ______________________________________________________________________




  Este comando criará um arquivo de 64 Mb de bytes zerados (que deve ser
  grande o suficiente para que o cache não altere significativamente a
  performance. Pode ser usado um arquivo maior caso o sistema local
  tenha muita memória). Isso pode ser feito algumas vezes (5-10?), para
  que se possa ter uma média bem fundamentada. Neste casos, o importante
  é medir o tempo de "relógio" e o tempo efetivamente gasto na conexão.
  Após, pode-se testar a performance da leitura ao se ler o arquivo de
  volta:


  ______________________________________________________________________
  time dd if=/mnt/testfile of=/dev/null bs=16k
  ______________________________________________________________________



  Isso pode ser feito algumas vezes. Após deve-se executar o comando
  mount e umount novamente com tamanhos maiores em rsize e wsize. Eles
  devem ser provavelmente múltiplos de 1024, e não maior que 16384 visto
  que este é o tamanho máximo do NFS versão 2. Exatamente após a
  montagem de um tamanho maior, acesse o sistema de arquivos montado
  através do comando cd e explore-o através do comando ls, para estar
  seguro que ele está funcionando perfeitamente. Caso os parâmetros
  rsize/wsize sejam muito grandes, os sintomas não são _m_u_i_t_o óbvios. Um
  típico sintoma é uma lista incompleta dos arquivos produzida pelo
  comando ls e nenhuma mensagem de erro. Ou ao se ler um arquivo ele
  falha misteriosamente, sem mensagens de erro. Após definir que os
  parâmetros rsize/wsize funcionam perfeitamente deve-se executar os
  testes de performance. SunOS e Solaris tem a reputação de funcionar
  muito melhor com blocos de 4096 bytes.


  kernels mais recentes do Linux (desde o 1.3) executam a leitura
  antecipada para rsizes maiores ou iguais ao tamanho de página da
  máquina. Em máquinas Intel o tamanho de página é de 4.096 bytes. A
  leitura adiantada aumenta _s_i_g_n_i_f_i_c_a_t_i_v_a_m_e_n_t_e a performance de leitura
  do NFS. Ou seja, sempre que possível deve-se usar o rsize de 4.096
  bytes em máquinas Intel.


  Lembre-se de editar o arquivo /etc/fstab com os valores de
  rsize/wsize encontrados.


  Uma sugestão para incrementar a performance de gravação do NFS é
  desabilitar o sincronismo de gravação do servidor. A especificação NFS
  indica que a gravação NFS solicitada não pode ser considerada
  finalizadas antes dos dados serem gravados em um meio não volátil
  (normalmente o disco rígido). Isso restringe a performance de gravação
  de alguma forma, enquanto que gravações assíncronas irão aumentar a
  velocidade do NFS. O servidor Linux nfsd nunca faz gravações síncronas
  uma que a própria implementação do sistema de arquivos não o faz, mas
  em servidores em sistemas operacionais diferentes isso pode aumentar a
  performance através do seguinte parâmetro no arquivo exports:


  ______________________________________________________________________
  /dir    -async,access=linuxbox
  ______________________________________________________________________




  ou algo similar. Por favor verifique a página de manual online da
  máquina em questão. Cabe salientar que esta opção aumenta o risco de
  perda de dados no caso de algum problema ocorrer antes da efetiva
  gravação dos dados.



  55..  NNFFSS SSoobbrree LLiinnhhaass ddee BBaaiixxaa VVeelloocciiddaaddee

  Linhas de baixa velocidade incluem modems, ISDN e praticamente todas
  as ligações de longa distância possíveis.


  Esta seção é baseada no conhecimento dos protocolos usados mas não em
  experiências de campo. Meu computador pessoal este inativo por um
  longo tempo e caso você tenha alguma experiência adicional por favor
  entre em contato.


  A primeira coisa para se lembrar sobre NFS é que ele é um protocolo
  lento e tem ainda um alto número de informações adicionais. Usar NFS é
  o mesmo que se utilizar o kermit para transferir arquivos. É _l_e_n_t_o.
  Praticamente qualquer coisa é mais rápida que NFS. FTP, HTTP, rcp, ssh
  por exemplo.


  Ainda quer tentar?  Ok.


  Os parâmetros padrões do NFS são para linhas rápidas com baixa
  latência. Caso se esteja usando estes parâmetros para linhas de alta
  latência, certamente o NFS reportará alguns erros, encerrará
  operações, imaginará que arquivos são menores do que eles sejam na
  realidade e agirá estranhamente em alguns casos.


  A primeira coisa a _n_ã_o fazer é usar a opção de montagem soft. Ela
  provocará ultrapassagem dos tempos de espera e retornos de erro para o
  software, o qual, na maior parte do tempo, não saberá lidar
  corretamente com eles. Essa é uma maneira rápida de se obter erros
  misteriosos. Ao invés disso deve ser usada a opção de montagem hard,
  que gera infinitas tentativas em caso de estouro de tempo de espera ao
  invés de encerrar a solicitação, independentemente do que o software
  deseje fazer. Isso será realmente necessário nestes casos.


  A próxima providência é mudar as opções de montagem timeo e retrans.
  Elas são descritas na página de manual online nfs(5), mas segue aqui
  uma cópia:


  ______________________________________________________________________
  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.
  ______________________________________________________________________




  Em outras palavras: se uma resposta não for recebida no tempo de
  espera de  0,7 segundos (700 ms), o cliente NFS irá repetir e dobrar o
  tempo de espera para 1,4 segundos. Caso a resposta não seja recebida
  neste tempo, a requisição será enviada novamente com um tempo de
  espera alterado para 2,8 segundos.


  A velocidade da linha pode ser medida com um ping com os mesmos
  parâmetros das opções rsize/wsize.


  ______________________________________________________________________
  $ ping -s 8192 lugulbanda
  PING lugulbanda.uio.no (129.240.222.99): 8192 data bytes
  8200 bytes from 129.240.222.99: icmp_seq=0 ttl=64 time=15.2 ms
  8200 bytes from 129.240.222.99: icmp_seq=1 ttl=64 time=15.9 ms
  8200 bytes from 129.240.222.99: icmp_seq=2 ttl=64 time=14.9 ms
  8200 bytes from 129.240.222.99: icmp_seq=3 ttl=64 time=14.9 ms
  8200 bytes from 129.240.222.99: icmp_seq=4 ttl=64 time=15.0 ms

  --- lugulbanda.uio.no ping statistics ---
  5 packets transmitted, 5 packets received, 0% packet loss
  round-trip min/avg/max = 14.9/15.1/15.9 ms
  ______________________________________________________________________



  O parâmetro time aqui mostra quanto tempo o pacote ping levou para
  chegar a e retornar da máquina denominada lugulbanda.  15ms é bastante
  rápido. Sobre uma linha de 28.800 bps pode-se esperar algo como
  4000-5000ms e, caso a linha esteja carregada, um tempo maior, chegando
  facilmente ao dobro. Quando o tempo é muito alto nos referimos como
  uma linha de alta latência. Geralmente para pacotes maiores e linhas
  mais carregadas, a latência tende a aumentar. Deve-se aumentar o
  parâmetro timeo para se adequar a esta realidade. Deve-se atentar que
  a latência tende a aumentar ainda mais quando se usa a linha para
  outros serviços como por exemplo FTP e NFS simultaneamente. Neste caso
  deve-se medir as respostas do comando ping ao se efetuar
  transferências de arquivos.


  Vamos simular um cenário. Caso o tempo de ping esteja em cerca de
  5000ms para um pacote de 8 Kb, que é o tempo de envio e resposta deste
  pacote e que somente indo ou vindo ele leve em média 2.500 ms,
  significando o tempo gasto pelo envio por uma ponta e recepção pela
  outra. Para pacotes menores de 512 bytes o tempo de ida e vinda é de
  aproximadamente 400 ms e ida ou vinda tem um tempo médio de 200 ms.
  Adicionando-se 2.500 ms e 200 ms temos 2.700 ms, que é o tempo médio
  de ida e vinda de um pequeno pacote de requisição e de uma resposta
  com um pacote maior. O tráfego ocorre da seguinte forma:


  ______________________________________________________________________

  tempo limite evento
     0     700 cliente solicita dados
   300         servidor recebe a solicitação
   300         servidor começa a responder (sob uma ótica otimista :-)
               lembrete: o cliente não verá a resposta até que ela esteja
               completa, em cerca de 2,7 segundos.
   700         estouro de tempo do cliente
   700    1400 cliente solicita os dados novamente
  1000         servidor recebe a requisição
  1000 servidor começa a responde a requisição.
  ______________________________________________________________________



  Neste ponto, cerca de 700 ms dos 2.700 ms de transmissão já foram
  utilizados. Ou seja restam 2.000 ms. O servidor responde à requisição,
  mas o pacote não pode ser enviado porque um pacote...



  66..  SSeegguurraannççaa ee NNFFSS

  Não me considero um expert em segurança de computadores. Porém existem
  algumas  _s_u_g_e_s_t_õ_e_s importantes. É importante ressaltar que esta não é
  uma lista completa de todos os aspectos relacionados com segurança e
  caso se imagine que implementando somente estes não se poderá ter
  qualquer problema relacionado com o tema segurança, por favor me envie
  seu email que eu tenho uma ponte e desejo vendê-la.



  Esta seção é provavelmente fora de questão caso se esteja em uma rede
  _f_e_c_h_a_d_a onde todos os usuários são conhecidos e ninguém que não seja
  confiável pode acessar a rede, ou seja não há forma de discar para a
  rede e não há forma de conectar-se a outras redes onde existam
  usuários não confiáveis. Isso soa como paranóia? Não sou paranóico.
  Isso é somente um aviso _b_á_s_i_c_o de segurança. E lembre-se, o que aqui
  for dito é somente uma base para o tema. Um site _s_e_g_u_r_o necessita de
  um administrador diligente e com conhecimento que consiga encontrar
  informações sobre problemas de segurança correntes e potenciais.


  NFS é  um problema básico, caso  o cliente não seja informado do
  contrário irá confiar no servidor NFS e vice e versa. Isso pode ser
  ruim, pois se a senha do superusuário no servidor NFS for quebrada, a
  senha dos superusuários dos clientes também o será com relativa
  facilidade. E vice e versa. Há algumas estratégias para se evitar
  isso, as quais mencionaremos adiante.


  Um leitura obrigatória são os avisos do CERT sobre NFS, onde muitos
  dos textos lidam com conselhos sobre segurança. Veja em
  ftp.cert.org/01-README por uma lista atualizada dos avisos CERT. Aqui
  estão alguns dos relacionados com NFS:


  ______________________________________________________________________
  CA-91:21.SunOS.NFS.Jumbo.and.fsirand                            12/06/91
  Vulnerabilidade preocupa Sun Microsystems, Inc. (Sun) Sistema de Arquivos em Rede (NFS) e o programa fsirand. Estas vulnerabilidades afetam o SunOS versões 4.1.1, 4.1 e 4.0.3 em todas as arquiteturas. Atualizações estão disponíveis para SunOS 4.1.1. Uma atualização inicial para o NFS SunOS 4.1 está também disponível. Sun irá disponibilizar atualizações completas para as versões SunOS 4.1 e SunOS 4.0.3 em uma versão posterior.

  CA-94:15.NFS.Vulnerabilidades                                  12/19/94
  Este aviso descreve as medidas de segurança a serem tomadas para evitar diversas vulnerabilidades do Sistema de Arquivos em Rede (NFS). Os avisos foram gerados devido ao incremento do comprometimento de superusuários através de invasores usando ferramentas que exploram estas falhas.

  CA-96.08.pcnfsd                                                 04/18/96
  Este aviso descreve a vulnerabilidade do programa pcnfsd (também conhecido como rpc.pcnfsd). Uma atualização está incluída.
  ______________________________________________________________________




  66..11..  SSeegguurraannççaa nnoo CClliieennttee

  No cliente, podemos decidir se desejamos ou não confiar no servidor,
  através de algumas opções na montagem. Por exemplo, é possível proibir
  programas suid a funcionarem em sistemas de arquivos NFS através da
  opção nosuid. Esta pode ser uma boa idéia que deve ser considerada no
  uso de todos os discos montados via NFS. Esta opção indica que o
  superusuário do servidor não pode fazer um programa com
  características de suid no sistema de arquivos, o que possibilitaria
  que ele acessasse o cliente como um usuário normal e usasse o programa
  suid-superusuário para tornar-se root na máquina cliente. Deve-se
  proibir também a execução de arquivo em sistemas de arquivos montados,
  através da opção noexec. Porém isso pode ser impraticável por vezes,
  assim como o nosuid uma vez que um sistema de arquivos normalmente
  contém _a_l_g_u_n_s programas que necessitam ser executados. Estes
  parâmetros podem ser informados na coluna opções, juntamente com os
  parâmetros rsize e wsize, separados por vírgulas.


  66..22..  SSeegguurraannççaa nnoo SSeerrvviiddoorr:: nnffssdd

  No servidor pode-se decidir sobre a possibilidade de confiar na conta
  do superusuário do cliente. Isso é definido através do uso da opção
  root_squash no arquivo exports:


  ______________________________________________________________________
  /mn/parolin/local batel(rw,root_squash)
  ______________________________________________________________________



  Agora caso um usuário com número de identificação igual a 0 (UID)
  tentar acessar (ler, gravar, remover) o sistema de arquivos, o
  servidor substituirá o UID pela identificação da conta "nobody"
  (ninguém). Isso faz com que o superusuário da máquina cliente não
  possa acessar arquivos ou executar mudanças autorizadas somente para o
  superusuário do servidor. Isso é aconselhável e provavelmente deva-se
  usar root_squash em todos os sistemas exportados. "Porém o
  superusuário cliente pode ainda usar o comando 'su' para tornar-se
  qualquer outro usuário e acessar e alterar quaisquer arquivos", é o
  que se pode pensar à primeira vista. A resposta é: sim, é desta forma
  que as coisas funcionam com Unix e NFS. Isso traz uma implicação
  importante: todos os binários e arquivos importantes devem pertencer
  ao superusuário root, e não a bin ou outra conta diferente, uma vez
  que somente a conta do superusuário da máquina cliente pode acessar a
  conta do superusuário no servidor. Na página de manual online do nfsd
  há diversas outras opções squash que podem ser usadas, então o
  administrador deve decidir quem não pode ter  acesso à conta do
  superusuário. Existem opções de se evitar o uso de faixas ou de
  qualquer UID ou GID que se deseje. Isso está descrito na mesma página
  de manual.


  root_squash é na verdade o padrão do nfsd do Linux. Para permitir
  acesso a um sistema de arquivos como superusuário deve-se usar a opção
  no_root_squash.


  Outro aspecto importante é garantir que o nfsd verifique que todas as
  requisições são provenientes de uma porta autorizada. Caso se aceite
  requisições de qualquer porta antiga de um usuário sem privilégios
  especiais, torna-se simples acessar o sistema de arquivos através da
  Internet, por exemplo. Basta usar o protocolo nfs e identificar-se
  como qualquer usuário que se deseje. Ooopss. O nfsd do Linux realiza
  esta verificação por padrão, em outros sistemas operacionais deve-se
  habilitar esta opção. Isso deverá estar descrito na página de manual
  do servidor nfs do sistema.


  Um dado adicional. Nenhum sistema de arquivo deve ser exportado para o
  'localhost' ou 127.0.0.1. Acredite em mim.


  66..33..  SSeegguurraannççaa nnoo SSeerrvviiddoorr:: oo ppoorrttmmaappppeerr

  O portmapper básico em combinação com nfsd tem um problema de desenho
  que torna possível obter arquivos em servidores NFS sem a necessidade
  de quaisquer privilégios. Felizmente o portmapper do Linux é
  relativamente seguro contra este tipo de ataque, o que pode ser
  evitado através da configuração de uma lista de acessos em dois
  arquivos,


  Inicialmente editaremos o  /etc/hosts.deny.  Ele deverá conter a
  seguinte linha:


  ______________________________________________________________________
  portmap: ALL
  ______________________________________________________________________



  através da qual o acesso será bloqueado para _t_o_d_o_s os cliente.  Isto
  talvez seja um pouco drástico, então podemos tornar as definições um
  pouco mais maleáveis através da edição do arquivo /etc/hosts.allow.
  Inicialmente é necessário definir que será colocado nele. Ele contém
  basicamente uma lista de todas as máquinas que podem acessar o
  portmapper local. Em um sistema Linux há normalmente poucas máquinas
  que necessitem este tipo de acesso, qualquer que seja a razão. O
  portmapper administra os programas nfsd, mountd, ypbind/ypserv,
  pcnfsd, e serviços 'r' como ruptime e rusers.  Todas as máquinas que
  necessitam acessar os serviços da máquina local deve ter permissão
  para tanto. Digamos que o endereço da máquina local seja
  129.240.223.254 e que ela está conectada à subrede 129.240.223.0, a
  qual deve ter acesso à máquina local (em caso de dúvida verifique o
  Como Fazer - Redes para refrescar a memória sobre estes conceitos).
  Para tanto basta executar:


  ______________________________________________________________________
  portmap: 129.240.223.0/255.255.255.0
  ______________________________________________________________________



  no arquivo hosts.allow. Este é o mesmo endereço de rede fornecido para
  o comando route e a máscara de subrede informada no ifcongif. No
  dispositivo eth0 desta máquina ifconfig mostraria:


  ______________________________________________________________________
  ...
  eth0      Link encap:10Mbps Ethernet  HWaddr 00:60:8C:96:D5:56
            inet addr:129.240.223.254  Bcast:129.240.223.255  Mask:255.255.255.0
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:360315 errors:0 dropped:0 overruns:0
            TX packets:179274 errors:0 dropped:0 overruns:0
            Interrupt:10 Base address:0x320
  ...
  ______________________________________________________________________



  e netstat -rn apresentaria


  ______________________________________________________________________
  Tabela de Roteamento do Kernel
  Destinação     Cam.Padrão         Máscara    Indics Métrica Ref  Uso   Iface
  ...
  129.240.223.0   0.0.0.0         255.255.255.0   U     0      0   174412 eth0
  ...
  ______________________________________________________________________



  o endereço de rede na primeira coluna.

  Os arquivos hosts.deny e hosts.allow são descritos nas página de
  manual de mesmo nome.


  IIMMPPOORRTTAANNTTEE:: _n_ã_o coloque _n_a_d_a exceto _E_N_D_E_R_E_Ç_O_S _I_P nas linhas do portmap
  nestes arquivos. Pesquisas por nomes podem indiretamente causar
  atividade do portmap o qual acionará a pesquisa de nomes de máquinas a
  qual indiretamente irá causa atividade no portmap.,


  As sugestões acima certamente deixarão o servidor mais seguro. As
  questões restantes residem em alguém que tenha descoberto a senha do
  superusuário (ou inicializando um MS-DOS) em uma máquina confiável e
  usando este privilégio para enviar requisições a partir de uma porta
  segura como qualquer outro usuário real.


  66..44..  NNFFSS ee FFiirreewwaallllss

  É uma boa idéia proteger o servidor nfs e as portas portmap no
  roteador ou no firewall. O nfsd opera normalmente na porta 2049, nos
  protocolos udp e tcp. O portmapper na porta 111, tcp e udp e o mountd
  na porta 745 e 747, tcp e udp. Estas informações devem ser checadas
  através do comando rpcinfo -p.


  Por outro lado, caso se deseje permitir o acesso ao NFS através de um
  firewall, há opções em programas mountd e nfsd mais recentes que
  permitem o uso específico e não padronizado de portas que podem ser
  abertas através de um firewall.


  66..55..  RReessuummoo

  Caso se utilize hosts.allow/deny, root_squash, nosuid e
  funcionalidades de portas privilegiadas para os softwares portmapper e
  nfs pode-se evitar muitos dos problemas atualmente conhecidos sobre
  segurança e pode sentir-se quase seguro sobre _e_s_t_e_s _p_r_o_b_l_e_m_a_s no
  mínimo. Porém há mais ainda: quando um intruso tem acesso à rede, ele
  pode incluir comandos estranhos nos arquivos .forward ou nos arquivos
  de mensagens, quando /home ou /var/spool/mail são montados via NFS.
  Pela mesma razão, nunca se deve dar acesso às chaves privadas PGPP
  sobre nfs. Ou no mínimo, deve-se saber dos riscos envolvidos. Pelo
  menos isso você já sabe.


  NFS e o portmapper criam um subsistema complexo e adicionalmente há
  problemas que são descobertos e que devem ser solucionados, além da
  necessidade de se ter em mente o desenho básico de implementação a ser
  usado. Para estar ciente do que está ocorrendo pode acessar o grupo de
  notícias comp.os.linux.announce e comp.security.announce
  eventualmente.


  77..  PPoonnttooss ddee VVeerriiffiiccaaççããoo ddee MMoonnttaaggeemm

  Esta seção é baseada na lista de verificação de problemas da IBM Corp.
  Meus agradecimentos a eles por tornarem ela disponível para este Como
  Fazer. Caso o leitor esteja com algum problema em montar sistemas de
  arquivos NFS, por favor consulte esta lista. Cada item descreve um
  problema específico e a sua solução.


  1. O sistema de arquivos não foi exportado, ao menos para a máquina
     cliente em questão.


     SSoolluuççããoo:: Inclui-lo no arquivo exports.


  2. A resolução de nomes não confere com a lista de exports.


     por exemplo: a lista em export indica uma exportação para johnmad
     mas o nome johnmad é resolvido como johnmad.austin.ibm.com, fazendo
     com que a permissão de montagem seja negada.


     SSoolluuççããoo:: Exportar em ambos os formatos de nomes.


     Isso pode ocorrer ainda quando o cliente tem 2 interfaces com nomes
     diferentes  para cada um dos dois dispositivos e o comando export
     especifica somente um deles.


     SSoolluuççããoo:: Exportas para ambas as interfaces.


     Isso pode ocorrer também quando o servidor não consegue executar um
     chamada lookuphostbyname ou lookuphostbyaddr (são funções da
     biblioteca) no cliente. Estejá seguro  de que o cliente pode
     executar máquina <nome>; máquina <endereço_ip>; e que ambos mostram
     a mesma máquina.


     SSoolluuççããoo:: ajustar a resolução de nomes no cliente.


  3. O sistema de arquivos foi montado após a inicialização do NFS (no
     servidor). Neste caso o sistema de arquivos está exportado sob um
     ponto de montagem.


     SSoolluuççããoo:: Desativar nfsd e reinicializá-lo.


     NNoottaa:: os clientes que tenham pontos de montagem sob sistemas de
     arquivos terão problemas no acesso após a reinicialização.

     NN..TT..:: nestes casos é recomendada a execução do comando mount -a,
     como superusuário, na máquina cliente.



  4. As datas estão estranhamente diferentes em ambas as máquinas (o que
     pode gerar inconsistências com os arquivos).


     SSoolluuççããoo:: Ajustar as datas.


     O autor do Como Fazer sugere o uso do NTP para sincronismo de
     relógios. Uma vez que existem restrições de exportação do NTP para
     fora dos EUA, pode-se obter uma cópia em uma distribuição Linux ou
     em ftp://ftp.hacktic.nl/pub/replay/pub/linux ou em um site espelho.


  5. O servidor não aceita uma montagem de um usuário presente em mais
     de 8 grupos.


     SSoolluuççããoo:: diminuir o número de grupos aos quais o usuário pertença
     ou alterar o usuário na montagem.



  88..  FFAAQQ

  Esta é uma seção de perguntas e respostas. Muito do que está contido
  aqui foi escrito por Alan Cox.


  1. Obtive uma série de erros de manipulação de arquivos nfs ao usar o
     Linux como servidor.


     Isso é causado por uma antiga versão do nfsd. Está corrigida a
     partir da versão nfs-server2.2beta16.
  2. Ao tentar montar um sistema de arquivos, surge a mensagem:



       não foi possível registrar-se no portmap: erro do sistema no envio







  Provavelmente se está utilizando o sistema da Caldera. Há um problemas
  com os programas rc. Por favor entre em contato com eles para correção
  do problema.


  3. Por que não é possível executar um arquivo após copiá-lo para o
     servidor NFS?


     A questão reside no fato do nfsd criar caches de manipulação de
     arquivos por questões de performance (lembre-se que ele é executado
     em um espaço de usuário). Enquanto nfsd tem um arquivo aberto (como
     no caso em que ele esteja sendo gravado), o kernel não permite a
     sua execução. Os programas NFSd a partir de 95 liberam os arquivos
     após alguns segundos, já versões mais antigas podem levar dias.


  4. Os arquivos NFS estão todos com permissões somente de leitura.


     O padrão do servidor NFS Linux é somente fornecer permissões de
     leitura para arquivos montados. O arquivo /etc/exports deve ser
     alterado caso se deseje algo diferente.


  5. Existe um sistema de arquivos montado a partir de um servidor nfs
     Linux e enquanto o comando ls trabalha, a leitura e gravação de
     arquivos não funcionam.


     Em versões mais antigas do Linux, deve-se montar um servidor NFS
     com os parâmetros rsize=1024,wsize=1024.


  6. Ao montar a partir de um servidor NFS Linux com um bloco de tamanho
     entre  3500-4000 ele trava regularmente.


     Bem...não faça mais isso!


  7. O  Linux pode executar NFS sobre TCP?


     Não no momento.


  8. Ao se montar a partir de uma máquina Linux, obtém-se inúmeros
     erros.


     Esteja certo de que os usuários utilizados estão presentes em no
     máximo 8 grupos. Servidores mais antigos requerem isso.

  9. Ao reinicializar a máquina, ela algumas vezes trava ao tentar
     desmontar um servidor NFS.


     NNããoo desmonte servidores NFS ao reinicializar ou desligar.
     Simplesmente ignore-os. Isso não irá machucar nimguém. O comando é
     umount -avt nonfs.


  10.
     Clientes Linux NFS são muito lentos ao tentar gravar em sistemas
     Sun e BSD.


     NFS executa gravações síncronas (que podem ser desabilitadas caso
     não haja nenhum grande problema em se perder algum dado). Kernels
     derivados do BSD tendem a trabalhar mal com pequenos blocos. Porém
     ao se gravar blocos de 4 Kb de dados a partir de uma máquina Linux,
     usando pacotes de 1 Kb,  faz com que o Linux use a rotina BSD na
     seguinte forma:



               ler página de 4K
               alterar para 1K
               gravar 4K no disco rígido
           ler página de 4K
               alterar para 1K
               gravar 4K no disco rígido
               etc.








  99..  EExxppoorrttaannddoo SSiisstteemmaass ddee AArrqquuiivvooss

  A forma de exportar sistemas de arquivos com NFS não é totalmente
  consistente quando utilizada entre plataformas distintas. No caso
  Linux e Solaris 2 são distintos. Esta seção lista superficialmente a
  forma de como executar esta tarefa na maioria dos sistemas. Caso o seu
  sistema não esteja aqui descrito, deve-se checar as páginas de manual
  do sistema em questão. Palavras chaves são: nfsd, ferramentas de
  administração de sistemas, programas rc, programas de inicialização,
  seqüência de inicialização, /etc/exports, exportfs.  Usaremos como
  exemplo nesta seção como exportar /mn/parolin/local para a máquina
  batel com permissões de leitura e gravação.


  99..11..  IIRRIIXX,, HHPP--UUXX,, DDiiggiittaall--UUNNIIXX,, UUllttrriixx,, SSuunnOOSS 44 ((SSoollaarriiss 11)),, AAIIXX

  Estes sistemas usam o formato tradicional de exportação. Em
  /etc/exports deve ser incluído:


  ______________________________________________________________________
  /mn/parolin/local -rw=batel
  ______________________________________________________________________



  A documentação completa de exports pode ser encontrada na página de
  manual. Após editar este arquivo deve ser executado o comando exportfs
  -av para exportar os sistemas de arquivos.


  Em alguns sistemas a linha anterior pode ter o seguinte formato:


  ______________________________________________________________________
  /mn/parolin/local batel
  ______________________________________________________________________



  ou mesmo algo como:


  ______________________________________________________________________
  /mn/parolin/local rw=batel
  ______________________________________________________________________



  Recomenda-se a forma usual. O risco da próxima versão do exportfs ser
  diferente é grande e algumas coisas podem parar de funcionar.


  99..22..  SSoollaarriiss 22

  Sun reinventou completamente  a roda quando fez o Solaris 2, já que
  ele é completamente diferente de todos os outros sistemas
  operacionais. Deve-se editar o arquivo /etc/dfs/dfstab. Neste arquivos
  são colocados os comandos compartilhados, conforme documentado na
  página de manual share (1 Mb). A sintaxe será algo como:


  ______________________________________________________________________
  share -o rw=batel -d "Parolin  Local" /mn/parolin/local
  ______________________________________________________________________



  Após a edição deve-se executar o programa shareall para exportar o
  sistema de arquivos.


  1100..  PPCC--NNFFSS

  Não se deve rodar o PC-NFS. Neste caso o melhor é executar o samba.


  Desculpe, mas não conheço nada sobre o PC-NFS. Caso alguém queira
  colaborar por favor envie-me algumas informações e elas serão
  incluídas.