Badroot Security Group

W H I T E   P A P E R

NFS How-TO
a cura di: demone

In determinati casi ci troviamo nella condizione di dover montare una directory remota in locale senza disporre dell'uso di samba,nfs,ftp o simili ma del solo protocollo ssh.
Partendo dal presupposto che con linux riusciamo a montare in modo trasparente quasi qualsiasi tipo di filesystem all'interno del nostro ed usarlo come se fosse in locale, a tutto pensa il kernel.

Nel caso la partizione remota derivasse da un host ssh; utilizziamo ShFS (http://shfs.sourceforge.net) che è un driver per il kernel è in formato modulare.NFS sta per network file system e rappresenta la soluzione in ambiente Unix per condividere le risorse ed esportare aree del disco locale in rete in modo trasparente,in modo di montare un fs remoto come se fosse in locale.
Il servizio NFS viene implementato al settimo livello OSI (Application) e sfrutta a livello Presentation XDR che lo rende crossplatform e al quinto livello OSI (Session) RPC (Remote Procedure Call) che fornisce una serie di chiamate come se fossero locali.
Per poter utilizzare nfs dovremo avviare i demoni che gestiscono la condivisione tramite nfs ed essi sono:
-/sbin/rpc.portmap fa sì che alle richieste NFS risponda il demone corretto
-/usr/sbin/rpc.nfsd effettua il montaggio del Fs
-/usr/sbin/rpc.mountd risponde alle richieste del client, in base alle direttive dichiarate in /etc/exports

Starteremo i demoni per quanto concerne slackware utilizzando pkgtool:
#pkgtool--->setup--->services e spuntiamo la voce relativa ad rc.portamap
oppure diamo i permessi di esecuzione ad /etc/rc.d/rc.nfsd ed ad /etc/rc.d/rc.portmap nel seguente modo:

#chmod +x /etc/rc.d/rc.nfsd
#chmod +x /etc/rc.d/rc.portmap

dando il comando rpcinfo -p dovremo ottenere un output del genere:
programma vers proto   porta
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100021    1   udp  32770  nlockmgr
    100021    3   udp  32770  nlockmgr
    100021    4   udp  32770  nlockmgr
    100005    1   udp    623  mountd
    100005    1   tcp    626  mountd
    100005    2   udp    623  mountd
    100005    2   tcp    626  mountd
    100005    3   udp    623  mountd
    100005    3   tcp    626  mountd
    100024    1   udp    630  status
    100024    1   tcp    633  status
   
Il file di configurazione del Server che esporta un FileSystem è presente in  /etc/exports all'interno del quale vengono definiti:
-la (o le) directory da condividere che viene indicata col path completo,utilizzando / si indica che si ha intenzione di montare l'intero fs
-il (o i) pc con cui condividerla (o condividerle)
-i permessi, racchiusi fra parentesi tonde e senza lasciare alcuno spazio con l'indicazione del client
vim /etc/exports
/master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub (ro,insecure,all_squash)

Procediamo ad analizzare le precedenti righe per capirle meglio
/ master(rw) trusty(rw,no_root_squash) tutto il Fs viene esportato all'host master e all'host trusty, ma con molteplici opzioni.
/projects proj*.local.domain(rw) il Fs /project viene esportato a tutti gli hosts del dominio local.domain che iniziano con proj.
/usr *.local.domain(ro) @trusted(rw) il Fs /usr viene esportato a tutti gli hosts di local.domain e al gruppo NIS trusted.
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100) il Fs /home/joe viene esportato all'host pc001.
/pub (ro,insecure,all_squash) il Fs /pub viene esportato a tutti

Le principali opzioni di exports sono :
 
-secure Questa opzione acceta connessioni solo dalle porte well-know (minori di 1024). Attivata di default.
-insecure NFS accetta connessione dalla porta 0 alla 65535.
-rw Esporta il Fs in lettura e scrittura.
-ro Esporta il Fs in sola lettura.
-async Permette al Server di risponde alle richieste prima che i dati siano scritti su di un supporto non volatile.Migliora le performance ma i dati potrebbero pervenire corrotti.
-sync provvede alla sincronizzazione dei dati fra server e client in modo che essi siano scritti su un supporto non volatile prima di ogni operazione di condivisione.Più sicuro per l'integrità dei dati.
-nohide se il server esporta due filesystem di cui uno è montato sull'altro, il client deve montarli entrambi in modo esplicito per accedere loro. Se infatti viene montata solo la directory madre, la directory figlia appare vuota ("nascosta").  Con questa opzione invece è possibile vedere entrambe le directory.
-root_squash Le richiesta di un utente con uid 0 gid 0 da parte di un client vengono trattate come se provenissero da un utente nobody.
-no_root_squash Disabilita il root squashing.
-all_squash Tutte le richiesta vengono trattate come se fossero di un utente anonymous.
-anonuid Setta esplicitamente l'uid dell'utente anonymous.
-anongid Setta esplicitamente il gid dell'utente anonymous.
Dopo aver definito le opzioni di esportazione è necessario esportare tutti i FileSystem presenti in /etc/exports tramite il seguente comando:

# exportfs -a

se si modifica il file exports mentre i demoni del nfs sono attivi per poter applicare le modifiche bisogna lanciare il comando

#exportsfs -r

Per quanto concerne i client che devono montare i FileSystem esportati ci sono alcune opzioni di montaggio, da precisare in fase di montaggio o direttamente nel file /etc/fstab.
mount diretto del fs esportato:

mount -t nfs server:/home/pub /mnt/server

mount del fs esportato editanto il file /etc/fstab

/home/pub nella directory /mnt/server.

server:/home/pub  /mnt/server     nfs         auto,rw,suid               0   0

Le principali Opzioni di mount sono:
-hard L'applicazione tenterà continuamente di cercare il server NFS fino ad avere successo.
-soft Tentativi ripetuti di RCP senza esito causeranno l'interruzione dell'applicazione.
-timeo Rappresenta il tempo in decimi di secondo prima che il servizio RPC vada in timeout nel caso il server non risponda. -ro Montaggio del Fs in sola lettura
-rw Montaggio del Fs in lettura e scrittura(dipedente dalle direttive indicate sul file exports)
-rsize indica il buffer in lettura dal NFS server
-wsize=1024: indica il buffer in scrittura sul NFS server
-retry Il numero di minuti prima che NFS ritenti un montaggio in foreground
-fg Se il primo mount non avviene con successo ritenta in foreground.
-bg Se il primo mount non avviene con successo ritenta in background.
-tcp Utilizza il protocollo di trasport TCP al posto di UDP. Molti Server NFS supportano solo UDP
-udp Utilizza il protocollo di trasport UDP. E' l'opzione di default.
-_netdev indica che il filesystem risiede su un dispositivo che richiede un accesso dalla rete,previene il tentativo di montaggio dell'unità finché la rete non è stata abilitata

Con ciò abbiamo finito con la configurazione di nfs sia in ambito server che client.