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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (→‎Introduzione: link glossario)
(verificata per Stretch e Buster, rimosse informazioni relative a versioni obsolete di Debian)
 
(40 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{File_System
==Introduzione==
|precedente=Samba:_guida_estesa
Ho deciso di fare questa guida poich� ho avuto molta difficolt� a creare una connessione remota sicura fra una macchina Windows ed una Linux in una LAN (o in una WAN) in quanto la maggior parte delle guide, degli How-To e delle FAQ che ho trovato in Internet esamina tale connessione fra due macchine Linux.
|successivo=Guida_alla_formattazione_dei_dischi_con_fdisk
}}
{{SSH
|precedente=SFTP: SSH File Transfer Protocol
}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
== 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).


La connessione remota sicura, che esaminero`, e` una connessione che usa il protocollo [http://it.wikipedia.org/wiki/Ssh SSH (Secure SHell)] e, perci�, � detta '''connessione SSH''' la quale si basa sulla [http://it.wikipedia.org/wiki/Crittografia_asimmetrica criptografia asimetrica] detta anche '''criptografia a coppia di chiavi''' o, piu` semplicemente, '''a chiave pubblica/privata''' (o, semplicemente, '''a chiave pubblica''') che consiste nella generazione di una coppia di chiavi (chiamate [http://it.wikipedia.org/wiki/Chiave_privata chiave privata] e [http://it.wikipedia.org/wiki/Chiave_pubblica chiave pubblica]). In pratica, la '''chiave pubblica''' codifica la communicazione mentre la '''chiave privata''' decodifica tale comunicazione e vengono generate usando degli algoritmi asimetrici che sono [http://it.wikipedia.org/wiki/RSA RSA] e [http://en.wikipedia.org/wiki/Digital_Signature_Algorithm DSA] e le connessioni che usano tali coppie di chiavi prodotte da questi algoritmi asimetrici sono dette '''connessioni SSH'''. Tali algoritmi, per�, servono soltanto per instaurare una connessione criptata fra il client SSH e il server SSH in quanto, per il trasferimento vero e proprio dei dati, si usano degli algoritmi simmetrici, come AES o 3DES, che sono molto pi� efficenti per questo scopo ovvero per cifrare la comunicazione. Quindi:
'''<code>Sshfs</code>''' permette di superare questo problema in un modo semplice e pulito: montando una directory mediante FUSE<sup>[[#Collegamenti esterni|[1]]]</sup>, usando il protocollo [[SSH]].


Una '''connessione SSH''' � una connessione cifrata che utilizza gli algoritmi asimetrici RSA o DSA soltanto per verificare se una chiave pubblica, memorizzata sul Server, derivi da una chiave privata salvata sul Client (in modo da garantire la reciproca autenticita` del Server e del Client) in modo da essere utilizzata, per l'intera sessione, per la cifratura simmetrica con algoritmi come AES o 3DES.
== Installazione ==
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>
# apt install sshfs
</pre>
(da eseguirsi con [[privilegi di amministrazione]])


==Scelta del software==
== Configurazione ==
=== 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; né ha più alcuna importanza l'appartenenza al gruppo ''fuse'', in precedenza richiesta.


Ora, dopo aver fatto questa introduzione per chiarire i termini che user� in seguito, spiegher�, in pratica, come si crea una connessione SSH da Windows a Linux. Per far ci�, occorre scegliere un server-software SSH sulla macchina Linux (che funge dal Server) ed un client-software SSH su una macchina Windows (che funge da Client). Ora, per scegliere un server-software SSH per Linux, non esiste alcun problema in quanto la communit� Open Source ha creato un ottimo prodotto che, ormai, tutte le distribuzione lo installano come default. Questo prodotto � il software [http://www.openssh.com/ OpenSSH Server]. Ora, siccome Windows (in tutte le sue edizione per il Desktop) non ha nessun client-software SSH, occorre cercarne uno. Il pi� semplice client SSH con licenza certificata Open Source � [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY] ma, chi volesse usare soprattutto la Shell di Linux ed avere qualche comodit� in pi� sullo stile di Windows, dovr� valutare programmi commerciali come [http://www.vandyke.com/products/securecrt/ SecureCRT] o [http://www.ssh.com/products/tectia/client/ SSH Tectia Client] che, per fortuna, si possono prelevare le versioni di valutazione completamente funzionanti prima dell'acquisto.
== Utilizzo e Test ==
L'utilizzo è semplice:
'''sshfs''' [user@]host''':'''[dir] mountpoint [options]
anche se spesso si può semplicemente usare senza opzioni:
<pre>
$ sshfs user@host:/dir/to/mount /mnt/sshdir
</pre>
dove
; <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>/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; questa directory deve appartenere all'utente, che deve avervi accesso anche in scrittura;


{{Box | Nota |I client SSH permettono soltanto di accedere alla Shell di Linux per poter eseguire comandi su un terminale a caratteri di questo sistema operativo. Per poter accedere anche al suo server grafico [http://it.wikipedia.org/wiki/X_Window_System X Window System] o '''X11''' o soltanto '''X''' (e, quindi, per poter controllare i vari ambienti grafici ed i programmi di X), occorre anche un [http://it.wikipedia.org/wiki/VNC client/server VNC]. Ora, niente paura in quanto, grazie alla funzionalit� [http://en.wikipedia.org/wiki/Tunneling_protocol Tunneling] di questi tre client SSH, � possibile controlare anche X sempre in modo sicuro.}}
per controllare la riuscita del comando, si può analizzare l'output del comando:
<pre>
$ findmnt
</pre>


==Configurazione dell'OpenSSH Server==
Per quanto riguarda lo smontaggio (unmounting) il comando è il seguente:
<pre>
$ fusermount -u /mnt/sshdir
</pre>


Una volta installato l'OpenSSH Server sulla macchina Linux, occorre configurarlo per scegliere il modo di authentificazione che volete che le macchine Client usano per accedere a questa macchina Linux.
per le opzioni consultare il file
<pre>
$ man sshfs
</pre>
tra le più comuni:
'''-p''' ''PORT'' equivalente a <code>-o port=PORT</code>
'''-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>


Le varie autentificazione che OpenSSH Server pu� offrire sono:
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>


#Autentificazione tramite '''password'''
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.
#Autentificazione '''ChallengeResponseAuthentication''' o '''Keyboard-Interactive'''
#Autentificazione '''a chiave pubblica'''
#Autentifiazione '''GSSAPI'''


'''L'autentificazione tramite password''' utilizza la Username e la Password dell'utente (le stesse usate per l'autentificazione in locale) per verificare se l'utente � autorizzato ad accedere da remoto alla macchina Linux.
=== Utenti e gruppi proprietari ===


'''L'autentificazione ChallengeResponseAuthentication o Keyboard-Interactive''' utilizza una serie di autentificazioni caratterizzate da richieste, fatte dal server SSH, che devono essere confermate dalle risposte mandate dal client SSH. Se le risposte coincidono a quelle memorizzate sul Server, l'utente � autorizzato ad accedere da remoto alla macchina Linux altrimenti questi non pu� entrare in tale macchina Linux.
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


'''L'autentificazione a chiave pubblica''' verifica se la chiavi pubblica, memorizzata sul Server, '''derivi''' dalla chiave privata memorizzata sul Client dell'utente. Se tale verifica ha esito positivo, l'utente pu� accedere alla macchina Linux altrimetri no. Siccome la chiave privata � praticamente un file, che autorizza chiunque entra in possesso ad entrare in un Server SSH, � consigliabile protteggerla con una '''passphrase''' che, in sostanza, � una password che occorre inserirla ogni volta (o quasi) che si effettua una connessione verso tale Server SSH.
<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).


----
==== Accesso ad altri utenti ====


: [[Utente:Balubeto|Balubeto]] 04:46, 29 Mag 2006 (EDT)
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 ==
=== failed to open <code>/dev/fuse</code>: No such file or directory ===
L'errore è dovuto alla mancanza del modulo del kernel relativo a ''fusefs''. È necessario compilarlo come modulo o staticamente. Nei kernel pacchettizzati Debian è presente, ed è caricabile con un:
<pre>
# modprobe fuse
</pre>
 
=== mountpoint is not empty ===
Se si cerca di montare una risorsa in un [[mountpoint]] contenente già dei file, può apparire il seguente errore:
<pre>fusermount: mountpoint is not empty
fusermount: if you are sure this is safe, use the 'nonempty' mount option</pre>
Le soluzioni sono:
* usare un mountpoint libero (consigliata)
* appendere, dopo il comando <code>''sshfs''</code> l'opzione <code>''-o nonempty''</code>
 
=== Collegamenti esterni ===
[1] [http://fuse.sourceforge.net/ FUSE]
{{Autori
|Autore = [[Utente:MaXeR|MaXeR]]
|Verificata_da =
: [[Utente:Wtf|Wtf]] 16:58, 9 ott 2013 (CEST)
: [[Utente:mm-barabba|mm.barabba]]
: [[Utente:HAL 9000|HAL 9000]] 21:01, 18 ago 2019 (CEST)
| Numero_revisori = 3
}}
 
[[Categoria:Filesystem]]
[[Categoria:Condivisione_risorse]]
[[Categoria:Crittografia]]
[[Categoria:SSH server e amministrazione remota]]

Versione attuale delle 19:01, 18 ago 2019

File System e dispositivi fisici
Arrow left.png

Generalità

Locali

Remoti

Strumenti

Arrow right.png



SSH
Arrow left.png

Guide correlate



Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

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

Sshfs permette di superare questo problema in un modo semplice e pulito: montando una directory mediante FUSE[1], usando il protocollo SSH.

Installazione

Il pacchetto sshfs e le utility per gestire FUSE sono già presenti in Debian, quindi l'installazione si riduce ad un semplice:

# apt install sshfs

(da eseguirsi con privilegi di amministrazione)

Configurazione

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 fuse se è installato; né ha più alcuna importanza l'appartenenza al gruppo fuse, in precedenza richiesta.

Utilizzo e Test

L'utilizzo è semplice:

sshfs [user@]host:[dir] mountpoint [options]

anche se spesso si può semplicemente usare senza opzioni:

$ sshfs user@host:/dir/to/mount /mnt/sshdir

dove

user
è l'utente della macchina remota, se omesso verrà utilizzato l'username dell'utente che lancia il comando;
host
è l'indirizzo IP o l'URL a cui la macchina remota risponde;
/dir/to/mount
è il percorso assoluto della directory da montare, (è possibile anche utilizzare un percorso relativo a partire dalla directory home dell'utente: ./path/to/dir; o perfino tralasciare questo argomento, per indicare la home, ma sempre digitando :);
/mnt/sshdir
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:

$ findmnt

Per quanto riguarda lo smontaggio (unmounting) il comando è il seguente:

$ fusermount -u /mnt/sshdir

per le opzioni consultare il file

$ man sshfs

tra le più comuni:

-p PORT equivalente a -o port=PORT
-C equivalente a -o compression=yes 
-F ssh_configfile specifica un file di configurazione alternativo
-1 equivalente a -o ssh_protocol=1

Si noti che per dichiarare opzioni di SSH è sufficiente digitare -o variabile_sshd=valore, ad esempio per specificare la propria chiave privata è sufficiente aggiungere -o IdentityFile=/percorso/chiave (ASSOLUTO!):

$ sshfs user@host:/dir/to/mount /mnt/sshdir -o IdentityFile=/percorso/chiave -p numero_porta

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

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

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

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

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: -o allow_other

Affinché abbia effetto però bisogna anche configurare fuse, ossia che /etc/fuse.conf contenga, non commentata, la riga user_allow_other, che di default è disabilitata per ragioni di sicurezza. Per maggiori informazioni si rimanda al manuale (man fuse).

È pertanto sconsigliato utilizzare tale impostazione, se si può fare altrimenti.

FAQ ed Errori Frequenti

failed to open /dev/fuse: No such file or directory

L'errore è dovuto alla mancanza del modulo del kernel relativo a fusefs. È necessario compilarlo come modulo o staticamente. Nei kernel pacchettizzati Debian è presente, ed è caricabile con un:

# modprobe fuse

mountpoint is not empty

Se si cerca di montare una risorsa in un mountpoint contenente già dei file, può apparire il seguente errore:

fusermount: mountpoint is not empty
fusermount: if you are sure this is safe, use the 'nonempty' mount option

Le soluzioni sono:

  • usare un mountpoint libero (consigliata)
  • appendere, dopo il comando sshfs l'opzione -o nonempty

Collegamenti esterni

[1] FUSE



Guida scritta da: MaXeR Swirl-auth80.png Debianized 80%
Estesa da:
Verificata da:
Wtf 16:58, 9 ott 2013 (CEST)
mm.barabba
HAL 9000 21:01, 18 ago 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized