Introduzione

Se sei un amministratore di sistema che gestisce i server Linux, è probabile che potresti dover concedere l'accesso SFTP ad alcuni utenti per caricare file nelle loro directory home. Per impostazione predefinita, gli utenti che possono accedere al sistema tramite SSH, SFTP e SCP possono navigare nell'intero file system, comprese le directory di altri utenti. Questo potrebbe non essere un problema se questi utenti sono affidabili, ma se non vuoi che gli utenti che hanno effettuato il login navighino nel sistema dovrai limitare l'accesso degli utenti alla loro home directory. Ciò aggiunge un ulteriore livello di sicurezza, in particolare sui sistemi con più utenti.

In questo tutorial, spiegheremo come configurare un ambiente SFTP Chroot Jail che limiterà gli utenti alle loro home directory. Gli utenti avranno solo l'accesso SFTP, l'accesso SSH sarà disabilitato. Queste istruzioni dovrebbero funzionare per qualsiasi moderna distribuzione Linux incluso Ubuntu, CentOS, Debian e Fedora.

Se desideri configurare SFTP Chroot Jail su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Creazione di un gruppo SFTP

Invece di configurare il server OpenSSH per ciascun utente individualmente creeremo un nuovo gruppo e aggiungeremo tutti i nostri utenti chroot a questo gruppo.

Eseguire il comando groupadd seguente per creare il gruppo utenti sftponly:

sudo groupadd sftponly

Puoi nominare il gruppo come desideri.

Aggiungere di utenti al gruppo SFTP

Il passaggio successivo è aggiungere gli utenti che si desidera limitare al gruppo sftponly.

Se si tratta di una nuova configurazione e l'utente non esiste, è possibile creare un nuovo account utente digitando:

sudo useradd -g sftponly -s /bin/false -m -d /home/username username
  • L'opzione -g sftponly aggiungerà l'utente al gruppo sftponly.
  • L'opzione -s /bin/false imposta la shell di accesso dell'utente. Impostando la shell di accesso /bin/false, all'utente non sarà possibile accedere al server tramite SSH.
  • Le opzioni -m -d /home/username indicano a useradd di creare la home directory dell'utente.

Imposta una password complessa per l'utente appena creato:

sudo passwd username

Altrimenti se l'utente che desideri limitare esiste già, aggiungi l'utente al gruppo sftponly e cambia la shell dell'utente:

sudo usermod -G sftponly -s /bin/false username2

La home directory dell'utente deve essere di proprietà di root e disporre delle autorizzazioni 755:

sudo chown root: /home/username
sudo chmod 755 /home/username

Poiché le home directory degli utenti sono di proprietà dell'utente root, questi utenti non saranno in grado di creare file e directory nelle loro home directory. Se non ci sono directory nella home dell'utente, dovrai creare nuove directory a cui l'utente avrà pieno accesso. Ad esempio, è possibile creare le seguenti directory:

sudo mkdir /home/username/{public_html,uploads}
sudo chmod 755 /home/username/{public_html,uploads}
sudo chown username:sftponly /home/username/{public_html,uploads}

Se un'applicazione Web utilizza la directory public_html dell'utente come root del documento, queste modifiche possono causare problemi di autorizzazione. Ad esempio, se stai eseguendo WordPress dovrai creare un pool PHP che verrà eseguito come utente proprietario dei file e aggiungere il webserver al gruppo sftponly.

Configurazione di SSH

SFTP è un sottosistema di SSH e supporta tutti i meccanismi di autenticazione SSH.

Apri il file di configurazione SSH /etc/ssh/sshd_config con il tuo editor di testo:

sudo nano /etc/ssh/sshd_config

Cerca la riga che inizia con Subsystem sftp, di solito alla fine del file. Se la riga inizia con un hash #, rimuovi l'hash # e modificalo in modo che sia simile al seguente:

Subsystem sftp internal-sftp

Alla fine del file aggiungi, il seguente blocco di impostazioni:

Match Group sftponly
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

La direttiva ChrootDirectory specifica il percorso della directory chroot. %h indica la home directory dell'utente. Questa directory deve essere di proprietà dell'utente root e non scrivibile da nessun altro utente o gruppo.

Prestare particolare attenzione quando si modifica il file di configurazione SSH. Una configurazione errata potrebbe impedire l'avvio del servizio SSH.

Una volta terminato, salva il file e riavvia il servizio SSH per applicare le modifiche:

sudo systemctl restart ssh

In CentOS e Fedora il servizio ssh è chiamato sshd:

sudo systemctl restart sshd

Test della configurazione

Ora che hai configurato il chroot SFTP, puoi provare ad accedere al computer remoto tramite SFTP usando le credenziali dell'utente chroot. Nella maggior parte dei casi, utilizzerai un client SFTP desktop come FileZilla ma in questo esempio useremo il comando sftp.

Apri una connessione SFTP usando il comando sftp seguito dal nome utente del server remoto e dall'indirizzo IP o dal nome dominio del server:

sftp [email protected]

Ti verrà richiesto di inserire la password dell'utente. Una volta connesso, il server remoto visualizzerà un messaggio di conferma e il prompt sftp>:

[email protected]'s password:
sftp>

Esegui il comando pwd, come mostrato di seguito, e se tutto funziona come previsto il comando dovrebbe tornare /.

sftp> pwd
Remote working directory: /

Puoi anche elencare i file e le directory remoti usando il comando ls e dovresti vedere le directory che abbiamo creato in precedenza:

sftp> ls
public_html  uploads  

Conclusione

In questo tutorial, hai imparato come configurare un ambiente SFTP Chroot Jail sul tuo server Linux e limitare l'accesso degli utenti alla loro home directory.

Per impostazione predefinita, SSH è in ascolto sulla porta 22. La modifica della porta SSH predefinita aggiunge un ulteriore livello di sicurezza al server riducendo il rischio di attacchi automatici. È inoltre possibile impostare un'autenticazione basata su chiave SSH e connettersi al server senza immettere una password.