Configurazione di un servizio SFTP tramite il demone SSH in Ambiente Linux

Può essere necessario attivare un servizio di scambio file in modo che utenti, anche esterni, abbiano la possibilità, di effettuare trasferimenti di archivi magari anche per mezzo di procedure schedulate.

Tramite il demone SSH è possibile configurare un servizio di scambio file analogamente al vecchio ed ormai in disuso FTP.

L’utilizzo di SSH in questo caso garantisce maggior riservatezza e sicurezza nella connessione in quanto la comunicazione avviene su in canale cifrato tramite la porta 22 tipica di questo servizio.

Questa peculiarità rende anche le configurazioni relative all’ambiente di protezione più semplici, ovviando alle fastidiose configurazioni necessarie per consentire il traffico in porta 20 e 21 tipiche dell’FTP, oppure all’attivazione della modalità passiva lato client.

 

 

 

 

 

 

 

Come visto in questo Post tramite SSH è possibile configurare un sistema che realizzi un tunnel in modo da Bypassare eventuali sistemi di sicurezza ed accedere in modo trasparente ad un sistema che è “dietro” ad un Firewall e non accessibile altrimenti.

Nel caso dell’implementazione del servizio SFTP tramite il demone SSH è bene tenere presente questa peculiarità ed adottare alcuni accorgimenti di sicurezza che impediscono, sulla base dell’appartenenza ad un gruppo, l’utilizzo della funzione di Tunnel.

Sempre in un’ottica di robustezza di accesso al servizio, è bene considerare la possibilità che le cartelle definite accessibili per lo scambio di file, siano confinate in un ambiente CHROOT e che gli utenti, con i permessi di accesso allo scambio file, possano esclusivamente accedere a questa funzione, ma non possano in alcun modo avere accesso tramite SSH alla shell del sistema operativo anche se con permessi limitati.

Le configurazioni qui sotto proposte, tengono conto di queste premesse e definiscono un ambiente il più “sicuro” possibile.

Le configurazioni sono effettuate nel file conf del servizio SSHD e più precisamente nel file sshd_config

(in questo esempio è presa come riferimento la Distro Linux Centos 7.x) posizionato in /etc/ssh e per mezzo dei comandi groupadd e useradd verranno creati il gruppo e gli utenti che dovranno accedere alle cartelle in “share”.

Il gruppo creato per concedere il permesso di accesso è FtpScambioFile e verrà creata in / ( root) una cartella /ScambioFiles dove verrà definita in configurazione la root dell’ambiente Chroot per SFTP al di sotto della quale saranno create una o più cartelle per l’archiviazione vera e propria

Per prima cosa è necessario creare il gruppo con il comando groupadd e successivamente la cartella dell’archivio SFTP (che può essere in un punto qualunque del Filesystem per comodità in questo esempio la creeremo in /) e le sottocartelle accessibili in lettura/scrittura

Sudo groupadd FtpScambioFile

sudo mkdir /ScambioFiles/

sudo chown root:root /ScambioFiles/

sudo chmod 755 /ScambioFiles/

la cartella ScambioFiles deve avere come proprietario l’utente root, ed i permessi come nell’esempio sopra, nel caso questo passo non venisse completato, l’accesso risulterebbe impossibile e all’interno di /var/log/secure verrebbe evidenziato un errore

A questo punto è possibile procedere con la creazione di una ulteriore sottocartella utilizzata per il trasferimento dei file e dei relativi permessi

sudo mkdir /ScambioFiles/Scambio

sudo chown root:FtpScambioFile /ScambioFiles/Scambio/

sudo chmod 775 /ScambioFiles/Scambio/

Terminata la prima parte della configurazione, ossia quella relativa alla creazione della struttura delle cartelle e dei relativi permessi, si può proseguire con la configurazione del file sshd_config come nell’immagine qui sotto.

Al termine del file nella sezione # override default of no subsystems commentare la riga presente come indicato al punto 1

Successivamente inserire le seguenti righe di configurazione

Subsystem sftp internal-sftp

Match Group FtpScambioFile

ForceCommand internal-sftp

ChrootDirectory /ScambioFiles/

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

La dichiarazione al punto 2 imposta il servizio per operare anche come un SFTP server.

Al punto 3 sono indicati il nome del gruppo, il percorso della root del CHROOT e la modalità operativa del servizio SFTP (per dettagli ulteriori consultare la pagina help disponibile sul sistema man sshd_config di cui il testo sotto è un estratto)

# man sshd_config |grep internal

Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with ChrootDirectory. Alternately the name “internal-sftp” implements an in-process “sftp” server. This may simplify configurations using ChrootDirectory to force a different filesystem root on clients.

A questo punto è sufficiente riavviare il servizio ssh con il comando

systemctl restart sshd.service

e procedere alla creazione dei singoli utenti che accederanno al servizio

sudo adduser -g FtpScambioFile <nome_utente>

sudo passwd <nome_utente>

tramite un client SFTP come ad esempio Filezilla è possibile accedere all’ambiente appena creato, anche nella pagina di Download di Putty è disponibile un eseguibile che da linea di comando può essere di aiuto per script vari.

Considerazioni:

E’ ancora prassi comune l’utilizzo di protocolli poco sicuri per il trasferimento di file come ad esempio FTP.

La soluzione proposta, che parte da un’esigenza ben specifica, ha permesso di salvaguardare da un lato la necessità di avere a disposizione determinate informazioni, e dall’altro di salvaguardare la sicurezza delle stesse permettendone la trasmissione all’interno di un canale cifrato.