SSHFS (SSH File System) è un'implementazione di un File System in User Space (FUSE) che consente ai client di montare un filesystem remoto su 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 usando SSHFS tra due macchine Linux (client e server). Questa guida include anche come impostare 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 tuo computer locale
Per impostazione predefinita, SSHFS i pacchetti sono disponibili sulla maggior parte delle distribuzioni Linux, inclusi Debian/Ubuntu, RHEL/CentOS/Rocky e ArchLinux/Manjaro. Puoi installarlo facilmente usando il tuo gestore di pacchetti di sistema. In questa sezione, installerai SSHFS sul tuo computer locale/client.
Innanzitutto, aggiorna l'elenco degli indici dei pacchetti eseguendo il comando seguente.
# 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 tuo pacchetto è stato aggiornato, installa il pacchetto SSHFS usando il tuo gestore di pacchetti come di seguito. Nelle distribuzioni Debian e Archlinux, il pacchetto è denominato 'sshfs ', ma nella 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 sul tuo computer locale. Successivamente, imparerai il comando di base per montare e smontare la directory/partizione remota sulla tua macchina locale usando il comando SSHFS.
Base:monta e smonta usando 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 dal tuo computer locale.
1. Il comando di base di 'sshfs ' per il montaggio di una directory sulla macchina locale tramite il protocollo SSH è di seguito.
sshfs [email protected]:/remote/directory /local/directory
In pratica, monta la directory remota '/srv/data ' dal server '172.16.1.10 ' nella directory della macchina locale '~/data '. Questo esempio utilizza l'utente SSH 'johndoe'.
sshfs [email protected]:/srv/data ~/data
Ora ti verrà richiesta l'autenticazione della password se stai utilizzando l'autenticazione basata sulla password per il tuo SSH.
Per verificare, esegui il comando 'ls' nella directory '~/data ' sul computer 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 sotto. Questo comando viene utilizzato per montare e smontare i filesystem FUSE.
fusermount -u ~/data
3. Un altro esempio di 'sshfs ' comando che potrebbe interessarti.
Il comando 'sshfs' con l'opzione di debug '-d '. Ogni volta che hai problemi con il comando 'sshfs', usa l'opzione aggiuntiva '-d' per mostrare tutti i messaggi di debug quando si effettua una connessione al server.
sshfs [email protected]:/remote/directory /local/directory -d
Ora, se stai utilizzando un server con una porta SSH non standard, puoi aggiungere l'opzione '-p' seguito dalla tua porta SSH.
sshfs [email protected]:/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 utilizzare l'opzione '--help' o la pagina di manuale 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 di dati per ogni utente.
Esegui il comando seguente per creare una nuova directory condivisa principale '/srv/shared' e cambia 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 ogni utente sotto '/srv/shared' directory. E assicurati di cambiare la proprietà di quella directory per l'utente e il gruppo 'root '.
mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe
3. Quindi, crea i 'dati ' directory all'interno della directory home dell'utente '/srv/shared/johndoe '. Quindi cambia la proprietà di quella directory nell'utente 'root ' e raggruppa 'johndoe '. Infine, consenti al gruppo 'johndoe ' per 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 utilizzando nano o il tuo editor di testo preferito.
sudo nano /etc/ssh/sshd_config
Aggiungi 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 fungere anche da server SFTP. Quindi definisci la 'CrootDirectory ' per l'utente 'johndoe ' a '/srv/shared/%u ' directory. Il '%u ' significa come nome utente.
Salva e chiudi il file.
5. Quindi, esegui il comando seguente per verificare la configurazione SSH e assicurati di non ricevere errori di sintassi. Quindi riavvia 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 'data'.
sshfs [email protected]:/data ~/data
Per verificare l'accesso in scrittura, crea un nuovo file sul tuo computer client utilizzando il comando seguente.
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 su 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 nei seguenti modi.
Puoi usare la modalità di debug con l'opzione '-d' . Con questa opzione, vedrai i registri della tua connessione sul tuo terminale shell.
Esegui 'sshfs ' comando con modalità di debug come di seguito.
sshfs [email protected]:/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 'tail ' per controllare il servizio di log SSH.
Su un sistema basato 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 usare SSHFS per montare una directory remota dal server al tuo computer locale. Inoltre, hai imparato come configurare l'ambiente chroot su SSHFS e come risolvere i problemi della tua connessione SSHFS.