NFS HOWTO
 Nicolai Langfeldt [email protected]
 Version 1.0, 1 Ottobre 1999

 COME installare NFS su client e server. Traduzione di
 [email protected].

 1.  Introduzione

 1.1.  Note legali

 (C)opyright 1997-1999 Nicolai Langfeldt and Ron Peters. Do not modify
 without amending copyright, distribute freely but retain this
 paragraph. The FAQ section is based on a NFS FAQ compiled by Alan Cox.
 The Checklist section is based on a mount problem checklist compiled
 by the IBM Corporation. The nfs-server-on-a-floppy section was written
 by Ron Peters.


      L'unica licenza valida � quella originale in lingua inglese.
      Di seguito ne trovate una traduzione abbastanza fedele che
      per� non ha alcun valore.


 I diritti appartengono a Nicolai Langfeldt. Non modificare nulla senza
 allegare il copyright, distribuisci liberamente ma mantieni questo
 paragrafo. La sezione sulle FAQ � basata sulle NFS FAQ di Alan Cox. La
 sezione Elenco di verifica � basata su un problema di mount compilato
 da IBM Corporation.


 1.2.  Liberatoria

 N� Nicolai Langfeldt, n� Ron Peters, n� i relativi datori di lavoro o
 chiunque altro, si assumono la responsabilit� di quanto pu� accadere
 se seguirete le istruzioni di questo documento. Se stabilite di
 seguire comunque le istruzioni, buona fortuna!


 1.3.  Commenti e critiche

 Questo non sar� mai un documento finito, inviatemi una mail se
 incontrate problemi o successi, potreste contribuire a migliorare
 questo documento. Inviate denaro, commenti e/o domande a
 [email protected] oppure a [email protected] nel caso di un server
 NFS relativo ai floppy. Se inviate una e-mail accertatevi che
 l'indirizzo di risposta sia corretto e funzionante. Ricevo molte mail
 e accertarmi di ogni indirizzo sarebbe troppo oneroso.


 1.4.  Altri argomenti

 Se desiderate tradurre questo HOWTO fatemelo sapere cos� terr� traccia
 di quante lingue hanno pubblicato il documento :-)


 Ringrazio Olaf Kirch che mi ha fornito spunti e suggerimenti per
 questo scritto :-)


 1.5.  Dediche

 Questo HOWTO � dedicato ad Anne Line Norheim Langfeldt. Probabilmente
 non lo legger� mai perch� non � quel tipo di ragazza.


 2.  LEGGIMI

 NFS (Network File System), il sistema di condivisione dei dischi via
 rete, ha tre caratteristiche importanti:


 �  Rende possibile la condivisione dei file in rete.

 �  Funziona abbastanza bene.

 �  Apre dei buchi di sicurezza che sono conosciuti dai cracker e
    facilmente utilizzabili per ottenere accesso (lettura, scrittura e
    cancellazione) a tutti i vostri file.


 Parler� di questi argomenti nel presente HOWTO. Accertatevi di leggere
 la sezione relativa alla sicurezza e sarete in grado di limitare al
 minimo la vulnerabilit� e i rischi. La sezione sulla sicurezza
 contiene dei passi piuttosto tecnici e richiede alcune conoscenze di
 reti IP e i termini a esse relativi. Se non capite la terminologia
 utilizzata fate un passo indietro e leggete il Networking HOWTO oppure
 acquistate un libro relativo all'amministrazione di reti TCP/IP per
 familiarizzare con TCP/IP. � comunque una buona idea se amministrate
 macchine UNIX/Linux. Un ottimo libro al riguardo � TCP/IP Network
 Administration di Craig Hunt, pubblicato da O'Reilly & Associates,
 Inc. Dopo averlo letto e capito, avrete un maggior valore sul mercato
 del lavoro :)


 Ci sono due sezioni per aiutarvi nella soluzione dei problemi di NFS,
 chiamate Elenco di verifica di mount e FAQ. Fate riferimento a esse se
 qualcosa non dovesse funzionare come previsto.


 Il sito primario per nfsd per Linux 2.0 � ftp.mathematik.th-
 darmstadt.de:/pub/linux/okir, nel caso aveste bisogno di scaricarlo e
 compilarlo.


 Per informazioni su NFS in relazione a Linux 2.2 fate riferimento a
 ``NFS in Linux 2.2''.


 3.  Configurare un server NFS

 3.1.  Prerequisiti

 Prima di continuare a leggere questo HOWTO dovete essere in grado di
 fare telnet tra due macchine che avete intenzione di configurare come
 client e server.  Se non siete in grado di farlo, leggete il
 networking/NET-2 HOWTO per installare e configurare correttamente la
 rete.


 3.2.  Il primo passo

 Prima di fare qualsiasi altra cosa, abbiamo bisogno di configurare un
 server NFS. Se fate parte di un dipartimento o universit�
 probabilmente ce ne saranno molti altri gi� configurati. Se avete
 accesso a tali server o state leggendo questo HOWTO per utilizzarli,
 non avete bisogno di leggere questa sezione e potete passare
 direttamente alla sezione ``Configurazione di un client NFS''


 Se avete bisogno di installare NFS su una macchina che non abbia
 Linux, allora dovete leggere il manuale di sistema per scoprire come
 abilitare il servizio di NFS ed esportare i file tramite NFS. C'� una
 sezione apposita in questo HOWTO su come farlo su molti sistemi
 diversi. Dopo aver configurato tutto, potete passare alla sezione
 successiva. Oppure leggete altre parti di questa sezione poich� alcune
 cose che saranno dette potrebbero essere interessanti anche per altri
 sistemi, indipendentemente dal tipo di macchina che volete usare come
 server.


 Se siete di fretta, fate riferimento alla sezione ``NFS in Linux 2.2''
 prima di continuare a leggere questo HOWTO.


 Quelli di voi che continueranno a leggere, avranno bisogno di
 configurare alcuni programmi.


 3.3.  Il portmapper

 Il portmapper su Linux pu� chiamarsi sia portmap sia rpc.portmap. La
 pagina man sul mio sistema dice che � un "DARPA port to RPC program
 number mapper". Questo � il primo buco di sicurezza che aprite. La
 descrizione per chiudere alcuni di questi buchi � nella sezione
 ``Sicurezza e NFS'', che vi consiglio di leggere con urgenza.


 Avvio del portmapper. Lo si pu� fare in due modi: portmap oppure
 rpc.portmap e li dovreste trovare nella directory /usr/sbin (su alcune
 macchine si chiama rpcbind). Per ora lo potete avviare manualmente, ma
 � necessario che venga lanciato ogni volta che si riavviia la macchina
 e per questo motivo dovrete creare/modificare i vostri script rc. Gli
 script rc sono descritti in maggior dettaglio nella pagina man di
 init, in genere si trovano in /etc/rc.d, /etc/init.d oppure
 /etc/rc.d/init.d.  Se c'� uno script che ha il nome simile a inet
 probabilmente � lo script giusto da modificare. Ci� che dovete
 scriverci va oltre lo scopo di questo HOWTO.  Avviate portmap e
 controllate che esso sia correttamente partito con il comando ps aux.
 � partito? Bene.


 Ancora una cosa. L'accesso remoto al portmapper � regolato dal
 contenuto dei file /etc/hosts.allow e /etc/hosts.deny. Se rpcinfo -p
 fallisce, ma l'esecuzione del portmapper continua, esaminate questi
 file. Verificate la sezione ``Sicurezza e NFS'' per dettagli su questi
 file.


 3.4.  Mountd e nfsd

 I programmi successivi che devono essere avviati sono mountd e nfsd.
 Ma prima dobbiamo modificare un altro file. Questa volta /etc/exports.
 Supponiamo che io voglia che il file system /mn/eris/local, che
 risiede su eris, possa essere disponibile anche sulla macchina
 chiamata apollon. Dobbiamo quindi mettere queste righe nel file
 /etc/exports di eris:


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



 Le righe sopra indicate consentono l'accesso in lettura e scrittura a
 /mn/eris/local. Invece di rw potremmo mettere ro che indica l'accesso
 in sola lettura (se non si mette nulla, � di default a sola lettura).
 Ci sono altre opzioni che � possibile inserire e ne discuteremo alcune
 relative alla sicurezza pi� avanti. Le opzioni sono tutte elencate
 nella pagina man di exports che dovreste leggere almeno una volta
 nella vita. Ci sono modi migliori che elencare gli host nel file
 exports.  Potete, per esempio, usare net groups se state utilizzando
 le NIS (o NYS), e potete sempre specificare domini interi oppure
 sottoreti IP come host autorizzati a montare qualcosa. Ma dovreste
 considerare che qualcuno non autorizzato potrebbe accedere al server
 se usate questo tipo di autorizzazioni.

 Nota: la sintassi del file exports non � la stessa di altri Unix.  C'�
 una sezione separata in questo HOWTO che riguarda il file exports di
 altri Unix.


 Ora siamo pronti per lanciare il comando mountd (oppure pu� chiamarsi
 rpc.mountd), successivamente nfsd (che potrebbe chiamarsi rpc.nfsd).
 Entrambi leggono il file exports.


 Se modificate il file /etc/exports accertatevi che nfsd e mountd
 sappiano che il file � stato cambiato. Il modo tradizionale consiste
 nel lanciare exportfs. Molte distribuzioni non hanno il programma
 exportfs, allora si pu� installare questo script sulla macchina:


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




 Salvatelo chiamandolo /usr/sbin/exportfs e non dimenticate di
 modificare le autorizzazioni con il comando chmod a+rx. Ora, ogni
 volta che modificate il file exports, lanciate exportfs come root.


 Dovreste quindi controllare che mountd e nfsd stiano girando
 correttamente.  Prima con rpcinfo -p. Dovrebbe mostrare qualcosa di
 simile al seguente:


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



 Come si vede il portmapper ha avviato i propri servizi e cos� pure
 mountd e nfsd.


 Se invece appare l'errore: rpcinfo: can't contact portmapper: RPC:
 Remote system error - Connection refused, RPC_PROG_NOT_REGISTERED o
 qualcosa di simile, significa che il portmapper non sta girando oppure
 c'� qualcosa nel file /etc/hosts.{allow,deny} che impedisce al
 portmapper di rispondere. Fate riferimento alla sezione ``Sicurezza e
 NFS'' per dettagli su questi file. Se appare il messaggio No remote
 programs registered. significa che il portmapper non vuole rispondere
 oppure qualcosa non funziona. Interrompete nfsd, mountd e il
 portmapper e riprovate la sequenza di avvio dall'inizio.


 Dopo avere controllato che il portmapper riporti i servizi, si pu�
 controllare anche con ps. Il portmapper continuer� a riportare i
 servizi anche dopo che il programma che li ha utilizzati termina in
 maniera non corretta, per cui controllare con il ps pu� essere utile
 se sembra che qualcosa non funzioni.


 Naturalmente, avrete bisogno di modificare i file rc per avviare
 mountd e nfsd e il portmapper quando si avvia la macchina.  �
 probabile che gli script esistano gi� sulla macchina, dovrete solo
 togliere il commento dalle parti interessate oppure modificare il
 livello di init affinch� queste vengano attivate.


 Le pagine man che dovrebbero esservi familiari adesso, sono quelle di
 portmap, mountd, nfsd ed exports.


 Bene, se avete fatto tutto esattamente come ho detto probabilmente �
 tutto pronto per iniziare a lavorare sul client NFS.


 4.  Configurazione di un client NFS

 Prima di tutto avete bisogno di un kernel che abbia il supporto per
 NFS compilato staticamente oppure come modulo. Questo lo si configura
 prima di iniziare la compilazione. Se non avete mai compilato un
 kernel prima, leggete il Kernel HOWTO. Se state usando una buona
 distribuzione (come Red Hat [meglio Debian N.d.T]) e non avete mai
 messo mano al kernel o ai moduli (rovinandolo ;)), allora nfs dovrebbe
 essere gi� disponibile.


 Ora, dal prompt di root, potete lanciare il comando appropriato e
 vedere il file system apparire. Continuando l'esempio della sezione
 precedente, vogliamo montare la partizione in /mn/eris/local da eris.
 Ci� � fatto con il comando:


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




 (Torneremo successivamente sulle opzioni rsize e wsize). Il file
 system � ora disponibile sotto /mnt, potete fare cd in esso e con un
 ls vedere tutti i file che vi sono presenti. Noterete che non � cos�
 veloce come su un file system locale, ma molto pi� conveniente che
 usare ftp. Se, invece di montare il file system, il comando mount
 produce un errore come mount: eris:/mn/eris/local failed, reason given
 by server: Permission denied, significa che il file exports � errato
 oppure avete dimenticato di lanciare il comando exportfs dopo averlo
 modificato. Se invece dice mount clntudp_create: RPC: Program not
 registered significa che nfsd o mountd non sta girando sul server
 oppure c'� un problema nel file hosts.{allow,deny} di cui abbiamo
 parlato precedentemente.

 Per rimuovere il filesystem, usare il comando:


 ______________________________________________________________________
 umount /mnt
 ______________________________________________________________________




 Per fare in modo che il sistema monti un file system al boot, occorre
 modificare il file /etc/fstab. Per il nostro esempio aggiungere la
 seguente riga:


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




 Questo � tutto, pi� o meno.


 4.1.  Opzioni del comando mount

 Ci sono alcune opzioni che dovreste considerare almeno una volta.
 Controllano il modo in cui i client NFS gestiscono i crash della rete
 o del server. Uno dei fattori positivi di NFS � che questi problemi
 vengono gestiti molto bene... se configurate i client in modo
 corretto.  Ci sono due tipi di problemi:


    soft
       I client NFS sono responsabili di riportare l'errore al processo
       che sta accedendo a un file su un file system montato. Alcuni
       programmi gestiscono la segnalazione, altri no. Non raccomando
       l'uso di questo parametro, poich� � rivolto ai file corrotti e
       ai dati persi. � meglio non utilizzarlo in particolare per i
       dischi di posta --- se ci tenete alla vostra posta.


    hard
       Il programma che cerca di accedere a un file su un file system
       NFS si bloccher� quando il server ha un crash. Il processo non
       potr� essere interrotto a meno che non si specifichi il
       parametro intr. Quando il server NFS torna in linea, il
       programma riprender� a funzionare correttamente. Questo �
       probabilmente il funzionamento che si vorrebbe. Raccomando di
       usare hard,intr su tutti i file system montati via NFS.



 Riprendendo l'esempio precedente, modifichiamo la linea dell'fstab:








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





 4.2.  Ottimizzare NFS

 Normalmente, se non vengono usate le opzioni rsize e wsize, NFS
 legger� e scriver� blocchi di 4096 o 8192 byte. Alcune combinazioni di
 kernel di Linux e schede di rete possono non essere in grado di
 gestire blocchi cos� grandi o potrebbero non esserlo comunque in
 maniera ottimale. Quindi dobbiamo provare a sperimentare varie
 dimensioni per determinare quali siano i parametri che funzionano e
 garantiscono le migliori prestazioni.  Si pu� provare l'influenza
 delle opzioni sulla velocit� con alcuni semplici comandi. Se avete
 montato la partizione come visto precedentemente e avete i diritti di
 scrittura, potete provare con il seguente test di scrittura
 sequenziale:


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




 In questo modo si crea un file di 64 MB di zeri (grande abbastanza per
 fare in modo che l'uso della cache non sia significativo sulle
 prestazioni; usate una dimensione maggiore se avete molta memoria
 disponibile).  Lanciatelo alcune volte (5-10?) e calcolate il tempo
 medio. Il tempo da tenere maggiormente in considerazione � quello
 indicato con 'elapsed' oppure 'wall clock'. Potete quindi verificare
 le prestazioni in lettura:


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



 Fatelo alcune volte e calcolate la media dei tempi. Quindi smontate e
 rimontate la partizione nuovamente ma con rsize e wsize maggiori.
 Dovrebbero essere sempre multipli di 1024 e non essere pi� grandi di
 16384, che � la dimensione massima ammessa da NFS versione 2. Dopo
 averla montata nuovamente, fate un cd nel file system montato e
 provate qualche semplice comando tipo ls, esplorate il file system per
 verificare se tutto funziona correttamente. I sintomi di rsize/wsize
 troppo grandi, sono molto strani e per nulla ovvi. Un sintomo tipico �
 un elenco incompleto di file quando viene fatto un 'ls', senza alcun
 messaggio di errore. Oppure la lettura dei file fallisce miseramente
 senza messaggi di errore. Dopo avere stabilito che le dimensioni di
 rsize e wsize funzionano, potete provare di nuovo a effettuare i
 controlli.  Server diversi hanno dimensioni ottimali diverse. SunOS e
 Solaris hanno la reputazione di andare molto pi� veloci con blocchi di
 4096 byte.



 I kernel di Linux pi� recenti (dal 1.3), eseguono un read-ahead per
 rsize di dimensioni maggiori o uguali alla dimensione della pagina
 della macchina. Sui processori Intel, la dimensione della pagina � di
 4096 byte. Poich� l'uso del read-ahead aumenta significativamente le
 prestazioni in lettura di NFS, raccomando di impostare a 4096 le
 dimensioni di rsize.


 Ricordatevi di modificare /etc/fstab per riflettere le dimensioni di
 rsize/wsize che avete trovato essere le migliori.


 Un trucco per accelerare le prestazioni in scrittura di NFS � quello
 di disabilitare la scrittura in sincronia sul server. Le specifiche di
 NFS controllano che le richieste di scrittura sul server non siano
 considerate terminate finch� i dati non siano memorizzati su un
 supporto non volatile (il disco). Questo limita le prestazioni in
 scrittura, per cui disabilitando questa caratteristica si otterr� un
 incremento delle prestazioni. Il nfsd di Linux non ha pi� fatto
 scritture sincrone da quando non lo fa nemmeno il file system stesso.
 Su macchine non Linux, � possibile migliorare le prestazioni
 modificando in questo modo il file /etc/exports:


 ______________________________________________________________________
 /dir    -async,access=linuxbox
 ______________________________________________________________________




 o in modo simile. Fate riferimento alla pagina man relativa al file
 exports della macchina in questione. Da notare che ci� aumenta la
 possibilit� di perdita di dati.


 5.  NFS su linee lente

 Le linee lente includono Modem, ISDN e tutte le altre connessioni su
 lunga distanza.


 Questa sezione si basa sulla conoscenza dei protocolli usati, ma non
 su prove reali poich� non ho modo di verificarli. Fatemi sapere le
 vostre esperienze se avete la possibilit� di provare ;-)


 La prima cosa da ricordare � che NFS � un protocollo lento.  Ha un
 grosso overhead di sistema. Usare NFS � come usare il kermit per
 trasferire i file. � veramente lento. Quasi tutto � pi� veloce di NFS.
 FTP, HTTP, rcp e ssh sono pi� veloci.


 Siete ancora convinti di volerlo provare? OK.


 I parametri predefiniti di NFS sono per linee veloci e con bassa
 latenza. Se usate questi parametri su linee ad alta latenza si
 potrebbero verificare errori, operazioni non portate a termine, file
 che risultano essere pi� corti di quanto siano in realt� e altri fatti
 misteriosi.


 La prima cosa da fare � di non usare l'opzione per il mount soft.
 Questo potrebbe fare in modo che i timeout restituiscano errori alle
 applicazioni, che potrebbero non gestirli correttamente.  Quella
 appena descritta potrebbe essere la causa di misteriosi fallimenti.
 Usate invece l'opzione hard. Quando l'opzione hard � attiva, i timeout
 generano infiniti tentativi invece di terminare l'operazione che il
 software voleva effettuare. Ed � ci� di cui avete bisogno.


 La prossima cosa da fare � ingannare le opzioni timeo e retrans. Sono
 descritte nella pagina man nfs(5), che � qui riportata [tradotta NdT]:


 ______________________________________________________________________
        timeo=n        Il valore, in decimi  di  secondo  prima di
                       tentare  una  ritrasmissione  dopo  un  RPC
                       timeout.  Il  valore  di  default  �  di  7
                       decimi  di  secondo. Dopo il primo timeout,
                       il  timeout  viene   raddoppiato  dopo ogni
                       successivo  timeout fino a un massino di 60
                       secondi oppure nel caso avvenga un  timeout
                       maggiore.  Inoltre,  se  il  filesystem   �
                       montato  in  modo  hard, ogni nuovo timeout
                       avr�  come  valore  di  partenza, il doppio
                       del  valore  di  partenza della sequenza di
                       timeout  precedente,  che  si  raddoppia  a
                       ogni  ritrasmissione.  Il  massimo  timeout
                       rimane  di  60 secondi. Le migliori presta-
                       zioni si raggiungono incrementando il valo-
                       re  di  timeout quando si monta un disco su
                       una  rete  lenta, su un server lento oppure
                       attraverso router e gateway.

        retrans=n      Il numero  di  timeout minori e ritrasmis-
                       sioni  che  si devono verificare prima che
                       si verifichi un timeout maggiore. Il valo-
                       re  di  default  � di 3 timeout. Quando si
                       verifica  un timeout maggiore, viene bloc-
                       cata l'operazione sul file e sulla console
                       appare "server  not responding".
 ______________________________________________________________________




 In altre parole: se non viene ricevuta una risposta entro il timeout
 di 0,7 secondi (700ms) il client NFS ripeter� la richiesta
 raddoppiando il timeout a 1,4 secondi. Se non si riceve risposta entro
 1,4 secondi la richiesta viene ripetuta ancora e il timeout viene
 raddoppiato ancora a 2,8 secondi.


 La velocit� di una linea pu� essere misurata con un ping con le
 dimensioni del pacchetto e di rsize/wsize uguali.















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




 Il tempo qui � quanto impiega il pacchetto del ping ad andare avanti e
 indietro da lugulbanda. 15 ms � abbastanza veloce. Su una linea a
 28.800 bps ci si pu� aspettare qualcosa come 4000-5000ms, e se la
 linea � molto carica questo tempo sar� ancora pi� alto, anche doppio.
 Quando il tempo � elevato, si dice che la linea ha elevata latenza.
 Generalmente per pacchetti pi� grandi e per linee cariche, il tempo
 tende ad aumentare. Aumentate il parametro timeo per adattarlo alla
 velocit� della linea e al carico. E poich� la latenza aumenta se si
 usa la linea per altre operazioni, se volete provare FTP e NFS allo
 stesso momento, provate a misurare i tempi del ping mentre usate NFS e
 FTP per trasferire i file e aumentare timeo perch� corrisponda alla
 latenza della linea.



 6.  Sicurezza e NFS

 Non sono un esperto di sicurezza, ma sono abbastanza coscio dei
 problemi di sicurezza. Ma attenzione: questo non � certo un elenco
 completo dei problemi legati a NFS e se pensate di essere sicuri una
 volta che avrete letto e implementato ci� che � scritto qui, avrei
 giusto giusto un ponte da vendervi.


 Questa sezione non � probabilmente di utilit� se vi trovate in un una
 rete chiusa, dove conoscete gli utenti e nessuno che non conoscete pu�
 accedere alle macchine della rete. Ovvero, non ci dovrebbero essere
 modi per entrare nella rete in dialin (via modem) e non dovrebbe
 essere collegata ad altre reti di cui non conoscete gli utenti.
 Pensate che io sia paranoico?  Non lo sono per nulla. Questo � solo un
 aiuto di base sulla sicurezza.  E ricordate, le cose che dico qui sono
 solo l'inizio. Un sito sicuro ha bisogno di un amministratore
 diligente che sappia dove trovare informazioni e tutti i problemi
 relativi alla sicurezza.


 NFS ha un problema di sicurezza di base per cui il client, se non
 specificato altrimenti, si fida del server NFS e viceversa. Questo pu�
 essere negativo. Significa che se l'account di root viene compromesso
 sul server, viene compromesso anche quello di tutti i client e
 viceversa.  Ci sono alcune strategie di copia per questo, sulle quali
 torneremo poi.


 Dovreste leggere gli avvisi del CERT su NFS, molto di ci� che � qui
 scritto deriva dai messaggi scritti dal CERT.  Vedere
 ftp.cert.org/01-README per un elenco aggiornato degli avvisi del CERT.
 Ecco qui alcuni avvisi relativi a NFS.

 ______________________________________________________________________
 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.1.  Sicurezza del client

 Sul client possiamo decidere di non volere dare troppa fiducia al
 server in un paio di modi con delle opzioni del mount. Per esempio
 possiamo vietare l'uso di programmi SUID su partizioni NFS con
 l'opzione nosuid. Questa � una buona idea e dovreste considerarne
 l'uso con tutti i dischi che montate via NFS. Significa che gli utenti
 root del server non possono fare programmi SUID-root sul file system,
 entrare come utenti normali sui client e usare i programmi SUID per
 diventare root anche sui client. Possiamo anche vietare l'esecuzione
 di file sulla partizione montata usando l'opzione noexec, ma �
 sicuramente meno pratico di nosuid, poich� � naturale pensare che una
 partizione debba avere dei file eseguibili o degli script. Potete
 inserire queste opzioni nella colonna opzioni con rsize e wsize
 separati da virgole.


 6.2.  Sicurezza del server: nfsd

 Sul server possiamo decidere che non vogliamo dare fiducia all'account
 root dei client. Possiamo farlo usando l'opzione root_squash nel file
 exports:


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



 Ora, se l'utente con UID 0 sul client cerca di accedere (lettura,
 scrittura, cancellazione) al file system, il server sostituisce l'UID
 con quello dell'utente 'nobody' del server. Ci� significa che il root
 dei client non pu� accedere o modificare i file del server che solo
 root pu� accedere o modificare. Ci� rappresenta un fatto positivo e
 probabilmente dovreste usare root_squash su tutti i file system che
 esporte. Potrebbe sorgere il dubbio che l'utente root dei client pu�
 usare il comando 'su' per diventare un altro utente e accedere e
 cambiare i file di quell'utente!. La risposta � affermativa. Questo �
 ci� che avviene e quello che deve avvenire su Unix e NFS e ha
 un'importante conseguenza: i file importanti devono essere di
 propriet� di root e non di bin o altri utenti non root, poich� il solo
 utente a cui l'utente root dei client non pu� accedere � l'account
 root del server. Nella pagina man di NFSd ci sono molte altre opzioni
 squash e potete decidere di non dare fiducia a qualsiasi utente dei
 client. � possibile anche applicare lo squash a gruppi di UID o GID.
 Tutto ci� � descritto nella pagina man di NFSd.


 root_squash � realt� un'opzione di default con Linux NFSd, per
 garantire accesso come root ai filesystem, utilizza l'opzione
 no_root_squash.


 Un'altra cosa importante � assicurarsi che nfsd controlli che tutte le
 richieste provengano da una porta privilegiata. Se accetta richieste
 da qualsiasi porta, un utente senza privilegi particolari potrebbe
 lanciare un programma facilmente ottenibile su Internet che comunica
 con il server nfs e gli fa credere di essere un utente qualsiasi.
 L'nfsd di Linux fa questo controllo per default, ma su altri sistemi
 operativi dovrete effettuare questo controllo per contro vostro, che
 dovrebbe essere descritto nella pagina man di nfsd del sistema
 operativo usato.


 Un'altra cosa: mai esportare un filesystem a 'localhost' o 127.0.0.1.
 Credetemi.


 6.3.  Sicurezza del server: il portmapper

 Il portmapper di base ha problemi se usato con nfsd che rendono
 possibile ottenere file dal server NFS senza alcun privilegio.
 Fortunatamente il portmapper che viene distribuito con Linux �
 relativamente sicuro contro questo attacco e pu� essere reso
 maggiormente sicuro configurando l'elenco degli accessi in due file.


 Non tutte le distribuzioni di Linux sono uguali. Alcune distribuzioni
 apparentemente aggiornate non includono un portmapper sicuro nemmeno
 oggi, a distanza di molti anni da quando il problema � stato reso
 noto. Almeno una distribuzione contiene la pagina man per un
 portmapper sicuro, ma il portmapper reale non � sicuro. Un modo facile
 per controllare se il vostro portmapper � valido oppure no, � quello
 di lanciare il comando strings(1) per verificare se il portmapper
 legge i file /etc/hosts.deny e /etc/hosts.allow, importanti per
 gestire la sicurezza. Posto che il portmapper � /usr/sbin/portmap si
 pu� controllarlo con il seguente comando: strings /usr/sbin/portmap |
 grep hosts.  Sulla mia macchina il risultato �:


 ______________________________________________________________________
 /etc/hosts.allow
 /etc/hosts.deny
 @(#) hosts_ctl.c 1.4 94/12/28 17:42:27
 @(#) hosts_access.c 1.20 96/02/11 17:01:27
 ______________________________________________________________________




 Per prima cosa modifichiamo il file /etc/hosts.deny. Dovrebbe
 contenere la riga:


 ______________________________________________________________________
 portmap: ALL
 ______________________________________________________________________

 che nega l'accesso a chiunque. Poich� l'accesso � chiuso, provate il
 comando rpcinfo -p per verificare se il vostro portmapper legge e
 obbedisce realmente a questo file. rpcinfo non dovrebbe dare alcun
 risultato oppure un messaggio di errore. Non dovrebbe essere
 necessario riavviare il portmapper.


 Chiudere il portmapper a chiunque � un po' troppo drastico, quindi
 riapriamolo modificando il file /etc/hosts.allow, ma prima cerchiamo
 di capire che cosa inserirci. Il file dovrebbe semplicemente avere un
 elenco di tutte le macchine a cui si vuole garantire accesso al
 portmapper. Ci sono comunque pochissimi casi di macchine che hanno
 bisogno di un accesso totale per qualsiasi ragione. Il portmapper
 amministra nfsd, mountd, ypbind/ypserv, pcnfsd e i servizi 'r', come
 ruptime e rusers.  Di questi, solo nfsd, mountd, ypbind/ypserv e forse
 pcnfsd possono avere qualche conseguenza. Tutte le macchine che
 richiedono accessi ai servizi della vostra macchina dovrebbero essere
 autorizzate a farlo. Supponiamo che l'indirizzo della vostra macchina
 sia 129.240.223.254 e che si trovi in una sottorete 129.240.223.0 che
 deve poter accedere ai servizi della macchina (questa � la
 terminologia introdotta da Networking HOWTO: se non vi ricordate
 rileggetelo). Scriviamo quindi:


 ______________________________________________________________________
 portmap: 129.240.223.0/255.255.255.0
 ______________________________________________________________________



 in hosts.allow. Questo � quanto viene scritto anche come subnet mask
 in ifconfig. Per il dispositivo eth0 di questa macchina, ifconfig
 dovrebbe essere:


 ______________________________________________________________________
 ...
 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 dovrebbe mostrare:


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



 (l'indirizzo di rete � nella prima colonna).

 I file hosts.deny e hosts.allow sono descritti nelle pagine man con lo
 stesso nome.

 IMPORTANTE: non inserite nient'altro che NUMERI IP nelle linee del
 portmapper di questi file. La risoluzione dei nomi pu� indirettamente
 causare attivit� del portmapper che pu� causare attivit� del
 portmapper che pu� indirettamente causare attivit� del portmapper...


 Ci� che abbiamo visto rende il server pi� chiuso. Il solo problema che
 ora rimane (eh gi� :)) � che qualcuno riesca a corrompere la shell di
 root (o che riesca a far partire la macchina con un floppy MS-DOS) su
 una macchina affidabile e, usando questo privilegio, spedisca da una
 porta sicura richieste come utente qualsiasi.


 6.4.  NFS e firewall

 � una buona cosa proteggere con un firewall le porte di nfs e del
 portmapper sul vostro router o firewall. L'nfsd funziona sulla porta
 2049, con i protocolli udp e tcp. Il portmapper lavora in genere sulla
 porta 111, sia tcp sia udp e mountd sulle porte 745 e 747, sia tcp sia
 udp.  Controllate le porte usate con il comando rpcinfo -p.


 Se invece NFS deve attraversare un firewall, ci sono delle opzioni su
 nfsd e mountd pi� recenti per usare porte non standard che possono
 essere tenute aperte attraverso il firewall.


 6.5.  Riassunto

 Se usate hosts.allow/deny, root_squash, nosuid e l'opzione per le
 porte privilegiate nei programmi portmapper/nfs, evitate la maggior
 parte dei bug conosciuti di nfs e potete essere abbastanza sicuri.
 Comunque ci sono altri problemi: se qualcuno ha accesso alla rete pu�
 far apparire strani comandi nel vostro .forward o leggere la vostra
 posta se le directory /home o /var/spool/mail sono esportate via NFS.
 Per la stessa ragione, non dovreste mai lasciare le vostre chiavi
 private di PGP su un disco esportato via NFS. O almeno ora sapete i
 rischi che correte.


 NFS e il portmapper formano un sottosistema complesso e non �
 improbabile che nuovi bug vengano scoperti, sia nella progettazione
 sia nell'implementazione. Ci possono sempre essere buchi di cui
 qualcuno sta abusando. Ma questa � la vita. Per tenervi aggiornati su
 questo genere di problemi dovreste leggere alcuni newsgroup come
 comp.os.linux.announce e comp.security.announce.


 7.  Elenco di verifica di mount

 Questa sezione � basata sull'elenco di verifica dei problemi di NFS
 mount di IBM Corp. I miei ringraziamenti a loro per averlo reso
 disponibile per questo HOWTO. Se rilevate alcuni problemi montando un
 file system via NFS, controllate questo elenco prima di inviare il
 vostro problema.  Ogni elemento descrive un problema e come
 risolverlo.


 1. Il mount continua a indicare RPC: Programma non registrato


    Il portmapper � attivo?

    Soluzione: avviarlo.

    Mountd � attivo?
    Soluzione: avviarlo.

    Nfsd � attivo?

    Soluzione: avviarlo.

    Il portmapper non pu� rispondere a causa di /etc/hosts.deny?

    Soluzione: rimuovere la regola in hosts.deny o aggiungere una
    regola a hosts.allow per fare in modo che il portmapper possa
    comunicare con voi.


 2. Il file system non viene esportato o non viene esportato al client
    in questione:


    Soluzione: esportarlo.


 3. La risoluzione del nome non corrisponde all'elenco di exports


    Esempio: la lista di export dice di esportare a johnmad ma il nome
    di johnmad � risolto in johnmad.austin.ibm.com e quindi il mount
    viene negato.


    Soluzione: inserire nell'export entrambi i nomi.


    Pu� anche accadere se il client ha due interfacce con nomi diversi
    e l'exports ne specifica una sola.


    Soluzione: inserire nell'exports entrambe le interfacce.


    Pu� anche accadere se il server non riesce a eseguire le funzioni
    lookuphostbyname o lookuphostbyaddr sul client. Accertatevi che il
    client possa fare host <name>; host <ip_addr>; e che entrambe
    mostrino la stessa macchina.


    Soluzione: controllare la risoluzione dei nomi.


 4. Il file system � stato montato dopo che l'NFS � partito (sul
    server). In questo caso il server sta esportando la directory
    sottostante NFS e non il filesystem esportato.


    Soluzione: arrestare e riavviare NFSd.


    Nota: I client che abbiano gi� montato il filesystem avranno
    problemi dopo il riavvio del server.


 5. La data � sbagliata su una o entrambe le macchine (ci� pu� dare
    problemi usando il comando make)


    Soluzione: correggere la data.


    L'autore dell'HOWTO raccomanda di usare NTP per sincronizzare gli
    orologi.  Poich� ci sono delle restrizioni su NTP negli USA,
    occorre prelevare le versioni per Debian, Red Hat o Slackware da
    ftp://ftp.hacktic.nl/pub/replay/pub/linux o qualche mirror.


 6. Il server non accetta il mount da un utente che � in pi� di 8
    gruppi.


    Soluzione: diminuire il numero di gruppi cui appartiene o usa un
    altro utente.



 8.  FAQ

 Questa � la sezione delle FAQ. � basata su una vecchia FAQ di NFS di
 Alan Cox.


 Se si verificano problemi montando un filesystem, verificate se il
 vostro problema � descritto nella sezione "Elenco di verifica di
 mount".


 1. Ho un gran numero di errori 'stale nfs handl� quando uso Linux come
    server NFS


    Ci� � causato da un bug in alcune vecchie versioni di nfsd.  �
    stato corretto a partire da nfs-server2.2beta16


 2. Quando provo a montare un filesystem ottengo



        can't register with portmap: system error on send







 Probabilmente state usando un sistema basato sulla distribuzione
 Caldera.  C'� un bug negli script rc. Contattate Caldera per ottenere
 la versione corretta.


 3. Perch� non posso eseguire un file dopo averlo copiato sul server
    NFS?


    Il fatto � che nfsd tiene una cache dei file aperti per motivi di
    prestazioni (ricordate, gira in un ambiente utente). Mentre nfsd ha
    un file aperto (come nel caso di una scrittura), il kernel non ne
    consente l'esecuzione. Le versioni di nfsd pi� recenti di  spring
    95 rilasciano i file aperti dopo qualche secondo, versioni pi�
    vecchie possono impiegare anni...


 4. I miei file su NFS sono in sola lettura


    Il default per il server NFS di Linux � di montare i filesystem in
    sola lettura. Leggete le sezioni "Mountd e nsfd" ed "Esportare
    filesystem" in questo HOWTO e fate riferimento alle pagine man di
    exports e nfsd. Avrete bisogno di modificare /etc/exports.


 5. Monto una partizione da un server Linux e, mentre il comando ls
    funziona, non riesco a leggere o scrivere i file.


    Su versioni pi� vecchie di Linux occorre lanciare il server NFS con
    rsize=1024,wsize=1024.


 6. Monto un server NFS Linux con la dimensione dei blocchi tra
    3500-4000 e regolarmente smette di rispondere.


    Allora semplicemente non fatelo. Questo non si verifica con i
    kernel 2.0 e 2.2. Per quanto mi ricordo non dovrebbero esserci
    problemi nemmeno con la versione 1.2.


 7. Pu� Linux gestire NFS via TCP?


    Al momento no.


 8. Ottengo numerosi strani errori se provo a montare una macchina
    usando Linux.


    Accertatevi che l'utente sia in 8 gruppi o meno. Server pi� vecchi
    lo richiedono.


 9. Quando riavvio la mia macchina a volte smette di rispondere
    provando a smontare un NFS server che non risponde.


    Non smontate server NFS quando riavviate. Ignorateli, non causano
    problemi se non li si smonta. Il comando � umount -avt nonfs.


 10.
    I client NFS Linux sono molto lenti quando scrivono su sistemi Sun
    o BSD.


    Normalmente NFS scrive i dati in modo sincrono (� possibile
    disabilitare questa modalit� lo si desidera, ma si rischia di
    perdere dei dati). Funzionano peggio i kernel derivati da BSD, che
    tendono a non essere in grado di lavorare in piccoli blocchi,
    quindi quando si scrivono 4K di dati da una macchina Linux in
    pacchetti da 1K, BSD fa questo:










         lettura di una pagina da 4K
         modifica di 1K
         scrittura di 4K sul disco fisico
         lettura di una pagina da 4K
         modifica di 1K
         scrittura di 4K sul disco fisico
         ecc..






 11.
    Quando connetto molti client a un server NFS Linux le prestazioni
    calano improvvisamente.


    Il protocollo NFS usa pacchetti UDP frammentati. Il kernel ha un
    limite sulla quantit� di frammenti di pacchetti incompleti di cui
    pu� disporre prima di eliminare i pacchetti. Nella versione 2.2 il
    protocollo � adattabile in runtime attraverso il filesystem /proc:
    /proc/sys/net/ipv4/ipfrag_high_thresh e ipfrag_low_thresh. Nella
    versione 2.0 queste sono le costanti di runtime definite in
    .../linux/net/ipv4/ip_fragment.c, IPFRAG_HIGH_THRESH e
    IPFRAG_LOW_THRESH. Il significato di questi valori � costituito dal
    fatto che quando l'occupazione della memoria dei frammenti UDP non
    assemblati raggiunge il limite ``ipfrag_high_thresh'' in byte (256K
    per default in 2.2.3 e 2.0.36) viene ridotta a ``ipfrag_low_tresh''
    improvvisamente. Questa operazione viene effettuata eliminando i
    frammenti. � simile alla perdita di pacchetti e se il limite pi�
    elevato viene raggiunto, le prestazioni del server calano
    notevolmente.


    256K � sufficiente per un numero pari a 30 client. Se ne avete 60,
    raddoppiatelo.  E raddoppiate anche il limite inferiore.


 12.
    Sto usando Linux 2.2 (o versione successiva) con knfsd e non riesco
    a fare in modo che la mia macchina AIX, IRIX, Solaris, DEC-Unix,
    ... lo monti.


    Knfsd indica che viene implementata la versione 3 di NFS. Ma questo
    non avviene.  Esiste un'opzione per evitare che annunci questa
    versione. Usatela.  Oppure potete immettere "vers=2" nell'elenco di
    opzioni di montaggio sui client.


 13.
    La mia macchina AIX 4 non pu� montare il mio server NFS Linux.
    Viene visualizzato



              mount: 1831-011 access denied for server:/dir
              mount: 1831-008 giving up on:
              server:/dir
              The file access permissions do not allow the specified action.





 o qualcosa di simile.


 AIX 4.2 ha utilizzato porte riservate (<1024) per NFS. AIX 4.2.1 e 4.3
 non sono limitati a porte riservate. Inoltre, AIX 4.2.1 e 4.3 cercano
 di effettuare il montaggio mediante NFS3, quindi NFS/TCP, infine
 NFS/UDP.


 L'aggiunta di


 ______________________________________________________________________
 nfso -o nfs_use_reserved_ports=1
 ______________________________________________________________________




 alla fine di rc.tcpip forzer� l'utilizzo di porte riservate.  (Questo
 suggerimento � stato fornito da Brian Gorka)




 9.  Esportare filesystem

 Il modo di esportare i filesystem attraverso NFS non � completamente
 coerente tra le varie piattaforme. In questo caso Linux e Solaris 2
 sono le eccezioni. Questa sezione propone un breve elenco di modi di
 effettuare l'esportazione sui vari sistemi. Se il vostro sistema non �
 riportato dovete controllare sulle pagine del manuale. Provate a
 cercare parole come: nfsd, system administration tool, rc scripts,
 boot scripts, boot sequence, /etc/exports, exportfs. User� un esempio
 durante questa sezione: come esportare /mn/eris/local ad apollon in
 lettura e scrittura.


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

 Questi sistemi operativi usano il tradizionale formato di Sun per il
 file export. In /etc/exports scrivete:


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



 La documentazione completa si trova nella pagina man di exports.  Dopo
 avere modificato il file, lanciate exportfs -av per esportare i
 filesystem.


 Quanto sono limitate le varie versioni di exportfs relative alle
 variazioni di sintassi? Su alcuni sistemi troverete che le righe
 precedenti vengono lette come:


 ______________________________________________________________________
 /mn/eris/local apollon
 ______________________________________________________________________



 oppure possono degenerare in:


 ______________________________________________________________________
 /mn/eris/local rw=apollon
 ______________________________________________________________________



 Consiglio di essere formali, altrimenti si rischia che la versione
 successiva di exportfs sia pi� sensibile e che quindi non funzioni pi�
 nulla.


 9.2.  Solaris 2

 Sun ha completamente reinventato la ruota quando fecero Solaris 2.
 Quindi la loro sintassi � completamente diversa da quella di tutti gli
 altri. Ci� che dovete fare � modificare il file /etc/dfs/dfstab.
 Questo file deve contenere i comandi share, come descritto nella
 pagina man share(1M).  Ad esempio:


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



 Dopo avere modificato il file, lanciate il programma shareall per
 esportare i filesystem.


 10.  NFS in Linux 2.2

 Mentre scrivo questo HOWTO, Linux 2.2.12 � la versione del kernel
 corrente e utilizzare NFS pu� rivelarsi un po' complesso.


 Cosa accade se lo stato di NFS in Linux 2.4 � i unknown.


 La nuova caratteristica importante di Linux 2.2 � il supporto per un
 demon del server nfs in-kernel, noto come knfsd in 2.2. Questo modo di
 implementare nfsd ha alcuni vantaggi, quello principale � la velocit�.
 Una macchina Linux 2.2 con knfsd � un server nfs rispettabile. Si pu�
 continuare a utilizzare l'nfsd precedente con Linux 2.2. Questo
 comporta alcuni vantaggi, principalmente in fatto di semplicit�.


 Se utilizzate un kernel sorgente o un pacchetto binario creato da
 RedHat (6.0 o successiva), SuSE (6.1 o successiva) o altri integratori
 di sistemi professionali, hanno probabilmente integrato tutte le
 funzionalit� di "knfsd" nel relativo kernel e non � necessario
 preoccuparsi di nulla, poich� funzioner� certamente nella maggior
 parte dei casi.  Fino al momento in cui non compilate un vostro
 kernel. Se usate un kernel di stock Linux 2.2 (almeno fino a 2.2.12)
 knfsd verr� interrotto.


 Per utilizzare questo kernel � necessario disporre del pacchetto knfsd
 di H.J. Lus. Si tratta di una raccolta di patch e delle utility
 necessarie per la versione 2.2 che Lu sta gestendo a tempo perso.
 Potete disporne dal mirror del kernel locale, il sito principale �
 ftp.kernel.org:/pub/linux/devel/gcc/. Non � indicato per uso generale.
 Se trovate che questo pacchetto pu� creare dubbi non fatelo da soli.
 Attendete un pacchetto del kernel dell'integratore del sistema
 preferito (ad esempio, Red Hat, SuSE o ...).


 Inoltre, non inviatemi domande relative a questo argomento, non sono
 in grado di aiutarvi.  Non dispongo di alcun server knfsd. Se trovate
 errori o omissioni in questa documentazione, scrivetemi e rivedr�
 questo HOWTO e ne distribuir� una nuova versione.


 State ancora leggendo? Ok.  H.J.Lu pubblica argomenti relativi alle
 nuove versioni di questo pacchetto sulla mailing list del kernel
 Linux.  Altri problemi relativi a NFS nella versione 2.2 vengono
 pubblicati in questa mailing list. Leggeteli.


 � importante notare una cosa in relazione al pacchetto knfsd.
 Annuncia che supporta la versione 3 di NFS. Tuttavia, non la supporta.
 Esiste un'opzione che si pu� utilizzare per evitare la presenza
 dell'annuncio di NFS3, oppure si pu� specificare "vers=2" nell'elenco
 di opzioni di mount sui client.


 10.1.  Il client

 Il client � alquanto semplice. Per bloccarlo � necessario avere statd
 (del pacchetto knfsd) compilato, installato e avviato dagli script di
 boot. Fatelo. Statd ha bisogno di una directory /var/lib/nfs per
 funzionare, altrimenti verr� terminato senza messaggi di errore. La
 directory deve essere creata prima di eseguirlo.


 Dopo l'esecuzione di statd si pu� usare il programma testlk in
 tools/locktest per verificare se il blocco di un file in un filesystem
 NFS funziona. Dovrebbe essere cos�. Se viene visualizzato No locks
 available, statd non funziona.


 In realt�, si pu� anche evitare il blocco completo (non sto
 consigliando di farlo), immettendo ``nolock'' nell'elenco di opzioni
 di mount.


 Per quanto ne so, questo � ci� che � necessario per far funzionare il
 client.


 Se avete un server Sparc o Alpha NFS scoprirete che il client NFS in
 Linux 2.2 avr� prestazioni peggiori. Le velocit� di trasferimento da e
 verso il server sono cos� tragiche che ... non potete nemmeno
 immaginarle.  � molto peggio che in Linux 2.0. Esiste tuttavia una
 soluzione.  La serie di kernel 2.2 di Alan Cox (che � leggermente pi�
 sperimentale dei normali kernel 2.2 di Linus) include una patch per
 fare in modo che Linux 2.2 funzioni quando usato con i server Alpha e
 Sparc. Se volete usare i kernel 2.2 di Alan Cox dovreste leggere la
 mailing list relativa ai kernel Linux e potrete scoprire dove si trova
 la patch.  La home page di questa patch �
 <http://www.uio.no/~trondmy/src/>, nel caso vogliate provare ad
 applicarla a un kernel 2.2 di produzione. Questa patch non sar�
 probabilmente disponibile in Linux 2.4, perch� richiede troppe
 modifiche nel kernel per essere accettata nel ciclo di sviluppo
 corrente. Aspettate Linux 2.5.


 Anche trondmy dispone di patch per fare in modo che Linux usi la
 versione 3 di NFS, elementi che consentiranno inoltre di usare il
 protocollo tcp come meccanismo di trasporto invece di UDP. NFSv3 �
 ottimo per reti long-haul e altre reti in cui la perdita dei pacchetti
 non � uguale a zero o la latenza � elevata.


 Il motivo per cui dovreste leggere la mailing list relativa ai kernel
 Linux per usare queste patch consiste nel fatto che talvolta si sono
 verificati grossi errori.  Bug che si nutrono dei vostri file. Quindi
 fate attenzione.


 10.2.  Il server

 Il demon del server nfs in Linux 2.2 e nelle versioni successive �
 noto come ``knfsd''. � insidioso da installare. Dovete arrangiarvi da
 soli o fare riferimento ai pacchetti di kernel 2.2 rilasciati da SuSE,
 Red Hat e altri. Spiacente. Potete ancora usare il vecchio nsfd anche
 in Linux 2.2. � lento ma semplice da installare.


 11.  Server NFS su un floppy

 Questa sezione � stata scritta da Ron Peters, [email protected]
 Spiega come installare un server NFS al momento dell'avvio da un
 floppy. Era inizialmente progettata per fare in modo che NFS
 condividesse un cdrom da un'altra macchina non Linux/UNIX per
 installare Linux su una macchina che non disponeva di cdrom.


 11.1.  Introduzione

 Questo documento � stato creato per coloro che sperimenteranno lo
 stesso problema che ho avuto di recente. Stavo creando un server Linux
 su una macchina che non aveva un cdrom e non aveva, n� ha alcuna
 possibilit� di aggiungervene uno a eccezione di un dispositivo esterno
 SCSI o simile.  Ora che sta diventando sempre meno probabile che si
 debba installare un server su una macchina come questa, questo
 documento potrebbe rivelarsi poco utile. Tuttavia, lo avrei apprezzato
 al momento della creazione della mia macchina.

 Dato che la mia macchina non aveva un'unit� cdrom, pensavo di trovare
 un server NFS per Win95 e condividere il cdrom per il tempo
 sufficiente a installare il sistema e utilizzarlo in rete. Dei due
 prodotti che ho trovato (non dir� i nomi, ma uno era freeware e
 l'altro aveva una licenza limitata di 15 giorni), uno non funzionava e
 l'altro non poteva gestire sufficientemente bene la convenzione di
 denominazione di Linux per poter completare l'installazione.

 Ho quindi cercato di avviare la mia macchina Win95 con il set di
 dischi boot/root e di usare un floppy supplementare per installare il
 server NFS.

 � stato molto semplice e la procedura � probabilmente pi� semplice
 della lettura di questa introduzione, ma credo che inserire l'intera
 procedura in un posto solo avr� pi� valore.



 11.2.  Aspettative

 Questo documento deriva dall'uso di dischi boot/root di una delle
 correnti distribuzioni di sviluppo InfoMagic di Slackware. Ho usato la
 versione 2.0.34 del kernel per i dischi boot/root, ma i programmi del
 server NFS derivano da un server 2.0.30. Ho gi� usato il metodo di
 installazione Slackware, non perch� sia pi� semplice o migliore, ma
 perch� mi trovo pi� a mio agio e non ho dedicato altro tempo a cercare
 un altro metodo.

 Non credo che ci saranno molti problemi di utilizzo con questo
 documento in relazione alla versione del sistema operativo.
 Consiglierei di usare qualcosa di abbastanza recente. Poich� �
 probabile che verr� utilizzato per l'installazione, sar� probabilmente
 usato un set di dischi boot/root corrente.

 Le dimensioni possono variare.



 11.3.  Requisiti


 �  Sistema di rete e disco di avvio. Il sistema che rappresenter� il
    server NFS deve avere una scheda di rete e deve essere riconosciuto
    durante il processo di boot. Ulteriori informazioni sono
    disponibili in Networking HOWTO.

 �  Floppy secondario che contiene rpc.portmap, rpc.mountd e rpc.nfsd.
    Questi file possono essere facilmente disponibili da un ftpsearch
    sul Web.

 �  Supporto di origine Slackware (o altro) (si presume che sia il cd).


 11.4.  Installazione del server


 11.4.1.  Boot del server NFS temporaneo

 Avviate il sistema del server NFS dal floppy di boot e assicuratevi
 che la scheda di rete venga riconosciuta. � anche necessario che il
 CDROM venga riconosciuto. User� eth0 come scheda di rete di esempio.


 11.4.2.  Montaggio del floppy e del cdrom

 Dopo avere avviato il sistema, i dischi boot/root non sono pi�
 necessari.  Il sistema � completamente contenuto nella RAM.

 Sostituite il floppy root con il disco supplementare. Montate il
 floppy:

 mount /dev/fd0 /floppy

 Questo presume che il floppy sia abbia un file system di tipo ext2.
 Immagino che il disco supplementare possa essere un floppy DOS
 contenente dei file, ma non l'ho ancora provato. Penso che sar� pi�
 semplice di un'immagine di un disco. In questo caso, sarebbe mount -t
 msdos ...etc.  Questo deve probabilmente essere inserito nella sezione
 ``Operazioni da effettuare''.

 Montaggio del cdrom:

 mount -t iso9660 /dev/hdc /cdrom

 I dispositivi di floppy e cdrom sono quelli che ho usato. Potrebbero
 essere diversi in base all'applicazione. I punti di mount /floppy e
 /cdrom sono presenti nell'immagine del disco floppy perch� possano
 essere usati. In caso contrario, createli o utilizzate i punti di
 mount che desiderate.



 11.4.3.  Installazione della rete sul server temporaneo.

 In questa sezione il server NSF temporaneo viene impostato per
 comunicare con la rete.  Ci sono pochi comandi da eseguire. Sono
 necessarie ancora alcune informazioni prima di eseguire i comandi (i
 valori sono esempi):

 IPADDR:172.16.5.100  #Questo � l'indirizzo del server temporaneo.

 NETMASK:255.255.255.0  #Questa � la netmask.

 BROADCAST:172.16.5.255 #L'ultimo numero (255) � significativo di
 IPADDR.

 ETHNETWORK:172.16.5.0 #Ancora una volta, leggermente diverso da
 IPADDR.

 GATEWAY:172.16.5.251 #Necessario solo se avete un gateway.
 Probabilmente lo sapete gi�, ma la maggior parte delle reti provate
 non ha un gateway.

 I comandi per far funzionare la rete. Inserite i valori elencati
 sopra:

 ifconfig eth0 inet IPADDR arp netmask NETMASK broadcast BROADCAST

 route add -net ETHNETWORK netmask NETMASK eth0

 Usate il comando seguente solo se avete un gateway e dovete
 attraversarlo:

 route add default gw GATEWAY netmask 0.0.0.0 eth0

 Se tutto funziona, vi trovate in rete e potraete eseguire un ping
 degli altri nodi.


 11.4.4.  Installazione della condivisione NFS.

 Determinate la directory che desiderate diventi la condivisione NFS.
 Nel caso del mio esempio, ho usato la directory /cdrom/slakware.
 Immettete questa directory nel file /etc/exports:

 echo "/cdrom/slakware" > /etc/exports


 11.5.  Esecuzione del server NFS

 Andate a /floppy/usr/sbin ed eseguite:

 ./rpc.portmap

 ./rpc.mountd

 ./rpc.nfsd


 11.5.1.  Completato, iniziate l'installazione.

 Questo dovrebbe condividere la directory ``/cdrom/slakware'' nel file
 /etc/exports.  Al termine, potete avviare la macchina perch� sia
 installata da floppy boot/root (ne ho usati alcuni con cui ho avviato
 il server NFS) e iniziare l'installazione.

 Quando siete pronti a scegliere la collocazione dell'origine dei
 supporti, scegliete l'opzione relativa al server NFS. Ti verr�
 richiesto l'indirizzo IP del server. Immettete l'indirizzo usato come
 IPADDR per il server. Vi verr� anche richiesto il montaggio della
 directory. Si tratta della directory che avete collocato in
 /etc/exports sul server NFS.

 Il sistema provveder� quindi a montare NFS sul server. Attenzione a
 eventuali messaggi di errore.  Tutto dovrebbe essere completo. Puoi
 continuare l'installazione.


 11.6.  Risoluzione dei problemi


 11.6.1.  Non ancora disponibile.

 Non dispongo ancora di informazioni sulla risoluzione dei problemi.
 Forse mentre utilizzerete questa procedura, ci saranno pi�
 suggerimenti disponibili.


 11.7.  Operazioni da effettuare


 11.7.1.  Disco DOS.

 Create un disco DOS per il floppy supplementare.


 11.7.2.  Comandi rpc.

 Create un ordine specifico dell'esecuzione dei comandi rpc.* e se �
 necessario eseguire solo alcuni o tutti i comandi.




 12.  PC-NFS

 Non dovreste usare PC-NFS, ma samba.


 Samba � migliore di PC-NFS e funziona con Windows 3 for Workgroups e
 versioni successive di Windows. � pi� veloce e pi� sicuro. Usatelo.