Nfs-kernel-server: configurazione lato server: differenze tra le versioni
Wtf (discussione | contributi) |
S3v (discussione | contributi) mNessun oggetto della modifica |
||
(11 versioni intermedie di 2 utenti non mostrate) | |||
Riga 10: | Riga 10: | ||
=== nfs-common === | === nfs-common === | ||
Editare | Editare il file <code>/etc/default/nfs-common</code> ed assicurarsi che le righe contenenti le variabili <code>NEED_IDMAPD=</code> e <code>NEED_GSSD=</code> appaiano così: | ||
<pre> | <pre> | ||
Riga 19: | Riga 19: | ||
=== nfs-kernel-server === | === nfs-kernel-server === | ||
Editare il file <code>/etc/default/nfs-kernel-server</code> ed | Editare il file <code>/etc/default/nfs-kernel-server</code> ed assicurarsi che la riga contenente la variabile <code>NEED_SVCGSSD=</code> appaia così: | ||
<pre>NEED_SVCGSSD=no</pre> | <pre>NEED_SVCGSSD="no"</pre> | ||
Questa è comunque l'opzione di default se non viene specificato nulla. | |||
Da notare che attraverso questo file di configurazione è possibile definire tutte le opzioni di <code>rpc.mountd</code> attraverso il parametro <code>RPCMOUNTDOPTS</code>, come ad esempio restringere il numero delle versioni di protocollo utilizzabili. | Da notare che attraverso questo file di configurazione è possibile definire tutte le opzioni di <code>rpc.mountd</code> attraverso il parametro <code>RPCMOUNTDOPTS</code>, come ad esempio restringere il numero delle versioni di protocollo utilizzabili. | ||
Riga 27: | Riga 28: | ||
=== idmapd.conf === | === idmapd.conf === | ||
Editare | Editare il file <code>/etc/idmapd.conf</code>, che di default dovrebbe apparire così: | ||
<pre> | |||
[General] | |||
Verbosity = 0 | |||
Pipefs-Directory = /run/nfs/rpc_pipefs | |||
# set your own domain here, if id differs from FQDN minus hostname | |||
#Domain = localdomain | |||
[Mapping] | |||
Nobody-User = nobody | |||
Nobody-Group = nogroup | |||
</pre> | |||
Il parametro da controllare è ''Domain'', che in maniera automatica debian si ricava come FQDN meno nome host. Se quindi non avete configurato un dominio di rete è assai probabile che ''rpc.idmapd'' sbagli ad associare proprietà e regole ACL dei file, ma non i permessi unix che vengono gestiti tramite gli [[UID]] ([http://blather.michaelwlucas.com/archives/796 citazione]). Per la maggior parte degli utenti ''home'' e ''soho'' questo non sarà un grosso problema, visto che l'unico effetto visibile sarà un'errata visualizzazione dei proprietari dei file lato client (tutti associati a ''nobody:nogroup'').<br/> | |||
Premesso questo è necessario valutare come avviene la risoluzione dei nomi all'interno della propria LAN. Se non si è configurato ne un servizio DNS per la propria LAN ne si sono editati i file <code>/etc/hosts</code> dei vari PC specificando un dominio fittizio, allora è possibile che valga la pena di lasciare semplicemente commentato il parametro <code>Domain</code>; in caso contrario vale assolutamente la pena di indicare correttamente il dominio (anche solo fittizio) della LAN, per esempio <code>small.lan</code> (evidentemente fittizio): | |||
<pre> | <pre> | ||
[General] | [General] | ||
Riga 34: | Riga 51: | ||
Pipefs-Directory = /var/lib/nfs/rpc_pipefs | Pipefs-Directory = /var/lib/nfs/rpc_pipefs | ||
# set your own domain here, if id differs from FQDN minus hostname | # set your own domain here, if id differs from FQDN minus hostname | ||
Domain = small.lan | |||
[Mapping] | [Mapping] | ||
Riga 42: | Riga 59: | ||
</pre> | </pre> | ||
Una volta salvate le modifiche riavviare <code>nfs-common</code>: | |||
<pre># service nfs-common restart</pre> | |||
{{Box|Nota|In generale ricordare che nel caso del server è necessario riavviare anche ''nfs-kernel-server'' dopo aver riavviato ''nfs-common''}} | |||
=== exports === | === exports === | ||
Riga 54: | Riga 72: | ||
</pre> | </pre> | ||
Si | Si condivide la cartella <code>/home</code> e la sua sottocartella <code>/home/altro</code>. La dicitura 192.168.1.0/24 serve a restringere l'accesso alla risorsa <code>/home</code> alle sole richieste provenienti dagli indirizzi IP che vanno da 192.168.1.1 a 192.168.1.254. Una richiesta che per esempio dovesse provenire da 192.168.2.15 sarebbe rifiutata. Tra ( ) si indicano le opzioni: | ||
* <code>rw</code>: | * <code>rw</code>: abilita la cartella in lettura e scrittura, ammesso comunque che l'utente abbia il permesso di scrivere su quella cartella; indicando "ro" si limita la possibilità di scrivere anche per quegli utenti che, se non accedessero da remoto, avrebbero di norma il permesso di scrivere. | ||
* <code>fsid=0</code>: identifica la cartella come radice per il filesystem da esportare. Una sola cartella può avere valore di fsid pari a 0. | * <code>fsid=0</code>: identifica la cartella come radice per il filesystem da esportare. Una sola cartella può avere valore di fsid pari a 0. | ||
* <code>no_subtree_check</code>: velocizza | * <code>no_subtree_check</code>: velocizza l'accesso alle risorse a scapito di un minimo aumento del rischio sicurezza. | ||
* <code>sync</code>: impone sincronia tra | * <code>sync</code>: impone sincronia tra client e server. L'alternativa è async, ma è meglio evitarla poiché in caso di crash o eventi imprevisti aumenta la probabilità di causare danni al filesystem. | ||
* <code>crossmnt</code>: questa | * <code>crossmnt</code>: questa opzione serve in teoria solo se si sono rimontate delle directory (si veda la successiva sottosezione dedicata al rimontaggio delle cartelle), tuttavia è possibile che omettendola si noti un crollo della velocità di trasferimento (per esempio fino a 150-200 kB/s) nel trasferire grossi file da un client al server. | ||
{{ Warningbox | Se si usa la versione 4 di NFS (quella di default) tutte le risorse da esportare devono essere | {{ Warningbox | Se si usa la versione 4 di NFS (quella di default) tutte le risorse da esportare devono essere contenute dentro una medesima directory cui dovrà essere attribuito fsid=0, in caso contrario è necessario rimontarle tutte prima in un'altra cartella e poi esportare questa, si veda più avanti. }} | ||
Per rendere operative le modifiche ai file di configurazione eseguire: | Per rendere operative le modifiche ai file di configurazione eseguire: | ||
<pre># | <pre># service nfs-kernel-server restart</pre> | ||
In caso di ulteriori problemi a visualizzare il contenuto delle cartelle provare a riavviare server e client. | In caso di ulteriori problemi a visualizzare il contenuto delle cartelle provare a riavviare server e client. | ||
Riga 79: | Riga 97: | ||
</pre> | </pre> | ||
Supponendo | Supponendo di voler rimontare le cartelle <code>/home/utente</code> e <code>/altro</code> rispettivamente in <code>/export/utente</code> e <code>/export/altro</code>: | ||
<pre> | <pre> | ||
Riga 86: | Riga 104: | ||
</pre> | </pre> | ||
Per | Per evitare di dover ridigitare ad ogni riavvio i precedenti comandi basta aggiungere le seguenti due righe al file <code>/etc/fstab</code>: | ||
<pre> | <pre> | ||
Riga 101: | Riga 119: | ||
</pre> | </pre> | ||
Da | Da notare l'aggiunta dell'opzione <code>crossmnt</code>, che non deve essere omessa pena l'impossibilità di vedere il contenuto delle sottocartelle di ''export'' sulle macchine client. Quest'opzione DEVE ESSERE assegnata solo alla cartella cui viene attribuito fsid=0.<BR> | ||
Stando al manuale l'opzione <code>nohide</code> ha un effetto molto simile a quello di | Stando al manuale l'opzione <code>nohide</code> ha un effetto molto simile a quello di <code>crossmnt</code>, con la differenza che quest'opzione NON DEVE ESSERE assegnata alla cartella cui viene attribuito fsid=0, ma solo alle sotto directory (in caso contrario l'export delle risorse fallisce), ovvero restando al soprastante esempio: | ||
<pre> | <pre> | ||
Riga 110: | Riga 128: | ||
</pre> | </pre> | ||
'''Sottolineo''' che per quanto riguarda la mia personale esperienza questo secondo | '''Sottolineo''' che per quanto riguarda la mia personale esperienza questo secondo metodo è risultato inadeguato, poiché nel caso di trasferimento di grossi file (>1GB) da client a server ho notato un sistematico crollo della velocità di trasferimento (170 kB/s circa, tipicamente dopo aver superato la soglia di 1,1-2,5 GB trasferiti). Nel trasferimento da server a client le due soluzioni mi risultano invece equivalenti. | ||
[[Categoria:Condivisione_risorse]] | |||
[[Categoria:NFS]] |
Versione attuale delle 17:12, 3 mag 2015
NFS |
Sommario |
|
Installazione
Installare i pacchetti necessari:
# apt-get install nfs-kernel-server
Configurazione
nfs-common
Editare il file /etc/default/nfs-common
ed assicurarsi che le righe contenenti le variabili NEED_IDMAPD=
e NEED_GSSD=
appaiano così:
NEED_IDMAPD=yes NEED_GSSD=no
nfs-kernel-server
Editare il file /etc/default/nfs-kernel-server
ed assicurarsi che la riga contenente la variabile NEED_SVCGSSD=
appaia così:
NEED_SVCGSSD="no"
Questa è comunque l'opzione di default se non viene specificato nulla.
Da notare che attraverso questo file di configurazione è possibile definire tutte le opzioni di rpc.mountd
attraverso il parametro RPCMOUNTDOPTS
, come ad esempio restringere il numero delle versioni di protocollo utilizzabili.
idmapd.conf
Editare il file /etc/idmapd.conf
, che di default dovrebbe apparire così:
[General] Verbosity = 0 Pipefs-Directory = /run/nfs/rpc_pipefs # set your own domain here, if id differs from FQDN minus hostname #Domain = localdomain [Mapping] Nobody-User = nobody Nobody-Group = nogroup
Il parametro da controllare è Domain, che in maniera automatica debian si ricava come FQDN meno nome host. Se quindi non avete configurato un dominio di rete è assai probabile che rpc.idmapd sbagli ad associare proprietà e regole ACL dei file, ma non i permessi unix che vengono gestiti tramite gli UID (citazione). Per la maggior parte degli utenti home e soho questo non sarà un grosso problema, visto che l'unico effetto visibile sarà un'errata visualizzazione dei proprietari dei file lato client (tutti associati a nobody:nogroup).
Premesso questo è necessario valutare come avviene la risoluzione dei nomi all'interno della propria LAN. Se non si è configurato ne un servizio DNS per la propria LAN ne si sono editati i file /etc/hosts
dei vari PC specificando un dominio fittizio, allora è possibile che valga la pena di lasciare semplicemente commentato il parametro Domain
; in caso contrario vale assolutamente la pena di indicare correttamente il dominio (anche solo fittizio) della LAN, per esempio small.lan
(evidentemente fittizio):
[General] Verbosity = 0 Pipefs-Directory = /var/lib/nfs/rpc_pipefs # set your own domain here, if id differs from FQDN minus hostname Domain = small.lan [Mapping] Nobody-User = nobody Nobody-Group = nogroup
Una volta salvate le modifiche riavviare nfs-common
:
# service nfs-common restart
Nota In generale ricordare che nel caso del server è necessario riavviare anche nfs-kernel-server dopo aver riavviato nfs-common |
exports
A questo punto è possibile definire le condivisioni editando il file /etc/exports
, ogni riga del quale descrive una directory. Ad esempio inserendo le seguenti righe:
/home 192.168.1.0/24(rw,fsid=0,no_subtree_check,crossmnt,sync) /home/altro 192.168.1.0/24(rw,no_subtree_check,sync)
Si condivide la cartella /home
e la sua sottocartella /home/altro
. La dicitura 192.168.1.0/24 serve a restringere l'accesso alla risorsa /home
alle sole richieste provenienti dagli indirizzi IP che vanno da 192.168.1.1 a 192.168.1.254. Una richiesta che per esempio dovesse provenire da 192.168.2.15 sarebbe rifiutata. Tra ( ) si indicano le opzioni:
rw
: abilita la cartella in lettura e scrittura, ammesso comunque che l'utente abbia il permesso di scrivere su quella cartella; indicando "ro" si limita la possibilità di scrivere anche per quegli utenti che, se non accedessero da remoto, avrebbero di norma il permesso di scrivere.fsid=0
: identifica la cartella come radice per il filesystem da esportare. Una sola cartella può avere valore di fsid pari a 0.no_subtree_check
: velocizza l'accesso alle risorse a scapito di un minimo aumento del rischio sicurezza.sync
: impone sincronia tra client e server. L'alternativa è async, ma è meglio evitarla poiché in caso di crash o eventi imprevisti aumenta la probabilità di causare danni al filesystem.crossmnt
: questa opzione serve in teoria solo se si sono rimontate delle directory (si veda la successiva sottosezione dedicata al rimontaggio delle cartelle), tuttavia è possibile che omettendola si noti un crollo della velocità di trasferimento (per esempio fino a 150-200 kB/s) nel trasferire grossi file da un client al server.
Per rendere operative le modifiche ai file di configurazione eseguire:
# service nfs-kernel-server restart
In caso di ulteriori problemi a visualizzare il contenuto delle cartelle provare a riavviare server e client.
RIMONTARE LE DIRECTORY
È possibile rimontare una o più cartelle in una seconda posizione col risultato che il contenuto delle cartelle risulta accessibile da due differenti posizioni (quella originale e quella dove si rimonta). Per far ciò è prima necessario creare il punto di mount, per esempio:
# mkdir -p /export/utente # mkdir -p /export/altro
Supponendo di voler rimontare le cartelle /home/utente
e /altro
rispettivamente in /export/utente
e /export/altro
:
# mount --bind /home/utente /export/utente # mount --bind /altro /export/altro
Per evitare di dover ridigitare ad ogni riavvio i precedenti comandi basta aggiungere le seguenti due righe al file /etc/fstab
:
/home/utente /export/utente none bind 0 0 /altro /export/altro none bind 0 0
A questo punto per esportare la cartella /export
non rimane che editare il file etc/exports
/export 192.168.1.0/24(rw,fsid=0,no_subtree_check,sync,crossmnt) /export/utente 192.168.1.0/24(rw,no_subtree_check,sync) /export/altro 192.168.1.0/24(rw,no_subtree_check,sync)
Da notare l'aggiunta dell'opzione crossmnt
, che non deve essere omessa pena l'impossibilità di vedere il contenuto delle sottocartelle di export sulle macchine client. Quest'opzione DEVE ESSERE assegnata solo alla cartella cui viene attribuito fsid=0.
Stando al manuale l'opzione nohide
ha un effetto molto simile a quello di crossmnt
, con la differenza che quest'opzione NON DEVE ESSERE assegnata alla cartella cui viene attribuito fsid=0, ma solo alle sotto directory (in caso contrario l'export delle risorse fallisce), ovvero restando al soprastante esempio:
/export 192.168.1.0/24(rw,fsid=0,no_subtree_check,sync) /export/utente 192.168.1.0/24(rw,no_subtree_check,sync,nohide) /export/altro 192.168.1.0/24(rw,no_subtree_check,sync,nohide)
Sottolineo che per quanto riguarda la mia personale esperienza questo secondo metodo è risultato inadeguato, poiché nel caso di trasferimento di grossi file (>1GB) da client a server ho notato un sistematico crollo della velocità di trasferimento (170 kB/s circa, tipicamente dopo aver superato la soglia di 1,1-2,5 GB trasferiti). Nel trasferimento da server a client le due soluzioni mi risultano invece equivalenti.