  Linux NFS HOWTO
  Nicolai Langfeldt jan@math.uio.no
  v0.7, 3 Novembre 1997

  (Adaptation  francaise  par Christophe Deleuze, deleuze@rp.lip6.fr, 27
  Novembre 1997). HOWTO decrivant l'installation de serveurs et  clients
  NFS.

  11..  PPrreeaammbbuullee

  11..11..  BBllaabbllaa lleeggaall

  (C)opyright  1997  Nicolai  Langfeldt et Alan Cox. Si vous modifiez ce
  document signalez le dans le copyright, sa distribution  est  libre  a
  condition  de conserver ce paragraphe. La section FAQ est basee sur la
  FAQ NFS compilee par Alan Cox. La section _C_h_e_c_k_l_i_s_t est basee sur  une
  _c_h_e_c_k_l_i_s_t des problemes de mount compilee par IBM Corporation.

  (C)opyright 1997 Christophe Deleuze pour la version francaise. Si vous
  lisez ce document sous le pont de  l'Alma,  veillez  a  respecter  les
  limitations de vitesse.

  11..22..  AAuuttrree bbllaabbllaa

  Ce  document  ne  sera jamais termine, merci de m'envoyer par mail vos
  problemes et  reussites,  cela  pourra  ameliorer  ce  HOWTO.  Envoyez
  argent, commentaires et questions a jan@math.uio.no. Si vous m'envoyez
  un mail, _v_e_r_i_f_i_e_z que l'adresse de retour soit correcte et fonctionne,
  je  recois  _b_e_a_u_c_o_u_p  de  mail  et  rechercher votre adresse mail peut
  representer beaucoup de travail. S'iouplait.

  Si vous voulez traduire ce HOWTO merci  de  me  le  signaler,  que  je
  puisse  savoir  en  quels  langages  j'ai  ete publie :-). Ndt : c'est
  fait...

  Remerciements a Olaf Kirch pour m'avoir convaincu d'ecrire ceci,  puis
  fourni de bonnes suggestions.

  Les  commentaires  sur  la  traduction  sont  a  envoyer  a Christophe
  Deleuze, deleuze@rp.lip6.fr.

  Ce HOWTO couvre NFS dans les version 2.0 du noyau. Il y a de  nombreux
  changements et ameliorations dans les versions 2.1.

  22..  LLIISSEEZZMMOOII..dd__aabboorrdd

  NFS,  le  systeme  de  fichiers  par  reseau, a trois caracteristiques
  importantes :

  +o  il permet le partage de fichiers sur un reseau ;

  +o  il marche suffisament bien ;

  +o  il cree tout un tas  de  problemes  de  securite  bien  connus  des
     crackers  qui peuvent facilement les exploiter pour obtenir l'acces
     (lecture, ecriture et effacement) a tous vos fichiers.

  Je parlerai de ces deux aspects dans ce HOWTO. Lisez bien  la  section
  securite  et  vous supprimerez quelques risques stupides. Ne dites pas
  que je ne vous ai pas prevenus. Les  passages  sur  la  securite  sont
  parfois assez techniques et demandent quelques connaissances en reseau
  IP. Si vous ne connaissez pas les termes  utilises  vous  pouvez  soit
  consulter  le  HOWTO  reseau, improviser ou vous procurer un livre sur
  l'administration de reseau TCP/IP pour vous familiariser avec  TCP/IP.
  C'est une bonne idee de toutes facons si vous administrez des machines
  UNIX/Linux. Un  tres  bon  livre  sur  le  sujet  est  _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  par  Craig Hunt, publie par O'Reilly  Associates, Inc.
  Et quand vous l'aurez lu et compris, vous vaudrez  plus  cher  sur  le
  marche du travail, vous ne pouvez qu'y gagner :-)

  Il  y  a  deux sections pour vous aider a regler vos problemes NFS, la
  _M_o_u_n_t _C_h_e_c_k_l_i_s_t et les _F_A_Q_s. Jetez-y  un  oeil  si  quelque  chose  ne
  marche pas comme prevu.

  33..  IInnssttaalllleerr uunn sseerrvveeuurr NNFFSS

  33..11..  CCoonnddiittiioonnss pprreeaallaabblleess

  Avant de continuer a lire ce HOWTO, vous aurez besoin de pouvoir faire
  des telnet dans les deux sens entre les machines que  vous  utiliserez
  comme  serveur  et  client.  Si cela ne fonctionne pas, voyez le HOWTO
  reseau et configurez correctement le reseau.

  33..22..  PPrreemmiieerrss ppaass

  Avant de faire quoi que ce soit d'autre, il nous faut un  serveur  NFS
  installe.   Si  vous  faites  partie  d'un  departement  reseau  d'une
  universite ou autre, il y a probablement un grand nombre  de  serveurs
  NFS  qui  tournent  deja.  Si votre but est d'utiliser un serveur deja
  installe alors vous pouvez sauter a la section 4.

  Si vous devez installer un serveur sur  une  machine  non  Linux  vous
  devrez  lire  les  pages  de  manuel  du  systeme pour trouver comment
  configurer le serveur NFS et l'exportation des  systemes  de  fichiers
  par  NFS.  Ce  HOWTO  contient une section decrivant les manipulations
  necessaires sur divers systemes. Ceci fait, vous pourrez passer  a  la
  section  suivante.  Ou continuer a lire cette section vu que certaines
  des choses que je vais dire sont pertinentes quel que soit le type  de
  machine que vous utilisez comme serveur.

  Nous allons maintenant configurer tout un tas de programmes.

  33..33..  LLee ppoorrttmmaappppeerr

  Le  portmapper  de  Linux est appele soit portmap soit rpc.portmap. La
  page de manuel sur mon systeme dit que c'est un convertisseur de  port
  DARPA vers numero de programme RPC. C'est la que se trouve la premiere
  faille de securite. La gestion de ce probleme est decrite a la section
  5, que, encore une fois, je vous invite tres fortement a lire.

  Lancez  le  portmapper.  Il  devrait etre dans le repertoire /usr/sbin
  (sur quelques machines il est appele rpcbind). Vous pouvez le lancer a
  la main pour cette fois mais il devra etre lance a chaque demarrage de
  la machine, il faudra donc creer ou editer les scripts rc. Les scripts
  rc  sont  decrits  dans  la page de manuel init, ils sont generalement
  dans /etc/rc.d, /etc/init.d ou /etc/rc.d/init.d. S'il y  a  un  script
  qui  a  un  nom  du genre inet, c'est probablement le script a editer.
  Mais ce qu'il faut ecrire ou faire sort du cadre de ce  HOWTO.  Lancez
  portmap,  et verifiez qu'il tourne avec ps -aux. Il y est ? Benissimo.

  33..44..  MMoouunnttdd eett nnffssdd

  Les prochains programmes a lancer sont mountd et nfsd. Mais d'abord il
  faut  editer un autre fichier, /etc/exports. Disons que je veux que le
  systeme de fichiers /mn/eris/local qui est sur la  machine  eris  soit
  disponible  sur la machine apollon. Je l'indique dans /etc/exports sur
  eris :

  ______________________________________________________________________
  /mn/eris/local  apollon(rw)
  ______________________________________________________________________

  La ligne ci-dessus donne a apollon un acces  en  lecture/ecriture  sur
  /mn/eris/local.  Au  lieu  de  rw on pourrait mettre ro pour _r_e_a_d _o_n_l_y
  (lecture  seule,  c'est  la  valeur  par  defaut).  D'autres   options
  existent,  et  je  parlerai  de quelques unes liees a la securite plus
  loin. Elles sont toutes decrites dans la page de manuel exports  qu'il
  faut  lire  au moins une fois dans sa vie. Il y a de meilleures facons
  de faire que de lister tous les hosts dans le fichier exports. Peuvent
  etre  autorises  a  monter  un  systeme  de  fichiers NFS, des groupes
  reseaux (_n_e_t _g_r_o_u_p_s) si vous utilisez NIS (ou  NYS,  auparavant  connu
  sous  le nom YP), des noms de domaines avec jokers et des sous reseaux
  IP. Mais il faudra verifier qui peut obtenir un acces au serveur  avec
  ce type d'autorisations groupees.

  Note  :  ce fichier exports n'utilise pas la meme syntaxe que d'autres
  Unix. Ce HOWTO contient une section sur la facon dont les autres  Unix
  exportent leurs fichiers.

  Maintenant  nous sommes prets a lancer mountd (ou peut-etre s'appelle-
  t-il rpc.mountd), puis nfsd (qui s'appelle  peut-etre  rpc.nfsd).  Ils
  liront tous deux le fichier exports.

  Si  vous  modifiez  /etc/exports, vous devrez vous assurer que nfsd et
  mountd savent que le fichier a change. La facon traditionnelle est  de
  lancer   exportfs.  Beaucoup  de  distributions  Linux  n'ont  pas  le
  programme exportfs. Si c'est le cas sur  votre  machine,  vous  pouvez
  installer ce script :

  ______________________________________________________________________
  #!/bin/sh
  killall -HUP /usr/sbin/rpc.mountd
  killall -HUP /usr/sbin/rpc.nfsd
  echo re-exported file systems
  ______________________________________________________________________

  Sauvez-le dans /usr/sbin/exportfs par exemple, et n'oubliez pas de lui
  appliquer chmod a+rx. Desormais, chaque fois que  vous  changez  votre
  fichier exports, lancez ensuite exportfs en root.

  Maintenant,  verifiez  que  mountd  et nfsd fonctionnent correctement.
  D'abord avec rpcinfo -p. Il devrait donner quelque chose du genre :

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

  On voit que le portmapper a annonce ses services, de meme  que  mountd
  et nfsd.

  Si  vous  obtenez  :  rpcinfo:  can't  contact portmapper: RPC: Remote
  system error - Connection refused ou quelque chose du style c'est  que
  le  portmapper  ne  tourne pas. Corrigez ca. Si vous obtenez No remote
  programs registered alors soit le portmapper ne veut pas vous  parler,
  soit  quelque  chose ne marche pas. Tuez nfsd, mountd et le portmapper
  et essayez de recommencer.

  Apres avoir verifie que le portmapper rend compte  des  services  vous
  pouvez verifier aussi avec ps. Le portmapper continuera a afficher les
  services meme si les programmes qui les offrent ont  crashe.  Il  vaut
  donc mieux verifier par ps si quelque chose ne marche pas.

  Bien  sur,  vous  devrez modifier vos fichiers systemes rc pour lancer
  mountd et nfsd au demarrage de la meme facon que le portmapper. Il y a
  de  tres  fortes  chances  que  les  scripts  existent  deja sur votre
  machine, vous aurez juste a  decommenter  les  bonnes  lignes  ou  les
  activer pour les bons _r_u_n_l_e_v_e_l_s (pardon niveaux d'execution) d'init.

  Quelques  pages de manuel avec lesquelles vous devriez etre familier :
  portmap, mountd, nfsd et exports.

  Bon, si vous avez tout fait exactement comme j'ai dit vous etes  prets
  a enchainer sur le client NFS.

  44..  IInnssttaalllleerr uunn cclliieenntt NNFFSS

  Tout  d'abord  il faudra compiler un noyau avec le systeme de fichiers
  NFS, soit compile dans le noyau, soit disponible sous forme de module.
  Si  vous  n'avez  encore  jamais compile un noyau vous aurez peut etre
  besoin  de  consulter  le  HOWTO  du  noyau.  Si  vous  utilisez   une
  distribution tres cool (comme Chapeau Rouge) et que vous n'avez jamais
  trifouille le noyau (pas toucher toucher) il y a des chances  que  NFS
  soit automagiquement disponible.

  Vous  pouvez  maintenant,  a  l'invite  (prompt)  du  root,  entrer la
  commande mount  appropriee  et  le  systeme  de  fichiers  apparaitra.
  Continuons  avec  l'exemple  de  la  section  precedente, nous voulons
  monter /mn/eris/local depuis eris. La commande est :

  ______________________________________________________________________
  mount -o rsize=1024, wsize=1024 eris:/mn/eris/local /mnt
  ______________________________________________________________________

  (Nous reviendrons plus tard  sur  les  options  rsize  et  wsize.)  Le
  systeme de fichiers est maintenant disponible sous /mnt et vous pouvez
  faire  un  cd  sur  lui,  puis  un  ls  et   regarder   les   fichiers
  individuellement.  Vous  remarquerez  que  ce  n'est  pas aussi rapide
  qu'avec un systeme de fichiers local, mais beaucoup plus pratique  que
  ftp.  Si,  au  lieu de monter le systeme de fichiers, mount renvoie un
  message d'erreur comme mount: eris:/mn/eris/local failed, reason given
  by  server:  Permission denied alors le fichier exports est incorrect,
  ou vous avez oublie de lancer exportfs apres avoir modifie le  fichier
  exports.  S'il  dit mount: clntudp_ipdate: RPC: Program not registered
  cela signifie que nfsd ou mountd ne tourne pas sur le serveur.

  Pour vous debarrasser du systeme de fichiers, vous pouvez faire :

  ______________________________________________________________________
  umount /mnt
  ______________________________________________________________________

  Pour que le systeme monte automatiquement un systeme de  fichiers  NFS
  au  demarrage,  editez  /etc/fstab de la facon habituelle. Par exemple
  avec une ligne comme celle-ci :

  ______________________________________________________________________
  # device       mountpoint    fs-type    options           dumps  sfckorder
  eris:/mn/eris/local   /mnt   nfs     rsize=1024,wsize=1024   0   0
  ______________________________________________________________________

  C'est presque tout ce qu'il y a a savoir. Vous pouvez  jeter  un  coup
  d'oeil a la page de manuel nfs. Continuons plize.

  44..11..  OOppttiioonnss ddee mmoonnttaaggee

  Il  y a trois comportements principaux des clients NFS en cas de chute
  du serveur qui sont specifies par les options de montage :

     ssoofftt
        Le client NFS renverra une erreur au processus concerne si apres
        quelques  essais  le  serveur NFS persiste a ne pas repondre. Si
        vous voulez utiliser cette option, vous devez verifier que votre
        logiciel  la gere correctement. Je ne recommande pas ce reglage.

     hhaarrdd
        Le client NFS reessaiera infiniment jusqu'a ce qu'il  soit  tue.
        Les  operations  reprendront  normalement  si  le serveur NFS se
        retablit ou redemarre. Le client ne pourra pas  etre  interrompu
        ou tue.

     hhaarrdd,,iinnttrr
        Comme hard, mais Ctrl-C tuera le processus bloque. Dans quelques
        cas, notament un disque /usr/spool/mail monte par  NFS  cela  ne
        changera  rien  car  le shell ignore le Ctrl-C quand il teste si
        vous avez du mail. Je recommande  cette  option  pour  ttoouuss  les
        systemes de fichiers NFS, y compris le _s_p_o_o_l du mail.

  Reprenons l'exemple precedent, votre entree fstab est maintenant :

  ______________________________________________________________________
  # device       mountpoint   fs-type    options            dumps  sfckorder
  eris:/mn/eris/local   /mnt  nfs   rsize=1024,wsize=1024,hard,intr 0   0
  ______________________________________________________________________

  44..22..  OOppttiimmiissaattiioonn ddee NNFFSS

  Normalement,  si les options rsize et wsize ne sont pas precisees, NFS
  ecrira et lira par blocs  de  4096  ou  8192  octets.  Mais  certaines
  combinaisons   de   noyau  Linux  et  cartes  reseau  ne  peuvent  pas
  fonctionner avec ces valeurs, de plus, meme si cela marche, cela  peut
  ne  pas  etre  optimal  du  tout.  Il nous faudra donc experimenter et
  trouver les valeurs de rsize et wsize qui fonctionnent et donnent  les
  transferts  les  plus  rapides.  Vous pouvez tester la vitesse obtenue
  avec differentes valeurs des options avec des  commandes  simples.  La
  commande  mount  ci-dessus ayant ete executee, si vous avez l'acces en
  ecriture sur le disque vous pouvez tester les performances en ecriture
  sequentielle :

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

  Ceci  cree  un  fichier  de  64  Mo  ne contenant que des 0. Faites-le
  quelques (5-10?) fois et prenez la moyenne des temps. C'est  le  temps
  `elapsed'  ou  `wall  clock' qui est le plus interessant. Ensuite vous
  pouvez tester les performances en lecture en relisant le fichier :

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

  faites le quelques fois et prenez la moyenne. Puis  demontez  (umount)
  et remontez (mount) avec des valeurs plus grandes pour rsize et wsize.
  Il vaut mieux prendre des multiples de 1024, et probablement pas  plus
  grand  que  16384  octets,  car  les gros blocs ralentissent les acces
  aleatoires.  Immediatement  apres  avoir  remounte  avec  une   taille
  superieure, placez vous (cd) dans le systeme de fichiers et faites des
  trucs comme ls, explorez un  peu  pour  verifier  que  tout  est  bien
  normal.  Si  la  valeur  de rsize/wsize est trop grande, les symptomes
  sont _v_r_a_i_m_e_n_t bizarres et pas evidents. Un symptome  typique  est  une
  liste  de  fichiers  donnee  par  ls  incomplete  sans  aucun  message
  d'erreur. Ou la lecture de fichier qui echoue mysterieusement et  sans
  message  d'erreur. Apres vous etre assures que les wsize/rsize choisis
  fonctionnent, vous pouvez faire les  tests  de  rapidite.  Differentes
  plateformes   de   serveur  auront  peut-etre  des  tailles  optimales
  differentes. SunOS et Solaris sont reputes  pour  etre  beaucoup  plus
  rapides avec une taille de 4096 octets.

  Les  noyaux  Linux  recents  (depuis  1.3)  font  parfois des lectures
  anticipees (_r_e_a_d _a_h_e_a_d) pour des  rsizes  superieurs  ou  egaux  a  la
  taille  de  page de la machine. Sur les processeurs Untel la taille de
  la  page  est  de  4096  octets.  La  lecture   anticipee   augmentera
  _s_e_n_s_i_b_l_e_m_e_n_t  les  performances  en  lecture. Sur une machine Untel on
  devrait donc choisir un rsize de 4096 si c'est possible.

  Un  truc  pour  augmenter  les  performances  d'ecriture  de  NFS  est
  d'invalider   les   ecritures   synchrones   sur   le   serveur.   Les
  specifications de NFS disent que les requetes  d'ecriture  de  NFS  ne
  doivent  pas etre considerees comme terminees avant que les donnees ne
  soient sur un medium  non  versatile  (normalement  le  disque).  Ceci
  reduit  les  performances a l'ecriture, les ecritures asynchrones sont
  plus rapides. Le nfsd Linux ne fait  pas  d'ecritures  synchrones  car
  l'implementation du systeme de fichiers ne s'y prete pas, mais sur les
  serveurs non-Linux vous pouvez augmenter  les  performances  de  cette
  facon dans votre fichier exports :

  ______________________________________________________________________
  /dir    -async, access=linuxbox
  ______________________________________________________________________

  ou quelque chose du genre. Referez-vous a la page de manuel exports de
  la machine concernee. Notez que ceci augmente les risques de perte  de
  donnees.

  55..  NNFFSS ssuurr lleess lliiggnneess aa ffaaiibbllee ddeebbiitt

  Les  lignes  lentes  (a  faible debit) comprennent les modems, RNIS et
  aussi sans doute les autres connexions longue distance.

  Cette section est basee sur la connaissance  des  protocoles  utilises
  mais pas sur des experimentations. Mon ordinateur personnel est eteint
  depuis 6 mois Ndt : qoaqonnenaafout ? (probleme de disque dur, pas  de
  fric)  et  donc je n'ai pas pu utiliser de connexion modem pour tester
  ceci :-)

  La premiere chose a retenir est que NFS est un protocole lent. Il a un
  grand  _o_v_e_r_h_e_a_d  (sur-cout  en  bande  passante).  Utiliser NFS, c'est
  presque comme utiliser kermit pour transferer  des  fichiers.  Il  est
  _l_e_n_t.  Presque tout est plus rapide que NFS. FTP est plus rapide. HTTP
  est plus rapide. rcp est plus rapide. ssh est plus rapide.

  Vous voulez toujours l'essayer ? Ok.

  Par defaut NFS est parametre pour  des  lignes  rapides  et  a  faible
  latence.  Si  vous utilisez les parametres par defaut sur des lignes a
  grande latence cela peut provoquer des erreurs, des  annulations,  des
  retrecissements de fichiers, et des comportements bizarres.

  La  premiere  chose a faire est de ne _p_a_s utiliser l'option de montage
  soft. Les temporisations retourneront des erreurs  au  logiciel,  qui,
  dans l'immense majorite des cas, ne saura pas quoi en faire. C'est une
  bonne facon d'avoir des problemes bizarres. Utilisez  plutot  l'option
  de  montage  hard. Quand hard est actif les temporisations declenchent
  des essais infinis au lieu d'annuler ce que le logiciel etait en train
  de faire (quoi que ce soit). C'est ce que vous voulez. Vraiment.

  La  deuxieme  chose a faire est d'ajuster les options de montage timeo
  et retrans. Elles sont decrites dans la  page  de  manuel  nfs(5),  en
  voici un extrait (version francaise) :

  ______________________________________________________________________
         timeo=n        La valeur,  en  dixiemes  de  secondes,  du
                        delai   avant  de  declencher  la  premiere
                        retransmission d'une RPC.   La  valeur  par
                        defaut  est 7/10 de seconde. Apres une pre
                        miere expiration, le delai  est  double  et
                        l'on recommence les retransmissions jusqu'a
                        ce que le delai atteigne la valeur maximale
                        de 60 secondes, ou que le nombre maximal de
                        retransmission soit depasse.  Il se produit
                        alors  une  erreur  d'expiration majeure de
                        delai.  Si le systeme est monte  "en  dur",
                        les  retransmissions  reprendront a nouveau
                        indefiniment.

                        On peut ameliorer les performances en  aug
                        mentant  le delai sur un  reseau charge, si
                        le serveur est un  peu  lent,  ou  si  l'on
                        traverse plusieurs routeurs ou passerelles.

         retrans=n      Le  nombre  d'expirations  mineures  et  de
                        retransmissions  qui  doivent  se  produire
                        avant de declencher une expiration majeure.
                        La  valeur  par  defaut  est  3 expirations
                        mineures.  Quand  une  erreur  d'expiration
                        majeure  se  produit,  soit l'operation est
                        abandonnee, soit  un  message  "server  not
                        responding" est affiche sur la console.
  ______________________________________________________________________

  En   d'autres  mots  :  si  une  reponse  n'est  pas  recue  avant  la
  temporisation de 0,7 seconde (700  ms),  le  client  NFS  repetera  la
  requete  et  doublera  la  temporisation  a 1,4 seconde. Si la reponse
  n'arrive pas dans les 1,4 seconde, la requete est repetee a nouveau et
  la temporisation est doublee a 2,8 secondes.

  La  vitesse  de  la  ligne  peut  etre  mesuree avec un ping ayant vos
  valeurs de rsize/wsize comme taille de paquet.

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

  Le temps indique est celui que le paquet du ping a pris pour aller  et
  revenir  de  lugulbanda. 15 ms, c'est assez rapide. Sur une ligne a 28
  800 bps vous pouvez vous attendre a une valeur de l'ordre de 4000-5000
  ms,  et  si  la  ligne  est  chargee  ce temps sera encore plus eleve,
  facilement le double. En general, la latence augmente avec  la  taille
  des  paquets et la charge de la ligne. Si vous comptez utiliser FTP et
  NFS en meme temps il faudra mesurer  les  temps  du  ping  pendant  un
  transfert FTP.

  66..  NNFFSS eett llaa sseeccuurriittee

  Je  ne suis en aucun cas un expert en securite informatique. Mais j'ai
  traine dans le secteur et j'ai un  _p_e_t_i_t  conseil  pour  ceux  qui  se
  preoccupent  de  la  securite. Mais attention. Ce n'est pas absolument
  pas une liste complete des problemes lies a NFS et si vous pensez etre
  en  securite  une  fois  que vous avez lu et mis en pratique tout ceci
  alors j'ai un pilier de pont (presque neuf) a vous vendre.

  Cette section n'a probablement pas  d'interet  si  vous  etes  sur  un
  reseau  _f_e_r_m_e  ou vous avez confiance en tous les utilisateurs, et que
  personne en qui vous n'avez pas confiance ne peut obtenir un acces sur
  les  machines du reseau. I.e., il ne devrait y avoir aucun moyen de se
  connecter a votre reseau depuis l'exterieur  et  il  ne  devrait  etre
  relie  a  aucun  autre reseau ou vous n'avez pas confiance en tous les
  utilisateurs et en sa securite. Vous pensez que je suis parano  ?  Pas
  du  tout.  C'est  un conseil de securite _d_e _b_a_s_e. Et rappelez-vous que
  c'est juste le commencement. Un site _s_u_r necessite  un  administrateur
  consciencieux  et  bien  informe qui sait ou trouver l'information sur
  les problemes de securite existants ou potentiels.

  Un probleme de base de NFS est que le client, si on ne lui demande pas
  le  contraire,  fera  confiance  au serveur NFS et vice-versa. Ca peut
  etre mauvais. Cela signifie que si le compte root du serveur est casse
  (_b_r_o_k_e_n  _i_n_t_o)  il  peut  etre tres facile de casser le compte root du
  client. Et vice versa. Il y a quelques moyens de gerer ce probleme sur
  lesquels nous reviendrons.

  Les documents consultatifs (_a_d_v_i_s_o_r_i_e_s) du CERT sur NFS sont une bonne
  source d'information, la plupart  des  problemes  (et  des  solutions)
  evoquees   ci-dessous   sont   traites   dans   ces  documents.  Voyez
  ftp.cert.orf/01-README pour une liste a jour.  En  voici  quelques-uns
  lies a NFS (il n'y a pas a ma connaissance de version francaise) :

  ______________________________________________________________________
  CA-91:21.SunOS.NFS.Jumbo.and.fsirand                            12/06/91
       Vulnerabilities concerning Sun Microsystems, Inc. (Sun) Network
       File System (NFS) and the fsirand program.  These vulnerabilities
       affect SunOS versions 4.1.1, 4.1, and 4.0.3 on all architectures.
       Patches are available for SunOS 4.1.1.  An initial patch for SunOS
       4.1 NFS is also available. Sun will be providing complete patches
       for SunOS 4.1 and SunOS 4.0.3 at a later date.

  CA-94:15.NFS.Vulnerabilities                                    12/19/94
       This advisory describes security measures to guard against several
       vulnerabilities in the Network File System (NFS). The advisory was
       prompted by an increase in root compromises by intruders using tools
       to exploit the vulnerabilities.

  CA-96.08.pcnfsd                                                 04/18/96
       This advisory describes a vulnerability in the pcnfsd program (also
       known as rpc.pcnfsd). A patch is included.
  ______________________________________________________________________

  66..11..  SSeeccuurriittee dduu cclliieenntt

  Du  cote  client il y a quelques options de mount qui permettent de ne
  pas faire trop confiance  au  serveur.  L'option  nosuid  interdit  le
  demarrage  de  programmes  suid  du systeme de fichiers NFS. C'est une
  option a utiliser  systematiquement,  car  elle  empeche  le  root  du
  serveur  de creer un fichier suid sur le systeme de fichiers NFS, puis
  de se loger dans le client en utilisateur et de  lancer  le  programme
  suid   pour  devenir  root  sur  le  client.  Il  est  aussi  possible
  d'interdire l'execution des fichiers du systeme de fichiers  NFS  avec
  l'option  noexec. Mais ceci est beaucoup moins utile que nosuid car le
  systeme de fichiers contiendra tres  probablement  au  moins  _q_u_e_l_q_u_e_s
  scripts  ou  programmes  a  executer.  Ces options se rentrent dans la
  colonne d'options, avec wsize et rsize, separees par des virgules.

  66..22..  SSeeccuurriittee dduu sseerrvveeuurr :: nnffssdd

  Du cote serveur on peut ne pas faire confiance au root du client, avec
  l'option root_squash (rembarrage du root :-) dans le fichier exports :

  ______________________________________________________________________
  /mn/eris/local apollon(rw, root_squash)
  ______________________________________________________________________

  Dans ce cas, si un utilisateur du client avec l'UID 0 essaye d'acceder
  (en  lecture,  ecriture  ou  effacement)  au  systeme  de fichiers, le
  serveur remplace l'UID par celui de l'utilisateur `nobody' du serveur.
  Ceci   signifie   que   l'utilisateur   root   du   client   ne   peut
  acceder/modifier les fichiers du serveur que seul le root  du  serveur
  peut  acceder/modifier.  C'est  bien,  et  vous  aurez  probablement a
  utiliser cette option sur tous  les  systemes  de  fichiers  que  vous
  exportez.  J'en  entends  un  qui me dit : "Mais l'utilisateur root du
  client peut toujours utiliser  'su'  pour  devenir  n'importe  qui  et
  acceder  a  ses  fichiers  !" Et la je reponds : "Oui, c'est comme ca,
  c'est Unix." Ceci a une consequence importante : tous les fichiers  et
  binaires  importants  devraient  appartenir  a  root, et pas bin ou un
  compte autre que root, car le seul compte auquel le root du client  ne
  peut  pas  acceder  est  le  compte  root du serveur. Plusieurs autres
  options permettant de ne pas faire confiance a qui ne vous  plait  pas
  sont  enumerees  dans la page de manuel nfsd. Il y a aussi des options
  pour rembarrer (_t_o _s_q_u_a_s_h) des intervalles d'UID ou GID.

  Il est important aussi de s'assurer que nfsd verifie  que  toutes  les
  requetes  viennent  d'un port privilegie. S'il accepte les requetes de
  n'importe quel port du client, un utilisateur quelconque peut executer
  un  programme qu'il est facile de se procurer sur l'Internet. Il parle
  le protocole NFS et pourra pretendre etre n'importe qui et  etre  cru.
  Ca  fait  peur  hein  ?  Le nfsd Linux effectue cette verification par
  defaut, sur d'autres systemes d'exploitation il faut  la  valider.  Ca
  devrait etre decrit dans la page man de ce systeme.

  Autre chose. N'exportez jamais un systeme de fichiers vers `localhost'
  ou 127.0.0.1.  Croyez-moi.

  66..33..  SSeeccuurriittee dduu sseerrvveeuurr :: llee ppoorrttmmaappppeerr

  Le portmapper de base, en combinaison avec nfsd presente  un  probleme
  de conception qui rend possible de recuperer les fichiers d'un serveur
  NFS sans avoir aucun privilege. Heureusement le  portmapper  de  Linux
  est relativement sur vis a vis de cette attaque, et peut etre securise
  en configurant les listes d'acces au moyen de deux fichiers.

  Tout d'abord, editons /etc/hosts.deny. Il devrait contenir la ligne :

  ______________________________________________________________________
  portmap: ALL
  ______________________________________________________________________

  qui refusera l'acces a _q_u_i_c_o_n_q_u_e. C'est peut  etre  un  peu  excessif,
  nous   re-ouvrons   donc   un   peu  l'acces  en  editant  le  fichier
  /etc/hosts.allow. Mais il faut d'abord savoir ce qu'on va y mettre.  A
  la  base,  il  devrait  contenir  les  noms de toutes les machines qui
  doivent avoir acces a votre portmapper. Sur le systeme Linux moyen  il
  y  a  tres  peu  de  machines qui ont une bonne raison de demander cet
  acces. Le portmapper administre nfsd, mountd, ypbind/ypserv, pcnfsd et
  les  services  ``en r'' comme ruptime et rusers. Parmis ceux-ci, seuls
  nfsd, mountd, ypbind/ypserv et peut-etre pcnfsd ont  de  l'importance.
  Toutes  les machines qui ont besoin d'acceder a ces services sur votre
  machine devraient y etre autorisees.  Disons  que  votre  machine  est
  129.240.223.254   et   que   tout  ce  qui  vit  sur  le  sous  reseau
  129.240.223.0 doit pourvoir y acceder (si ceci n'est  pas  clair  pour
  vous, voyez le HOWTO reseau). On ecrit :

  ______________________________________________________________________
  portmap: 129.240.223.0/255.255.255.0
  ______________________________________________________________________

  dans hosts.allow. C'est l'adresse de reseau que vous donnez aussi a la
  commande route et le masque de reseau que vous donnez a ifconfig. Pour
  le periferique eth0 sur cette machine ifconfig devrait donner :

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

  et netstat -rn devrait donner :

  ______________________________________________________________________
  Kernel routing table
  Destination     Gateway         Genmask         Flags Metric Ref Use    Iface
  129.240.223.0   0.0.0.0         255.255.255.0   U     0      0   174412 eth0
  ______________________________________________________________________

  (Adresse reseau dans la premiere colonne).

  Les  fichiers hosts.deny et hosts.allow sont decrits dans les pages de
  manuel de memes noms.

  IIMMPPOORRTTAANNTT : ne _r_i_e_n mettre d'autre que des  adresses  IP  (numeriques)
  dans  les  lignes  portmap  de  ces  fichiers.  Les  _h_o_s_t  _n_a_m_e _l_o_o_k_u_p
  (recherche  d'adresse   IP   (numerique)   a   partir   de   l'adresse
  alphanumerique    ex.    ftp.lip6.fr   donne   132.227.77.2)   peuvent
  indirectement declencher une activite portmap qui declenchera un  _h_o_s_t
  _n_a_m_e _l_o_o_k_u_p qui declenchera...

  Ceci  fait,  votre serveur devrait etre un peu plus solide. Le dernier
  probleme (mais oui !) est que quelqu'un casse le compte root (ou boute
  MS-DOS)  sur  une  machine  de  confiance et utilise ce privilege pour
  envoyer des requetes depuis un port sur  en  se  faisant  passer  pour
  n'importe quel utilisateur.

  66..44..  NNFFSS eett lleess ccoouuppeenntt--ffeeuu ((ffiirreewwaallllss))

  C'est  une tres bonne idee de _f_i_r_e_w_a_l_l_e_r les ports NFS et portmap dans
  votre routeur ou firewall. nfsd utilise le port 2049, que ce soit avec
  tcp  ou  udp. Le portmapper est au port 749 (tcp et udp) et mountd aux
  port 745 et 747 (tcp et udp). Verifiez  les  ports  avec  la  commande
  rpcinfo -p.

  Si  au  contraire  vous voulez que NFS traverse un firewall, il existe
  des options sur les nfsd et mountd recents pour leur specifier le port
  a  utiliser.  Vous  pouvez donc choisir un port qui ne soit pas bloque
  par le firewall.

  66..55..  RReessuummee

  Si vous configurez correctement votre installation portmapper/NFS avec
  hosts.allow/deny,  root_squash,  nosuid et les ports privilegies, vous
  evitez beaucoup des bogues connues  de  NFS  et  pouvez  presque  vous
  sentir  en securite au moins pour _c_a. Mais de toutes facons : quand un
  intrus obtient l'acces a votre reseau, il/elle peut  faire  apparaitre
  des  commandes  bizarres  dans  votre  .forward  ou dans votre fichier
  mailbox quand /home ou /var/spool/mail sont montes par  NFS.  Pour  la
  meme raison, vous ne devriez jamais acceder a votre cle privee PGP par
  NFS. Ou au moins vous devez savoir quel est le risque.  Et  maintenant
  vous savez un peu.

  NFS  et le portmapper constituent un systeme complexe et il n'est donc
  pas totalement exclu que de nouvelles bogues soient decouvertes,  soit
  dans  la  conception soit dans l'implementation que nous utilisons. Il
  pourrait meme y avoir des defauts de securite  connus,  que  quelqu'un
  utilise.  Mais  c'est la vie. Pour vous tenir au courant, vous devriez
  au    moins    lire    les    forums     comp.os.linux.announce     et
  comp.security.announce  comme  minimum  absolu (en francais, consultez
  fr.comp.os.linux.annonces ).

  77..  ````CChheecckklliisstt'''' mmoouunntt

  Cette section est basee sur la _m_o_u_n_t _c_h_e_c_k_l_i_s_t  (liste  des  problemes
  lies a mount) de IBM Corp. Je les remercie de m'autoriser a l'utiliser
  dans ce HOWTO. Si vous avez un  probleme  en  montant  un  systeme  de
  fichiers NFS, consultez cette liste avant de poster votre probleme sur
  les niouzes. Chaque point decrit un type de probleme et sa solution.

  1. Systeme de fichier  non  exporte,  ou  non  exporte  au  client  en
     question.

     SSoolluuttiioonn :: exportez le Ndt : merci IBM !

  2. La resolution de noms ne s'accorde pas avec la liste des exports.

     e.g.:  la liste des exports dit d'exporter vers johnmad mais le nom
     de johnmad est resolu en johnmad.austin.ibm.com. La  permission  de
     monter est refusee.

     SSoolluuttiioonn :: exportez vers les deux formes du nom.

     Cela  peut  aussi  arriver si le serveur a deux interfaces avec des
     noms differents et que les exports n'en specifient qu'un.

     SSoolluuttiioonn :: exportez les deux interfaces.

     Cela peut aussi se produire si le serveur  ne  peut  pas  faire  un
     lookuphostbyname  ou  lookuphostbyaddr  (ce  sont  des fonctions de
     bibliotheque) sur le client. Assurez-vous que le client peut  faire
     host  <name>;  host  <ip_addr>;  et  que  les  deux donnent la meme
     machine.

     SSoolluuttiioonn :: mettez de l'ordre dans la resolution de noms.

  3. Le systeme de fichiers a ete monte apres que NFS soit lance (sur ce
     serveur).  Dans ce cas le serveur exporte le point de montage sous-
     jacent, pas le systeme de fichiers.

     SSoolluuttiioonn :: eteignez NFSd et relancez le.
     NNoottee :: les clients qui avaient monte  le  point  de  montage  sous-
     jacent auront des problemes pour y acceder apres le redemarrage.

  4. La  date  est  tres  decalee sur une ou sur les deux machines (cela
     peut mettre la pagaille pour make)

     SSoolluuttiioonn :: reglez correctement la date.

     L'auteur du HOWTO recommande d'utiliser NTP pour  synchroniser  les
     horloges.  Vu  qu'il  y a des restrictions a l'exportation (au sens
     commercial !) de NTP aux E.U., vous devez vous  procurer  NTP  pour
     debian,          redhat         ou         slackware         depuis
     ftp://ftp.hacktic.nl/pub/replay/pub/linux ou un mirroir.

  5. Le serveur ne peut pas utiliser un mount d'un utilisateur  qui  est
     dans plus de 8 groupes.

     SSoolluuttiioonn  ::  diminuez  le  nombre de groupes auxquels l'utilisateur
     appartient ou montez depuis un autre utilisateur.

  88..  FFAAQQ

  Voici la section FAQ. La majeure partie en a ete ecrite par Alan  Cox.

  1. J'obtiens un tas d'erreurs 'stale nfs handle' quand j'utilise linux
     comme serveur nfs.

     Cela est du a une bogue dans quelques vieilles  versions  de  nfsd.
     Elle est corrigee a partir de nfs-server2.2beta16.

  2. Quand j'essaye de monter le systeme de fichiers j'obtiens

           can't register with portmap: system error on send

  Vous  utilisez  probablement un systeme Caldera. Il y a une bogue dans
  les scripts rc. Contactez Caldera pour obtenir la solution.

  3. Pourquoi ne puis-je pas executer un fichier apres l'avoir copie sur
     le serveur NFS ?

     La raison est que nfsd cache les manipulations de fichiers pour des
     raisons de performances (rappelons qu'il fonctionne  dans  l'espace
     utilisateur). Ainsi, apres une ecriture le fichier peut ne pas etre
     ferme tout de suite, et tant qu'il est  ouvert  le  noyau  ne  vous
     autorisera pas a l'executer. Les nfsd plus recents que le printemps
     95 Ndt  :  hum...  ferment  les  fichiers  ouverts  apres  quelques
     secondes,  les  plus  vieux  pouvaient  ne  pas  les relacher avant
     plusieurs jours...

  4. Mes fichiers NFS sont tous en lecture seule.

     Le serveur NFS Linux est par defaut  en  lecture  seule.  RTFM  les
     pages   de   manuel  ``exports''  et  nfsd.  Vous  devrez  modifier
     /etc/exports.

  5. Je monte depuis un serveur NFS Linux, ls marche et pourtant  je  ne
     peux pas lire ou ecrire de fichiers.

     Sur  les  anciennes versions de Linux il faut monter un serveur NFS
     avec rsize=1024, wsize=1024.

  6. Je monte depuis un serveur  NFS  Linux  avec  une  taille  de  bloc
     comprise entre 3500 et 4000 et Linux crashe regulierement.

     Bah alors ne le faites pas. !

  7. Est-ce que Linux peut utiliser NFS sur TCP ?

     Non, pas pour le moment.

  8. J'ai  des tonnes d'erreurs bizarres en essayant de monter depuis un
     serveur Linux.

     Assurez-vous que vos utilisateurs sont dans 8 groupes  au  maximum.
     C'est une limitation des vieux serveurs.

  9. Quand je redemarre ma machine elle se bloque parfois en essayant de
     demonter un serveur NFS bloque (_h_u_n_g).

     Ne demontez ppaass les serveurs NFS  en  redemarrant  ou  arretant  la
     machine, ca ne creera pas de problemes si vous ne le faites pas. La
     commande est umount -avt nonfs.

  10.
     Les clients NFS Linux sont tres lents quand ils  ecrivent  sur  des
     systemes Sun ou BSD.

     Normalement  les  ecritures  NFS  sont  synchrones  (vous pouvez le
     desactiver si vous ne craignez pas  de  perdre  des  donnees).  Les
     noyaux  derives de BSD ont tendance a ne pas savoir travailler avec
     des petits blocs. Ainsi quand vous ecrivez 4K de donnees depuis  un
     client linux dans des paquets de 1K, BSD fait ceci :

                  lit une page de 4K
                  traite 1K
                  ecrit 4K sur le disque
                  lit une page de 4K
                  traite 1K
                  ecrit 4K sur le disque
                  ...

  99..  EExxppoorrtteerr uunn ssyysstteemmee ddee ffiicchhiieerrss

  Bien  sur,  la facon d'exporter les systemes de fichiers par NFS n'est
  pas toujours la meme sur toutes les plateformes. Linux  et  Solaris  2
  sont  les  plus deviants. Cette section liste de maniere superficielle
  la facon de proceder sur la plupart des  systemes.  Si  votre  systeme
  n'est  pas traite ici, cherchez dans vos pages de manuel. Les mot-cles
  sont : nfsd, system administration tool,  rc  scripts,  boot  scripts,
  boot  sequence,  /etc/exports,  exportfs. J'utiliserai le meme exemple
  tout au long de cette section : comment exporter  /mn/eris/local  vers
  apollon en lecture/ecriture.

  99..11..  IIRRIIXX,, HHPP--UUXX,, DDiiggiittaall--UUNNIIXX,, UUllttrriixx,, SSuunnOOSS 44 ((SSoollaarriiss 11)),, AAIIXX

  Ces  SE  utilisent  le  format  export  traditionnel  de   Sun.   Dans
  /etc/exports, ecrivez :

  ______________________________________________________________________
  /mn/eris/local -rw=apollon
  ______________________________________________________________________

  La  documentation  complete  se trouve dans la page de manuel exports.
  Apres avoir edite le fichier, lancez exportfs -av  pour  exporter  les
  systemes de fichiers.

  La  rigueur de la syntaxe demandee par exportfs varie. Sur certains SE
  vous verrez que la ligne precedente peut etre :

  ______________________________________________________________________
  /mn/eris/local apollon
  ______________________________________________________________________

  ou meme quelque chose de degenere comme :

  ______________________________________________________________________
  /mn/eris/local rw=apollon
  ______________________________________________________________________

  Je recommande d'utiliser  la  syntaxe  stricte.  Il  se  peut  que  la
  prochaine  version  de  exportfs  soit  plus exigeante vis a vis de la
  syntaxe et ne fonctionne plus.

  99..22..  SSoollaarriiss 22

  Sun ont completement reinvente la roue quand ils ont fait  Solaris  2,
  et  donc c'est completement different des autres SE. Il faut editer le
  fichier /etc/dfs/dfstab et y placer les commandes de  partage  (_s_h_a_r_e)
  documentees dans la page de manuel share(1M), comme ceci :

  ______________________________________________________________________
  share -o rw=apollon -d "Eris Local" /mn/eris/local
  ______________________________________________________________________

  Lancez  ensuite  le  programme  shareall pour exporter les systemes de
  fichiers.

  1100..  PPCC--NNFFSS

  Vous ne devriez pas utiliser PC-NFS, mais plutot samba.

  Desole : je ne connais rien a PC-NFS. Si quelqu'un  se  sent  d'ecrire
  quelque chose dessus, qu'il le fasse et je l'insererai ici.

