Premessa
Mi sono chiesto come configurare SFTP in chroot jail su linux quando mi è stato affidato l’incarico di mettere a punto un server linux per un cliente con elevate esigenze di sicurezza e al contempo la necessità di fare accedere degli utenti alla macchina.
Di base, un utente SSH ha anche accesso SFTP e SCP ma, di contro, può navigare il filesystem, accedere alle cartelle di altri utenti e leggere alcune configurazioni. Usare una jail mi è sembrato il modo migliore di tenere gli utenti all’interno della loro directory e poterli fare accedere solo alle risorse a loro condivise per mantenere un buon livello di sicurezza generale e una certa riservatezza dei dati degli stessi utenti.
In questa guida ho raccolto i miei appunti su come configurare SFTP in chroot jail su linux (testato su Debian e Ubuntu, ma non escludo che possa funzionare anche su altre distribuzioni come CentOS e Fedora).
Do per scontato che si sappia accedere via SSH al server e diventare utente root. Iniziamo.
Creazione del gruppo SFTP
Si potrebbe configurare OpenSSH perché riconosca ciascun utente, ma quando gli utenti sono tanti e hanno gli stessi parametri, possiamo semplificare la procedura creando un gruppo e aggiungendo gli utenti chroot a questo gruppo. Lanciamo questo comando:
root@server# groupadd utentisftp
Il gruppo utentisftp
è stato creato. Il nome del gruppo può ovviamente essere diverso 😉
Aggiungere utenti al gruppo SFTP
Aggiungiamo adesso gli utenti che dovranno essere limitati nelle attività e relegati alle proprie home directory. Abbiamo due casi (e in entrambi ricordiamoci sempre di impostare delle sicure).
Nuovo utente
Usiamo il comando:
root@server# useradd -g utentisftp -s /bin/false -m -d /home/utente1 utente1
Abbiamo così creato un nuovo utente utente1, lo abbiamo aggiunto al nostro gruppo utentisftp, gli abbiamo disabilitato la shell e creato la sua directory. Vediamo in dettaglio i comandi:
- l’opzione
-g utentisftp
aggiunge l’utente al gruppo specificato - l’opzione
-s
serve ad impostare una shell,-s /bin/false
la disabilita - l’opzione
-m
crea la directory home dell’utente nel caso in cui non esista - infine l’opzione
-d /home/utente1
indica il percorso della cartella utente
Utente esistente
Se l’utente esiste già, potremo aggiungerlo al gruppo utentisftp
con il comando:
root@server# usermod -G utentisftp -s /bin/false utente2
Questo comando modifica alcuni parametri dell’utente. In questo caso, oltre ad assegnare l’utente al gruppo, disabilita la shell con l’opzione -s
vista in precedenza.
Cartelle e Permessi
Gli utenti non avranno il permesso di creare file e cartelle nella loro home directory: le home directory sono di proprietà dell’utente root. Quindi creiamo le cartelle predefinite per ciascun utente con il comando:
root@server# mkdir /home/utente1/{public_html,files,backup}
cambiamo i permessi:
root@server# chmod 755 /home/utente1/{public_html,files,backup}
e assegnamo le cartelle all’utente:
root@server# chown utente1:utenfisftp /home/utente1/{public_html,files,backup}
Ripetiamo la procedura per ciascun utente.
Configurazione di SSH
Probabilmente sapete che SFTP è un sottosistema di SSH, quindi eredita tutti i meccanismi di autenticazione di SSH stesso. Per far sì che il sistema funzioni a dovere bisogna modificare il file di configurazione:
root@server# nano /etc/ssh/sshd_config
In questo esempio sto utilizzando l’editor nano
quindi alcune informazioni sono legate allo stesso. Se usate un editor differente confido che sappiate come usarlo. 🙂
Con la combinazione di tasti Ctrl + W
abilitiamo la ricerca e ci posizioniamo alla parola chiave Subsystem sftp
. Nel caso sia commentata (preceduta dal simbolo #
, bisogna rimuovere il simbolo di commento e modificare l’istruzione come segue:
Subsystem sftp internal-sftp
Alla fine del file aggiungi le seguenti impostazioni:
Match Group utentisftp ChrootDirectory %h ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no
Particolare attenzione alla riga ChrootDirectory %h
, dove istruiamo il sistema ad usare la cartella dell’utente come home directory(%h
).
Prestare particolare attenzione quando si modifica il file di configurazione SSH. Una configurazione errata potrebbe impedire l’avvio del servizio SSH.
Usiamo Ctrl+X
per salvare e seguiamo le istruzioni a video.
A questo punto è necessario riavviare SSH:
root@server# systemctl restart ssh
In alcune distrubuzioni, il servizio SSH potrebbe avere un nome differente.
Verifica della configurazione
SFTP
è configurato e pronto per essere verificato. Da terminale digitare:
user@localhost$ sftp utente1@server
Ci verrà chiesto di digitare la password, una volta premuto invio possiamo digitare:
sftp> pwd Remote working directory: /
Come possiamo ben vedere, la risposta al comando pwd
è /
: l’utente è nella sua root directory!
Senza il chroot jail, la risposta sarebbe stata /home/utente-non-sftp
.
In SFTP
possiamo navigare il filesystem con alcuni comandi tipici di linux:
ls
per mostrare i filescd
per navigare tra le directoryput
permette di fare uploadbye
oquit
per uscire dasftp
Per una lista completa dei comandi, basta digitare help
.
Alcune considerazioni
Questo tutoria spiega brevemente come configurare SFTP in chroot jail su linux per limitare l’accesso degli utenti alle loro rispettive cartelle.
Come già detto in precedenza, questa è una buona pratica di sicurezza ma non basta. Per impostazione predefinita, SSH usa la porta 22: la modifica della porta predefinita permette di aggiungere un ulteriore livello di sicurezza.
Commenti recenti