SSHFS: montare una risorsa remota sfruttando FUSE ed SSH: differenze tra le versioni

verificata per Stretch e Buster, rimosse informazioni relative a versioni obsolete di Debian
m (versioni compatibili)
(verificata per Stretch e Buster, rimosse informazioni relative a versioni obsolete di Debian)
 
Riga 6: Riga 6:
|precedente=SFTP: SSH File Transfer Protocol
|precedente=SFTP: SSH File Transfer Protocol
}}
}}
{{Versioni compatibili|Wheezy|Jessie}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
== Introduzione ==
== Introduzione ==
Spesso può essere necessario lavorare direttamente su un filesystem remoto (si pensi, ad esempio, alla webroot di un sito o alla home del proprio portatile).
Spesso può essere necessario lavorare direttamente su un filesystem remoto (si pensi, ad esempio, alla webroot di un sito o alla home del proprio portatile).
Riga 15: Riga 15:
Il pacchetto <code>sshfs</code> e le utility per gestire FUSE sono già presenti in Debian, quindi l'installazione si riduce ad un semplice:
Il pacchetto <code>sshfs</code> e le utility per gestire FUSE sono già presenti in Debian, quindi l'installazione si riduce ad un semplice:
<pre>
<pre>
# apt-get install sshfs fuse
# apt install sshfs
</pre>
</pre>
 
(da eseguirsi con [[privilegi di amministrazione]])
Per quanto riguarda il [[kernel]], normalmente è presente il modulo ''fuse''. Se non è presente è necessaria la ricompilazione del kernel.
 
Il modulo da attivare si trova in: ''File systems  --->  Filesystem in Userspace support''.


== Configurazione ==
== Configurazione ==
=== Creazione del punto di mount ===
Prima di tutto è necessario creare un [[mountpoint | punto di montaggio]] in cui montare la risorsa di rete (ovviamente ognuno è liberissimo di utilizzare la directory che vuole):
<pre>
# mkdir /mnt/sshdir
</pre>
è necessario, inoltre, impostare l'utente che utilizzerà questa directory come ''[[owner]]'':
<pre>
# chown username /mnt/sshdir
</pre>
=== Permettere l'esecuzione di sshfs ad altri utenti ===
=== Permettere l'esecuzione di sshfs ad altri utenti ===
A partire da Debian 8 ([[Jessie]]) non è necessario modificare niente, in quanto di default tutti gli utenti possono utilizzare il modulo <code>fuse</code> se è installato, a prescindere dalla loro appartenenza al gruppo ''fuse''.
A partire da Debian 8 ([[Jessie]]) non è necessario modificare niente, in quanto di default tutti gli utenti possono utilizzare il modulo <code>fuse</code> se è installato; né ha più alcuna importanza l'appartenenza al gruppo ''fuse'', in precedenza richiesta.
 
Con Debian 7 ([[Wheezy]]) e precedenti invece, per impostazione predefinita l'utilizzo di <code>sshfs</code> richiede [[privilegi di amministrazione]], tuttavia è possibile permettere l'utilizzo di <code>sshfs</code> anche agli utenti normali, se li si aggiunge al gruppo '''fuse'''.
 
{{Box|Nota|Non è necessario cambiare i permessi di esecuzione di sshfs per garantire una corretta corrispondenza dei permessi di file/cartelle tra macchina locale e remota. Permettere l'esecuzione di sshfs ad utenti diversi da [[root]] SOLO se si ha l'effettiva necessità di permettere ad uno o più utenti normali di caricare risorse remote autonomamente.}}
 
<!-- OBSOLETO: Passaggi obsoleti (in Wheezy), per ora commentati
 
# chgrp fuse /usr/bin/fusermount
# chmod u+s /usr/bin/fusermount
 
-->
Per aggiungere un utente (qui chiamato "nomeutente") al gruppo, basta il seguente comando:
<pre>
# adduser nomeutente fuse
</pre>
in questo modo aggiungiamo l'utente che utilizzerà <code>sshfs</code> al gruppo ''fuse'', permettendo di leggere e scrivere <code>/dev/fuse</code> e di eseguire come amministratore <code>fusermount</code>.
 
Per rendere effettiva l'aggiunta al gruppo è necessario effettuare un logout-login.


== Utilizzo e Test ==
== Utilizzo e Test ==
L'utilizzo è semplice:
L'utilizzo è semplice:
  sshfs [user@]host:[dir] mountpoint [options]
  '''sshfs''' [user@]host''':'''[dir] mountpoint [options]
anche se spesso si può semplicemente usare con :
anche se spesso si può semplicemente usare senza opzioni:
<pre>
<pre>
$ sshfs user@host:/dir/to/mount /mnt/sshdir
$ sshfs user@host:/dir/to/mount /mnt/sshdir
</pre>
</pre>
dove
dove
; <code>user</code>: è l'utente della macchina remota, se omesso verrà utilizzato l'username dell'utente che lancia il comando ([[root]], in questo caso);
; <code>user</code>: è l'utente della macchina remota, se omesso verrà utilizzato l'username dell'utente che lancia il comando;
; <code>host</code>: è l'indirizzo IP o l'URL a cui la macchina remota risponde;
; <code>host</code>: è l'indirizzo IP o l'URL a cui la macchina remota risponde;
; <code>/dir/to/mount</code>: è il percorso assoluto della directory da montare, (è possibile anche utilizzare un percorso relativo a partire dalla directory home dell'utente: <code>''./path/to/dir''</code>);
; <code>/dir/to/mount</code>: è il percorso assoluto della directory da montare, (è possibile anche utilizzare un percorso relativo a partire dalla directory home dell'utente: <code>''./path/to/dir''</code>; o perfino tralasciare questo argomento, per indicare la home, ma sempre digitando '''<code>:</code>''');
; <code>/mnt/sshdir</code>: rappresenta il punto di mount;
; <code>/mnt/sshdir</code>: rappresenta il punto di mount; questa directory deve appartenere all'utente, che deve avervi accesso anche in scrittura;


per controllare la riuscita del comando, si può analizzare l'output del comando:
per controllare la riuscita del comando, si può analizzare l'output del comando:
<pre>
<pre>
$ mount
$ findmnt
</pre>
</pre>


Riga 77: Riga 46:
</pre>
</pre>


per le opzioni consultare il file  
per le opzioni consultare il file
$man sshfs
<pre>
tra le più comuni :
$ man sshfs
  -p PORT equivalente a '-o port=PORT'
</pre>
  -C equivalenta a '-o compression=yes'
tra le più comuni:
  -F ssh_configfile specifica un file di configurazione alternativo
  '''-p''' ''PORT'' equivalente a <code>-o port=PORT</code>
  -1 equivalente a '-o ssh_protocol=1'
  '''-C''' equivalente a <code>-o compression=yes</code>
  '''-F''' ''ssh_configfile'' specifica un file di configurazione alternativo
  '''-1''' equivalente a <code>-o ssh_protocol=1</code>


Si noti che per dichiarare opzioni di SSH è sufficiente digitare '''-o variabile_sshd=valore''', ad esempio per specificare la propria chiave privata è sufficiente aggiungere <code>-o IdentityFile=/percorso/chiave</code> (ASSOLUTO!):
Si noti che per dichiarare opzioni di SSH è sufficiente digitare <code>'''-o''' ''variabile_sshd'''''='''''valore''</code>, ad esempio per specificare la propria chiave privata è sufficiente aggiungere <code>-o IdentityFile=/percorso/chiave</code> (ASSOLUTO!):
<pre>$ sshfs user@host:/dir/to/mount /mnt/sshdir -o IdentityFile=/percorso/chiave -p numero_porta</pre>
<pre>$ sshfs user@host:/dir/to/mount /mnt/sshdir -o IdentityFile=/percorso/chiave -p numero_porta</pre>


Se il mount avviene con successo è possibile usare il file-manager preferito per poter gestire in lettura e scrittura la nuova directory montata , che sia esso MC, dolphin, PCmanfm o altro.
Se il mount avviene con successo è possibile usare il file-manager preferito per poter gestire in lettura e scrittura la nuova directory montata, che sia esso MC, dolphin, PCmanfm o altro.


=== Utenti e gruppi proprietari ===
=== Utenti e gruppi proprietari ===
Riga 94: Riga 65:
Per impostazione predefinita sshfs adotta un'associazione "diretta" tra [[UID]]/[[GID]] della macchina remota e quella locale, il che significa per esempio che se il proprietario di un certo file sulla macchina remota è l'utente con UID 1002 anche in locale la proprietà del file sarà attribuita all'utente avente UID 1002. Potrebbero dunque sorgere problemi di permessi se su macchina remota e locale non sussiste un esatta corrispondenza utenti/UID e gruppi/GID. Un modo veloce per superare tale problema è specificare lo UID/GID durante il comando per montare le risorse remote, per esempio
Per impostazione predefinita sshfs adotta un'associazione "diretta" tra [[UID]]/[[GID]] della macchina remota e quella locale, il che significa per esempio che se il proprietario di un certo file sulla macchina remota è l'utente con UID 1002 anche in locale la proprietà del file sarà attribuita all'utente avente UID 1002. Potrebbero dunque sorgere problemi di permessi se su macchina remota e locale non sussiste un esatta corrispondenza utenti/UID e gruppi/GID. Un modo veloce per superare tale problema è specificare lo UID/GID durante il comando per montare le risorse remote, per esempio


<pre># sshfs user@host:/dir/to/mount /mnt/sshdir -o allow_other,idmap=user,uid=1001</pre>
<pre># sshfs user@host:/dir/to/mount /mnt/sshdir -o idmap=user,uid=1001</pre>


fa sì che all'utenza usata per connettersi al server remoto sia associata in locale l'utenza avente UID 1001. Se si ha la necessità di fissare la corrispondenza di più utenze/gruppi è possibile creare degli appositi file di mappatura (si veda il manuale di sshfs).
fa sì che all'utenza usata per connettersi al server remoto sia associata in locale l'utenza avente UID 1001. Se si ha la necessità di fissare la corrispondenza di più utenze/gruppi è possibile creare degli appositi file di mappatura (si veda il manuale di sshfs).


Inoltre, per permettere l'accesso anche ad altri utenti (indipendentemente dai permessi associati ai file), è stata aggiunta l'opzione: <code>-o allow_other</code>
==== Accesso ad altri utenti ====
 
Per permettere l'accesso del file system anche ad altri utenti, indipendentemente dai permessi associati ai file, è possibile mediante l'opzione: <code>-o allow_other</code>
 
Affinché abbia effetto però bisogna anche configurare '''fuse''', ossia che <code>/etc/fuse.conf</code> contenga, non commentata, la riga <code>user_allow_other</code>, che di default è disabilitata per ragioni di sicurezza. Per maggiori informazioni si rimanda al manuale (<code>man fuse</code>).
 
È pertanto '''sconsigliato''' utilizzare tale impostazione, se si può fare altrimenti.


== FAQ ed Errori Frequenti ==
== FAQ ed Errori Frequenti ==
Riga 115: Riga 92:
* appendere, dopo il comando <code>''sshfs''</code> l'opzione <code>''-o nonempty''</code>
* appendere, dopo il comando <code>''sshfs''</code> l'opzione <code>''-o nonempty''</code>


<!--
OBSOLETO: possibile parte obsoleta, per ora la commento
=== fusermount: mount failed: Invalid argument ===
È possibile che la versione dei pacchetti <code>fuse-utils, libfuse2, sshfs-fuse</code> non sia sufficientemente aggiornata rispetto alla versione del kernel in uso.<br/>
Si legga in particolare la discussione apparsa su [http://forum.debianizzati.org/viewtopic.php?f=19&t=21639 questa pagina] nel forum.
La soluzione prospettata è quella  di sostituire e aggiornare i pacchetti a tutt'oggi disponibili (per Sarge: <code>fuse-utils 2.2.1-4, libfuse2 2.2.1-4, sshfs 1.1-1</code> ) con le versioni a disposizione su [http://www.backports.org/ http://www.backports.org/] (<code>fuse-utils 2.5.3-1bpo1, libfuse2 2.5.3-1bpo1, sshfs_1.6-0bpo1</code>) seguendo le relative [http://www.backports.org/dokuwiki/doku.php?id=instructions istruzioni].
-->
=== Collegamenti esterni ===
=== Collegamenti esterni ===
[1] [http://fuse.sourceforge.net/ FUSE]
[1] [http://fuse.sourceforge.net/ FUSE]
Riga 131: Riga 98:
|Verificata_da =
|Verificata_da =
: [[Utente:Wtf|Wtf]] 16:58, 9 ott 2013 (CEST)
: [[Utente:Wtf|Wtf]] 16:58, 9 ott 2013 (CEST)
: [[Utente:mm-barabba|mm.barabba]]  
: [[Utente:mm-barabba|mm.barabba]]
: [[Utente:HAL 9000|HAL 9000]] 18:31, 20 ago 2014 (CEST)
: [[Utente:HAL 9000|HAL 9000]] 21:01, 18 ago 2019 (CEST)
| Numero_revisori = 3
| Numero_revisori = 3
}}
}}


[[Categoria:Filesystem]]
[[Categoria:Filesystem]]
3 581

contributi