Ricerca nel sito web

Come installare e utilizzare SFTP su server Linux


Su questa pagina

  1. Prerequisiti
  2. Verifica i pacchetti OpenSSH
  3. Crea gruppo e utente
  4. Imposta la directory della prigione di Chroot
  5. Abilita SFTP sul server SSH
  6. Accedi al server SFTP
  7. Conclusione

SFTP o SSH File Transfer Protocol è un metodo per trasferire in modo sicuro i dati tra due computer e altro ancora. Il suo FTP che funziona sopra il protocollo SSH e sfrutta la sua sicurezza e supporta pienamente la sua autenticazione.

Al giorno d'oggi, si consiglia di utilizzare SFTP invece del vecchio protocollo FTP o FTP/S. SFTP è sicuro per impostazione predefinita perché è così che funziona SSH. Dal punto di vista della sicurezza, SFTP ti protegge anche dallo sniffing delle password e dagli attacchi man-in-the-middle (MiTM).

Proprio come SSH, SFTP protegge anche l'integrità dei tuoi dati utilizzando la crittografia e la funzione hash crittografica. Inoltre, supporta più metodi di autenticazione sicuri, inclusa l'autenticazione basata su password e chiave. Inoltre, riduce la porta aperta del server alla rete esterna, poiché viene eseguita sulla stessa porta del protocollo SSH.

Prerequisiti

In questa guida imparerai come configurare il server SFTP su un sistema Linux. Inoltre, imparerai il comando di base del client sftp.

Di seguito è riportato l'ambiente corrente per l'implementazione:

  • Un server Linux: puoi usare Debian, Ubuntu, CentOS, Fedora, Rocky o qualsiasi altra distribuzione Linux.
  • Assicurati che i pacchetti OpenSSH siano disponibili sul tuo sistema Linux.
  • Client SFTP - riga di comando sftp o qualsiasi client GUI come preferisci.

Verificare i pacchetti OpenSSH

Per configurare un server SFTP, devi avere i pacchetti OpenSSH installati sul tuo sistema Linux. Quasi tutti i server di distribuzione Linux hanno i pacchetti OpenSSH installati per impostazione predefinita. Ma, nel caso in cui non si disponga del pacchetto OpenSSH sul proprio sistema, è possibile installarlo dal repository ufficiale.

1. Per assicurarti che i pacchetti OpenSSH siano installati sul tuo sistema Linux, usa il seguente comando.

Per i server Debian o Ubuntu, puoi utilizzare il comando dpkg di seguito.

dpkg -l | grep ssh

Di seguito è riportato l'output del nostro sistema Debian.

ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 client-side library
ii  openssh-client                1:8.4p1-5                      amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                1:8.4p1-5                      amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server           1:8.4p1-5                      amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines

La prima colonna ii indica che il pacchetto è installato. Il pacchetto openssh-sftp-server è installato sul sistema Debian/Ubuntu.

Per gli utenti RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux, è possibile utilizzare il comando rpm come di seguito.

rpm -qa | grep ssh

Crea gruppo e utente

A questo punto, creerai un nuovo gruppo e utente per il server SFTP. Gli utenti all'interno di questo gruppo potranno accedere al server SFTP. E per motivi di sicurezza, gli utenti SFTP non possono accedere al servizio SSH. Gli utenti SFTP accedono solo al server SFTP.

1. Esegui il seguente comando per creare un nuovo gruppo sftpgroup.

sudo groupadd sftpgroup

2. Crea un nuovo utente sftpuser utilizzando il seguente comando.

sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser

Opzioni dettagliate:

  • -G : aggiunge automaticamente l'utente a sftpgroup.
  • -d : specifica la home directory per il nuovo utente.
  • -s : imposta il valore predefinito per il nuovo utente su /sbin/nologin, il che significa che l'utente non può accedere al server SSH.

3. Successivamente, crea la password per l'utente sftpuser utilizzando il comando seguente.

passwd sftpuser

Digita la tua password complessa e ripeti, quindi premi Invio per confermare.

Per aggiungere più utenti, ripetere le fasi numero 2 e 3, e, soprattutto, tutti gli utenti SFTP devono essere nel gruppo sftpgroup senza accesso alla shell tramite SSH.

Configura la directory della prigione di Chroot

Dopo aver creato un nuovo gruppo e utente, è necessario creare e configurare la directory chroot per gli utenti SFTP.

1. Per l'utente sftpuser, la nuova home directory sarà in /srv/sftpuser. Esegui il comando seguente per crearlo.

mkdir -p /srv/sftpuser

2. Per impostare chroot per l'utente sftpuser, è necessario modificare la proprietà della directory sull'utente root, ma rimanere il gruppo da leggere ed eseguire senza accesso in scrittura.

Modificare la proprietà della directory in utente root utilizzando il seguente comando.

sudo chown root /srv/sftpuser

Concedi al gruppo il permesso di leggere ed eseguire, ma non di scrivere.

sudo chmod g+rx /srv/sftpuser

3. Successivamente, crea una nuova directory di dati all'interno della directory /srv/sftpuser e cambia la proprietà di quella directory data all'utente sftpuser.

mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

Finora, sotto i dettagli della configurazione per la directory utente SFTP.

  • La directory /srv/sftuser è la directory home predefinita.
  • L'utente sftpuser non può scrivere nella directory /srv/sftpuser, ma può leggere all'interno di quella directory.
  • L'utente sftpuser può caricare file sul server SFTP nella directory /srv/sftpuser/data.

Abilita SFTP sul server SSH

Per abilitare il server SFTP su OpenSSH, è necessario modificare la configurazione SSH /etc/ssh/sshd_config.

1. Modifica la configurazione ssh /etc/ssh/sshd_config usando nano o vim.

sudo nano /etc/ssh/sshd_config

2. Commenta la seguente configurazione per disabilitare la funzione autonoma sftp-server.

#Subsystem      sftp    /usr/lib/openssh/sftp-server

3. Incollare la seguente configurazione in fondo alla riga.

Subsystem sftp internal-sftp

Match Group sftpgroup
     ChrootDirectory %h
     X11Forwarding no
     AllowTCPForwarding no
     ForceCommand internal-sftp

Salva la configurazione ed esci.

Configurazione dettagliata:

  • Invece di usare il processo secondario sftp-server, stiamo usando internal-sftp.
  • Il server SFTP abilitato per il gruppo sftpgroup.

4. Per applicare una nuova configurazione, riavviare il servizio ssh utilizzando il comando seguente.

sudo systemctl restart sshd

Il server SFTP è pronto e accessibile e funziona sulla stessa porta del servizio SSH.

Accedi al server SFTP

Sul lato client, utilizzeremo la riga di comando sftp, che è installata per impostazione predefinita sulla maggior parte delle distribuzioni Linux. Ma puoi anche utilizzare un altro client a riga di comando o un client FTP GUI come FileZilla, Cyberduck, ecc.

1. Per connettersi al server SFTP, eseguire il comando sftp come di seguito.

sftp 

Se il tuo server SFTP e/o SSH è in esecuzione sulla porta personalizzata, puoi utilizzare il comando sftp come di seguito.

sftp -P PORT 

Digita la password per sftpuser.

2. Dopo esserti connesso al server SFTP, esegui il seguente comando.

Mostra la directory di lavoro del percorso corrente ed elenca tutti i file e le directory disponibili.

pwd
ls

3. Carica un file locale sul server SFTP nella directory /, che risulterà come permesso negato, perché è la directory chroot.

put /path/to/file/on/local /

4. Carica un file locale nella directory /data/ sul server SFTP. Se la configurazione è corretta, il file verrà caricato nella directory /data/.

put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

5. Ora controlla i file disponibili nella directory /data usando il seguente comando.

ls /data/

E vedrai il tuo file caricato sul server SFTP.

Conclusione

Congratulazioni! Hai configurato correttamente il server SFTP sul sistema Linux. Questo tipo di configurazione può essere applicato sulla maggior parte dei sistemi Linux con OpenSSH installato su di esso. Inoltre, hai imparato come impostare la directory chroot per gli utenti SFTP e hai appreso il comando client sftp di base.