Ricerca nel sito web

Come installare e utilizzare SSHFS su Linux


Su questa pagina

  1. Prerequisiti
  2. Installazione di SSHFS sul tuo computer locale
  3. Base: montaggio e smontaggio tramite SSHFS
  4. Impostazione di Chroot su SSHFS
  5. Risoluzione dei problemi
  6. Conclusione

SSHFS (SSH File System) è un'implementazione di un File System in User Space (FUSE) che consente ai client di montare un file system remoto tramite una connessione SSH. SSHFS utilizza SSH File Transfer Protocol (SFTP) per montare il file system remoto sulla macchina client e le connessioni tra client e server sono sicure e crittografate.

SSHFS può essere utilizzato come alternativa al tradizionale protocollo FTP. È sicuro per impostazione predefinita tramite la connessione SSH e non sono necessari pacchetti o configurazioni aggiuntivi. SSHFS funziona con una semplice configurazione SSH predefinita.

In questo tutorial imparerai come montare una directory remota in modo sicuro utilizzando SSHFS tra due macchine Linux (client e server). Questa guida include anche come configurare chroot su SSHFS che impedirà agli utenti di accedere alle directory di altri utenti.

Prerequisiti

Per seguire questa guida, avrai bisogno di due macchine Linux, un client e un server. Puoi utilizzare qualsiasi distribuzione Linux e assicurarti che sul server sia installato un server OpenSSH e che tu abbia un utente non root con i privilegi di root sudo.

Installazione di SSHFS sul computer locale

Per impostazione predefinita, i pacchetti SSHFS sono disponibili sulla maggior parte delle distribuzioni Linux, inclusi Debian/Ubuntu, RHEL/CentOS/Rocky e ArchLinux/Manjaro. Puoi installarlo facilmente utilizzando il tuo gestore di pacchetti di sistema. In questa sezione, installerai SSHFS sulla tua macchina locale/client.

Innanzitutto, aggiorna l'elenco degli indici dei pacchetti eseguendo il seguente comando.

# For Debian/Ubuntu
sudo apt update

# For RHEL/CentOS/RockyLinux
sudo dnf check-update

# For ArchLinux/Manjaro
sudo pacman -Syu

Dopo che l'indice del pacchetto è stato aggiornato, installa il pacchetto SSHFS utilizzando il tuo gestore di pacchetti come di seguito. Sulla distribuzione Debian e Archlinux, il pacchetto è chiamato sshfs, ma sulla distribuzione basata su RHEL, il pacchetto è chiamato fuse-sshfs.

# For Debian/Ubuntu
sudo apt install sshfs

# For RHEL/CentOS/RockyLinux
sudo dnf install fuse-sshfs

# For ArchLinux/Manjaro
sudo pacman -S sshfs

Ora hai completato l'installazione del pacchetto SSHFS sulla tua macchina locale. Successivamente, imparerai il comando di base per montare e smontare la directory/partizione remota sul tuo computer locale usando il comando SSHFS.

Di base: montaggio e smontaggio tramite SSHFS

Prima di iniziare con il comando SSHFS, assicurati di avere un server Linux con OpenSSH installato abilitato su di esso. Per l'autenticazione dell'utente al server, è possibile utilizzare l'autenticazione basata su password SSH o l'autenticazione basata su chiave SSH. Tuttavia, potresti prendere in considerazione l'uso dell'autenticazione basata su chiave SSH, che è più sicura dell'autenticazione basata su password.

In questa sezione imparerai il comando di base di sshfs per montare directory/partizioni remote dal server alla macchina locale/client. Inoltre, imparerai come smontare sshfs dalla tua macchina locale.

1. Di seguito è riportato il comando di base di sshfs per montare una directory sulla macchina locale tramite il protocollo SSH.

sshfs :/remote/directory /local/directory

In pratica, montare la directory remota /srv/data dal server 172.16.1.10 alla directory della macchina locale ~/data. Questo esempio utilizza l'utente SSH johndoe.

sshfs :/srv/data ~/data

Ora ti verrà richiesta l'autenticazione della password se stai utilizzando l'autenticazione basata su password per il tuo SSH.

Per verificare, esegui il comando ls nella directory ~/data sulla macchina locale.

ls -lah ~/data

Vedrai un elenco di file dal server remoto sul tuo computer locale.

2. Ora, per smontare la directory remota dal tuo computer locale, esegui il comando fusermount come di seguito. Questo comando viene utilizzato per montare e smontare i filesystem FUSE.

fusermount -u ~/data

3. Un altro esempio del comando sshfs che potrebbe interessarti.

Il comando sshfs con l'opzione di debug -d. Ogni volta che ti trovi in difficoltà con il comando sshfs, usa l'opzione aggiuntiva -d per mostrare tutti i messaggi di debug quando effettui una connessione al server.

sshfs :/remote/directory /local/directory -d

Ora, se stai eseguendo un server con una porta SSH non standard, puoi aggiungere l'opzione -p seguita dalla tua porta SSH.

sshfs :/remote/directory /local/directory -C -p 2222

L'opzione -C abiliterà la compressione, equivalente all'opzione -o compression=yes nel comando ssh.

Per un riferimento completo, puoi usare l'opzione --help o usare la manpage di SSHFS.

sshfs --help
man sshfs

Configurazione di Chroot su SSHFS

In questa sezione imparerai come abilitare chroot su SSHFS, che può essere ottenuto configurando il server SSH e specificando l'utente e la directory. L'ambiente chroot limiterà l'accesso alla directory, ma il tuo utente può ancora leggere e scrivere sulla directory di montaggio.

1. Innanzitutto, creerai una nuova directory chroot per il tuo utente e consentirai l'accesso in lettura e scrittura. In questa guida, creerai una nuova directory condivisa /srv/shared, quindi creerai una nuova home directory e una nuova directory dei dati per ogni utente.

Esegui il seguente comando per creare una nuova directory condivisa principale /srv/shared e modifica la proprietà dell'utente e del gruppo root.

mkdir -p /srv/shared
sudo chown -R root:root /srv/shared

2. Ora, crea un'altra directory per ciascun utente nella directory /srv/shared. E assicurati di cambiare la proprietà di quella directory all'utente e al gruppo root.

mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe

3. Successivamente, crea la directory data all'interno della directory home dell'utente /srv/shared/johndoe. Quindi cambia la proprietà di quella directory con l'utente root e il gruppo johndoe. Infine, consenti al gruppo johndoe di leggere e scrivere su quella directory.

mkdir -p /srv/shared/johndoe/data
sudo chown -R root:johndoe /srv/shared/johndoe/data
sudo chmod g+rwx /srv/shared/johndoe/data

Ora puoi montare la directory remota /data, ma è equivalente alla directory /srv/shared/johndoe/data sul server.

4. Dopo aver creato la directory chroot per il tuo utente, dovrai modificare la configurazione SSH /etc/ssh/sshd_config. Modificalo usando nano o il tuo editor di testo preferito.

sudo nano /etc/ssh/sshd_config

Aggiungere le seguenti righe al file.

Subsystem sftp internal-sftp
Match User johndoe
       ChrootDirectory /srv/shared/%u
       ForceCommand internal-sftp
       AllowTcpForwarding no
       X11Forwarding no

La configurazione internal-sftp consentirà a SSH di agire anche come server SFTP. Quindi definire la ChrootDirectory per l'utente johndoe nella directory /srv/shared/%u. Il %u significa come nome utente.

Salva e chiudi il file.

5. Successivamente, esegui il seguente comando per verificare la configurazione SSH e assicurati di non ricevere errori di sintassi. Quindi riavviare il servizio SSH per applicare una nuova configurazione.

sudo sshd -t
sudo systemctl restart sshd

6. Ora, torna al client/macchina locale, quindi monta la directory remota nell'ambiente chroot. Dovresti usare la directory /data, invece della directory del percorso completo /srv/shared/johndoe/data. E hai i privilegi per leggere, scrivere ed eseguire nella directory dei dati.

sshfs :/data ~/data

Per verificare l'accesso in scrittura, crea un nuovo file sul tuo computer client utilizzando il seguente comando.

cd ~/data
echo "This file from client machine" >> another-file.md

Ora, tornando al server, vai alla directory /srv/shared/johndoe/data, controlla il file disponibile in quella directory.

cd /srv/shared/johndoe/data/
ls

cat another-file.md

Vedrai il file che hai appena creato dal computer client.

In questa sezione, hai creato la directory chroot per gli utenti SSHFS e configurato il servizio SSH per abilitare chroot.

Risoluzione dei problemi

Se ricevi un errore sulla connessione SSHFS, puoi risolvere i problemi di connessione utilizzando i seguenti metodi.

Puoi utilizzare la modalità di debug con l'opzione -d. Con questa opzione, vedrai i log della tua connessione sul tuo terminale shell.

Esegui il comando sshfs con la modalità di debug come di seguito.

sshfs :/data ~/mnt -d

Un altro modo che puoi provare è controllare il registro SSH sul tuo server. Prima di utilizzare il comando sshfs, apri un nuovo terminale e connettiti al tuo server, quindi esegui il comando tail per controllare il servizio di log SSH.

Sui sistemi basati su Ubuntu/Debian, il registro SSH è disponibile in /var/log/auth.log. E per i sistemi basati su RHEL/CentOS, il registro SSH è disponibile in /var/log/secure.

# For Ubuntu/Debian
tail -f /var/log/auth.log

# For RHEL/CentOS
tail -f /var/log/secure

Conclusione

Congratulazioni! Ora hai imparato come utilizzare SSHFS per montare una directory remota dal server alla tua macchina locale. Inoltre, hai imparato come configurare l'ambiente chroot su SSHFS e come risolvere i problemi della tua connessione SSHFS.