Home » Blog » Guide tecniche » Come configurare SFTP su un server web
SFTP è di gran lunga una soluzione più sicura del tradizionale protocollo di upload di file FTP. Nella sua configurazione di base, SFTP consente agli utenti di accedere un po’ dappertutto all’interno del server web.
In questa guida imparerai a configurare SFTP affinché gli utenti accedano alle sole directory di loro competenza, senza avere nemmeno la possibilità di utilizzare SSH.
Indice dei Contenuti
Quello che vogliamo è far si che ogni utente acceda alla sola directory del sito web di competenza, senza la possibilità di navigare altre directory del server web. Naturalmente ogni server è configurato a suo modo. Nel nostro caso abbiamo la directory /var/www/
che contiene tutte le root directory dei vari siti web:
/var/www/miosito.com
/var/www/staging.miosito.com
All’interno delle root directory abbiamo la directory public_html
che contiene i file html del sito web:
/var/www/miosito.com/public_html
/var/www/staging.miosito.com/public_html
Quindi nel nostro caso andremo a creare un gruppo di utenti in grado di accedere solo a /var/www/miosito.com/
ed uno in grado di accedere solo a /var/www/staging.miosito.com/
con possibilità di scrivere solo sulle rispettive public_html
.
Dopo aver verificato con un semplice test di connessione che SFTP funziona correttamente, iniziamo con la creazione dei gruppi di utenti.
I gruppi sono molto comodi in quanto consentono di aggiungere nuovi utenti SFTP in futuro senza dover configurare autorizzazioni manualmente utente per utente. Iniziamo con la creazione dei due gruppi:
sudo groupadd staging
sudo groupadd live
Gli utenti del gruppo staging
saranno quelli autorizzati ad accedere a staging.miosito.com
mentre quelli del gruppo live
a miosito.com
. Naturalmente sentiti libero di cambiare le nomenclature come meglio preferisci.
A questo punto creiamo gli utenti. Per comodità ne creiamo uno per il primo gruppo e uno per il secondo, fermo restando che è possibile crearne quanti ne vuoi.
sudo adduser utentestaging
sudo adduser utentelive
Creati gli utenti non rimane che associarli ai rispettivi gruppi:
sudo usermod -a -G staging utentestaging
sudo usermod -a -G live utentelive
Adesso occorre configurare SFTP per dare le giuste autorizzazioni ai gruppi creati al punto 2.
Come già detto vogliamo che gli utenti appartenenti a questi gruppi non siano in grado di fare il login via SSH. Dopodiché vogliamo che dopo il login con SFTP la loro home corrisponda a quella della root directory del sito web.
Per fare questo modifichiamo il file /etc/ssh/sshd_config
, commentiamo la riga Subsystem sftp
anteponendo un #
e aggiungiamo la riga Subsystem sftp internal-sftp
. Alla fine dovrà venir fuori qualcosa di simile:
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
A questo punto in fondo al file occorre aggiungere un Match Group
con un ChrootDirectory
. La directory di chroot è quella immediatamente precedente la public_html
, ovvero la root directory, e corrisponde alla directory che gli utenti vedranno dopo il login via SFTP.
Aggiungere le seguenti righe in fondo a sshd_config
:
Match Group staging
ChrootDirectory /var/www/staging.miosito.com/
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
Match Group live
ChrootDirectory /var/www/miosito.com/
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
Praticamente stiamo dicendo ad SSH di inibire l’accesso via terminale agli utenti che fanno parte dei gruppi live
e staging
grazie alla direttiva ForceCommand internal-sftp
. Dopodiché di forzare la home directory a quella di chroot.
Per ovvi motivi è molto importante non aggiungere utenti amministratori ai gruppi appena creati altrimenti non riuscirebbero ad effettuare più alcun accesso via SSH.
Non rimane che salvare il file e riavviare SSH:
sudo service ssh restart
Questo passo è importantissimo in quanto se non fatto correttamente SFTP rifiuterà i tentativi di connessione. Come prima cosa la directory che ingloba tutte le directory di chroot deve avere root
come owner. Nel nostro caso la directory è /var/www/
. Quindi:
sudo chown root:root /var/www/
Per consentire agli utenti di effettuare l’accesso occorre settare alle directory di chroot il permesso 755 ed associare i rispettivi gruppi. Quindi:
sudo chown -R root:live /var/www/miosito.com/
sudo chown -R root:staging /var/www/staging.miosito.com/
sudo chmod 755 /var/www/miosito.com/
sudo chmod 755 /var/www/staging.miosito.com/
Infine facciamo in modo che eventuali nuovi file creati all’interno delle directory di chroot ereditino lo stesso gruppo:
sudo find /var/www/miosito.com/ -type d -exec chmod g+s {} \;
sudo find /var/www/staging.miosito.com/ -type d -exec chmod g+s {} \;
Per consentire gli utenti dei gruppi di scrivere all’interno delle directory di chroot, occorre impostare a file e sottodirectory il permesso 775:
sudo chmod -R 775 /var/www/miosito.com/*
sudo chmod -R 775 /var/www/staging.miosito.com/*
ATTENZIONE: L’asterisco seguito dallo slash è importante altrimenti il permesso viene cambiato anche alla stessa directory di chroot!
Alla fine avremo qualcosa del tipo:
ls -l /var/www/
drwxr-sr-x 3 root root 4096 Jun 13 09:09 miosito.com
drwxr-sr-x 4 root root 4096 Jun 13 09:05 staging.miosito.com
ls -l /var/www/staging.miosito.com
drwxrwsr-x 10 root staging 4096 Jun 13 09:07 public_html
ls -l /var/www/miosito.com
drwxrwsr-x 2 root live 4096 Jun 13 09:09 public_html
Non rimane che effettuare un test di connessione per verificare che tutto funzioni correttamente.