Come limitare l’accesso dell’utente SSH a determinate directory utilizzando una prigione chroot

Ci sono diverse ragioni per limitare una sessione utente SSH a una directory specifica, specialmente su server web, ma quella più ovvia è la sicurezza di sistema. Per bloccare gli utenti SSH in una determinata directory, possiamo utilizzare il meccanismo chroot.

La modifica del root (chroot) nei sistemi simili a Unix come Linux è un modo per separare operazioni utente specifiche dal resto del sistema Linux; cambia la directory root apparente per il processo utente attualmente in esecuzione e il suo processo figlio (genitore) con una nuova directory root chiamata prigione chroot.

In questo tutorial, ti mostreremo come limitare l’accesso utente SSH a una determinata directory in Linux. Nota che eseguiremo tutti i comandi come root, utilizza il comando sudo se sei loggato nel server come utente normale.

1. Iniziare creando la prigione di chroot utilizzando il comando mkdir di seguito:

1. Inizia creando la prigione chroot utilizzando il comando mkdir riportato di seguito:

# mkdir -p /home/test

2. Successivamente, identifica i file richiesti, secondo la pagina man di sshd_config, l’opzione ChrootDirectory specifica il percorso del directory in cui chrootare dopo l’autenticazione. La directory deve contenere i file e le directory necessarie per supportare una sessione utente.

Per una sessione interattiva, ciò richiede almeno un shell, comunemente sh, e i nodi /dev di base come null, zero, stdin, stdout, stderr e dispositivi tty:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
Listing Required Files

3. Ora, crea i file /dev come segue utilizzando il comando mknod. Nel comando seguente, la bandiera -m viene utilizzata per specificare i bit di permesso del file, c significa file di caratteri e i due numeri sono i numeri principali e secondari a cui puntano i file.

# mkdir -p /home/test/dev/		
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
Create /dev and Required Files

4. Successivamente, imposta i permessi appropriati sulla prigione chroot. Si noti che la prigione chroot e i suoi sottodirectory e sottofile devono essere di proprietà dell’utente root, e non scrittibili da nessun utente normale o gruppo:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

Passo 2: Configura Shell Interattiva per la Prigione Chroot SSH

5. Innanzitutto, crea la directory bin e quindi copia i file /bin/bash nella directory bin utilizzando il comando cp come segue:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. Ora, identifica il bash richiesto per le libs condivise, come di seguito, e copiale nella directory lib:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Copy Shared Library Files

Passo 3: Creare e configurare l’utente SSH

7. Ora, crea l’utente SSH con il comando useradd e imposta una password sicura per l’utente:

# useradd tecmint
# passwd tecmint

8. Crea la directory delle configurazioni generali della prigione chroot, /home/test/etc e copia i file dell’account aggiornati (/etc/passwd e /etc/group) in questa directory come segue:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

Passo 4: Configura SSH per utilizzare la prigione chroot

9. Ora, apri il file sshd_config.

# vi /etc/ssh/sshd_config

e aggiungi/modifica le righe sotto nel file.

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

Salva il file e esci, e riavvia i servizi SSHD:

# systemctl restart sshd
OR
# service sshd restart

Passo 5: Testare SSH con la prigione chroot

10. A questo punto, verifica se la configurazione della prigione chroot funziona come previsto:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

Dallo screenshot sopra, possiamo vedere che l’utente SSH è bloccato nella prigione chroot e non può eseguire alcun comando esterno (ls, date, uname, ecc).

L’utente può solo eseguire bash e i suoi comandi interni come (pwd, history, echo, ecc) come mostrato di seguito:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

Passo 6. Creare la directory home dell’utente SSH e aggiungere comandi Linux

11. Dallo step precedente, possiamo notare che l’utente è bloccato nella directory root, possiamo creare una directory home per l’utente SSH in questo modo (fai questo per tutti gli utenti futuri):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. Successivamente, installa alcuni comandi utente come ls, date e mkdir nella directory bin:

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. Successivamente, verifica le librerie condivise per i comandi sopra e spostale nella directory delle librerie della prigione chroot:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Copy Shared Libraries

Passo 7. Test SFTP con Chroot Jail

14. Fai un test finale utilizzando sftp; controlla se i comandi che hai appena installato funzionano.

Aggiungi la riga seguente nel file /etc/ssh/sshd_config:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

Salva il file ed esci. Quindi riavvia i servizi SSHD:

# systemctl restart sshd
OR
# service sshd restart

15. Ora, testa utilizzando SSH e otterrai il seguente errore:

# ssh [email protected]
Test SSH Chroot Jail

Prova a utilizzare SFTP come segue:

# sftp [email protected]
Testing sFTP SSH User

Questo è tutto per ora! In questo articolo, ti abbiamo mostrato come limitare un utente SSH in una directory specifica (prigione chroot) in Linux. Usa la sezione dei commenti qui sotto per offrirci i tuoi pensieri su questa guida.

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/