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 files
  • cd per navigare tra le directory
  • put permette di fare upload
  • bye o quit per uscire da sftp

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.