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 utentisftpIl 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 utentisftpaggiunge l’utente al gruppo specificato - l’opzione
-sserve ad impostare una shell,-s /bin/falsela disabilita - l’opzione
-mcrea la directory home dell’utente nel caso in cui non esista - infine l’opzione
-d /home/utente1indica 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:
lsper mostrare i filescdper navigare tra le directoryputpermette di fare uploadbyeoquitper 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