NFS per Mac OS X e Linux Ubuntu

Un altro articoletto sul tema dei filesystem condivisi tra Linux (nella fattispecie Ubuntu) e Mac OS X. L’articolo è solo introduttivo: lo scopo è quello di consentire al lettore di configurare un ambiente minimale, ma funzionante. Per chi vuole approfondire, in fondo ci sono alcuni riferimenti.

NFS

NFS è l’acronimo di Network File System, un protocollo di rete che consente ad un computer (client) di accedere remotamente allo spazio disco fornito da un altro computer (server) come fosse in locale.
Fu sviluppato inizialmente da Sun Microsystems per il suo proprio Unix, ma divenne presto uno standard aperto definito, nelle sue varie versioni, in alcuni RFC (1094, 1813, 3530). Questo ne rese possibile l’implementazione nei più svariati sistemi operativi e così NFS divenne la lingua comune a tutti gli Unix per condividere i filesystem. Come potevano Linux e Mac OS X, vista la loro appartenenza – genetica per Mac OS X, e “funzionale” per Linux – alla grande famiglia dei sistemi operativi Unix, esimersi dal comunicare l’un l’altro con NFS?

Ubuntu come server

Queste istruzioni si riferiscono alla versione 8.04 (Hardy Heron) di Ubuntu, che è la versione corrente al momento in cui sto scrivendo, ma come al solito si adattano facilmente anche ad altre versioni di Ubuntu, nonché a Debian, da cui Ubuntu è derivata.

Il primo passo consiste nell’installare il pacchetto nfs-kernel-server. In effetti è disponibile anche un altro pacchetto, nfs-user-server, che implementa la stessa funzione. La differenza tra i due è che nel primo il server lavora in kernel mode, mentre nel secondo lavora in user mode. Stando alle dichiarazioni ufficiali la versione user è più lenta e con meno caratterisiche, ma più facile da debuggare. Quindi, almeno che non abbiate necessità di debuggare il server nfs, la versione consigliata è senz’altro quella kernel. Si installa da terminale con

$ sudo apt-get install nfs-kernel-server

La configurazione delle condivisioni avviene editando il file /etc/exports. Ogni riga di questo file definisce una condivisione che il server rende disponibile ai vari client, specificando anche le modalità e i permessi che i client hanno sulla condivisione. Ogni riga è organizzata in campi separati da spazi bianchi o tab. Prendiamo una riga di esempio:

/backup         192.168.1.0/255.255.255.0(ro) 192.168.1.10(rw)

Il significato del campi è il seguente:

  • il primo campo è la cartella che il server intende condividere con i client. In questo caso la cartella è /backup. Il path è da intendersi relativamente al server;
  • il campo 192.168.1.0/255.255.255.0(ro) specifica che tutti gli host con indirizzo del tipo 192.168.1.x hanno accesso alla condivisione in sola lettura (ro sta per read only);
  • il campo 192.168.1.10(rw) garantisce all’host specificato l’accesso anche in scrittura.

Le specifiche complete per questo file si possono reperire, come al solito, con il comando man exports. Una volta che il file è configurato come si vuole, è il momento di rendere effettive le nuove impostazioni. Il modo più semplice è lanciare il comando exportfs con l’opzione -r:

$ sudo exportfs -r

Questo comando rilegge il file /etc/exports e lo rende effettivo. Lanciato senza opzioni stampa la lista delle condivisioni attualmente attive. Lanciato con l’opzione -a aggiunge alle condivisioni attive quelle che stanno sul file /etc/exports, senza eliminare quelle già presenti (impostate, magari, con una versione precedente del file /etc/exports). Anche qui, per maggiori info, man exportfs.

Mac OS X come server

Per il nostro amato Macintosh c’è un ottimo shareware, NFS Manager, che consente da comoda interfaccia grafica di impostare sia le funzioni server che quelle client. Bisogna dire che NFS Manager si limita a fornire un’interfaccia grafica a funzioni già presenti nel sistema operativo, evocabili altrimenti da linea di comando. Ma, visto che c’è, perché non usarlo? Se ritenete che vi sia utile potete procedere all’acquisto delle licenze che vi servono e finanziarne così lo sviluppo.

Se, invece, non si vuole ricorrere a NFS Manager, e si ha Mac OS X Leopard, è sempre possibile configurare le condivisioni agendo direttamente dalla linea di comando. I passi da compiere sono i seguenti:

  1. innanzi tutto occorre abilitare il servizio NFS con il comando
    $ sudo nfsd enable
  2. successivamente occorre modificare il file /etc/exports configurando le condivisioni. Ma attenzione: la sintassi su Mac OS X è diversa da quella vista su Linux. man exports per i dettagli;
  3. per rendere effettive le modifiche si deve dare il comando
    $ sudo nfsd update

Infine, un comando importante che serve per verificare quali siano le condivisioni attualmente attive è

$ showmount -e

Per chi invece ha Tiger la procedura è diversa, perché si basa sull’architettura Netinfo (eliminata su Leopard). In questa pagina potete trovare i dettagli.

Ubuntu come client

Per poter accedere ad una cartella NFS da Ubuntu, occorre impartire un semplice comando da terminale. Supponiamo di voler montare la cartella /backup esportata da serverremoto nella posizione locale /mnt/backup_remoto. Allora il comando da impartire è

$ sudo mount -t nfs serverremoto:/backup /mnt/backup_remoto

dove serverremoto può essere sia l’indirizzo IP che il nome di dominio pienamente qualificato del vostro server, che il nome del server seguito dal suffisso .local (questo in base a come è configurata la vostra LAN).

Per far sopravvivere il montaggio della condivisione remota ai reboot della macchina, occorre modificare il file /etc/fstab aggiungendo una linea simile alla seguente:

serverremoto:/backup    /mnt/backup_remoto    nfs    defaults    0    0

Mac OS X come client

Per connettersi ad un volume NFS remoto si possono seguire varie strade.

NFS Manager. La prima consiste nell’usare NFS Manager, come già detto in precedenza.

Finder. La seconda strada consiste nell’usare la funzione Connetti al Server di Finder. Da Finder, premete command+k ed inserite come URL la stringa

nfs://serverremoto/percorso/alla/condivisione

dove serverremoto può essere, come su Linux, sia l’indirizzo IP del server, sia il suo nome seguito dal suffisso .local, sia un nome DNS pienamente qualificato.
C’è però una postilla: se il server al quale vi connettete è Linux allora, affinché tutto funzioni, occorre che la condivisione sia esportata con l’opzione insecure. Questo perché, di default, Linux concede le condivisioni solo a quei client che si connettono da una porta cosiddetta “sicura”, ossia con indice < 1024. Siccome Finder, invece, usa una porta >= 1024, allora occorre questo piccolo aggiustamento.

Linea di comando. La terza via, in modo simile a Linux, è usare la linea di comando. Supponiamo di voler montare la cartella /backup del server nella posizione locale /Volumes/backup_su_server. Allora occorre impartire il seguente comando:

$ sudo mount -t nfs -o resvport serverremoto:/backup /Volumes/backup_su_server

L’opzione -o resvport garantisce che la porta usata sia < 1024, quindi è superflua se il server non è Linux o se la condivisione è esportata con l’opzione insecure (vedi punto precedente).

Utility Directory. Infine, se si vuole che l’accesso alla condivisione remota sia automaticamente riattivata ad ogni avvio del sistema, e se si ha Mac OS X Leopard, si può utilizzare anche Utility Directory (che si trova sotto /Applicazioni/Utility). Una descrizione dettagliata della procedura si trova in questa pagina.
Unica nota: l’opzione -P di cui si parla nell’articolo è stata recentemente sostituita dalla -o resvport che dovrebbe essere usata al suo posto (la -P è, come si dice nella sezione COMPATIBILITY della pagina del manuale di mount_nfs, “highly discouraged”).

Alcuni riferimenti

I riferimenti fondamentali si trovano già tutti a bordo macchina, e sono le pagine dei manuali online.
Su Linux:

Su Macintosh:

Un altro documento utile è il capitolo del manuale di FreeBSD (di cui Mac OS X è parente stretto) che tratta l’argomento. Qui la versione italiana:

Infine i già citati RFC che definiscono le versioni ancora in uso del protocollo NFS:

3 Pensieri su &Idquo;NFS per Mac OS X e Linux Ubuntu

  1. Ciao, ho seguito la tua guida per montare una condivisione nfs sul mio snowleopard.
    Ti volevo chiedere se sapevi come fare per avere un autenticazione a livello utente, del tipo che mi chieda user e pass per montare la condivisione e che i file possono essere letti e scritti solo da quel utente.
    Grazie ciao

    • NFS è un protocollo a livello di sistema e non prevede un’autenticazione su base utente: il suo scopo è quello di condividere una cartella con i client come se tale condivisione fosse un file system locale.
      In particolare gli accessi avvengono utilizzando i propri UID e GID locali anche sul server. Quindi, se vuoi restringere l’accesso ad una cartella o un file, puoi impostare delle restrizioni sui permessi di accesso come se tu fossi in locale.
      Ad esempio, supponi di aver creato una cartella sulla condivisione NFS di nome pincopallino. Avendola creata tu sarà già di tua proprietà. Per cambiare i permessi di accesso puoi usare gli strumenti standard del tuo sistema operativo, come ad esempio il comando da linea di comando chmod:
      $ chmod 700 pincopallino
      L’unico pericolo, purtroppo tutt’altro che remoto, è questo: se tu condividi la stessa cartella con più di un client, lo stesso UID potrebbe essere utilizzato su un altro client per identificare uno dei propri utenti (questo è possibile perché ogni computer usa un proprio database degli utenti isolato). Tale utente del secondo client godrebbe sulla condivisione NFS di tutti i tuoi stessi privilegi, perché agli occhi del server, avendo lo stesso UID, non ci sarebbe distinzione tra i due, quindi potrebbe tranquillamente accedere a pincopallino. Questo caso è molto frequente perché, di default, i sistemi operativi assegnano gli UID agli utenti che vengono via via creati in sequenza, a partire da un UID predefinito. Ad esempio, su Debian, gli UID vengono assegnati a partire da 1000; quindi il primo utente creato ha di solito UID 1000 su tutte le installazioni Debian e derivate, il secondo 1001 etc.
      Nel caso in cui tu sia l’amministratore di tutti i client che possono connettersi al server, sarà tua cura assicurati che gli utenti sui vari client utilizzino UID diversi.
      In un ambiente di rete più professionale (ad esempio un dominio NIS) tutti i computer utilizzano un unico database degli utenti, per cui non possono esistere utenti diversi, anche se su computer diversi, con lo stesso UID.
      Se non sei amministratore di tutti i client né hai un dominio NIS, e la riservatezza/sicurezza è importante, allora usa altri sistemi, ad esempio ftp, sftp (meglio) o samba, tutti basati sull’autenticazione degli utenti.

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.