Come impostare Linux chroot jails
Il termine chroot jail è stato usato per la prima volta nel 1992, in un articolo di un importante ricercatore di sicurezza, Bill Cheswick, (che è interessante se ti piace questo genere di cose, puoi trovare l’articolo qui). Le jail Chroot hanno iniziato ad apparire nel 2003, con applicazioni come IRC e FTP. Nel 2005, Sun ha introdotto la sua tecnologia” Contenitori ” chiamata Zone, che a sua volta è stato un precursore del concetto di spazi dei nomi, che è una tecnologia di base utilizzata con i contenitori.
Chroot basics
Chroot consente a un amministratore di controllare l’accesso a un servizio o filesystem mentre controlla l’esposizione all’ambiente server sottostante. I due esempi comuni che potresti incontrare sono durante la sequenza di avvio e la “shell di emergenza” sui sistemi Red Hat/CentOS/Fedora e in Secure FTP (SFTP).
Il comando è simile a questo:
chroot <newroot> ]
Simile al comando sudo
, il comando chroot
modifica l’ambiente del seguente comando. In altre parole, ti cambierà nella directory newroot
e renderà anche quella directory la directory “funzionante”. Il command
viene quindi eseguito in quella posizione, che è utile per cose come il salvataggio di un sistema che non si avvia.
A differenza di sudo
, sarai “in” nella directory. Questa pratica, ancora una volta, è utile se si sta avviando da supporti esterni ma è necessario accedere a un filesystem o comando “locale” per eseguire il lavoro.
L’altro uso comune di chroot
è quello di limitare un servizio o un utente utilizzando un wrapper per nascondere il resto del filesystem, quindi limitando la visualizzazione di un utente remoto dei dati di altri utenti. Un’implementazione popolare che utilizza questo approccio SFTP.
Esempio
Prima di iniziare a lavorare con questo esempio, è necessario assicurarsi di disporre di backup. In questo caso, eseguire il backup del file /etc/ssh/sshd_config
perché verranno apportate modifiche a quello specifico:
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Per ora, limiterai solo gli utenti SFTP alle loro directory home sul server. Questo requisito significa che è necessario aggiungere utenti e metterli in un gruppo:
# useradd -g sftpusers -s /sbin/nologin -p nick nick
Si noti che in questo modo verrà assegnato nick
un account senza shell di accesso. Questa tecnica è sia pratica che una buona pratica di sicurezza: se sta solo usando SFTP, non dovrebbe avere privilegi di accesso. Parlerò di fornire una shell agli utenti remoti nel prossimo articolo.
Ora, è necessario dire al servizio ssh
cosa fare quando gli utenti SFTP accedono. Apri il file /etc/ssh/sshd_config
e aggiungi quanto segue alla fine:
Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no
È importante aggiungere queste impostazioni come un insieme separato di voci e utilizzare la sintassi Match
per indicare che questa sezione si applica solo agli utenti di questo gruppo. Se hai apportato le modifiche alle voci esistenti, si applicherebbero a tutti gli utenti SSH, che potrebbero interrompere l’accesso remoto.
Le linee di configurazione si suddividono come segue:
-
ForceCommand
rendessh
scegliere la sua funzione integrata per fornire il servizio SFTP (che è possibile controllare in modo indipendente). -
ChrootDirectory
indica asshd
dove limitare l’utente. -
Subsystem sftp internal-sftp
indica asshd
di caricare il servizio internosftp
e renderlo disponibile.
Potrebbe essere necessario assicurarsi che questo Subsystem
non sia già definito commentando questa riga in precedenza nel file di configurazione:
# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server
Una volta apportate le modifiche e controllato l’ortografia, andare avanti e salvare le modifiche. Quindi, riavviare sshd
:
# systemctl restart sshd
Testare il nuovo utente:
$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit
Oops, aspetta solo un minuto: sembra che tu possa vedere anche tutte le directory degli altri utenti. Tuttavia, non è possibile accedere a tali directory:
sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied
È possibile indirizzare l’utente chroot alla propria directory home modificando la riga ChrootDirectory
nel file sshd_config
in questo modo:
ChrootDirectory /
Questo rapido cambiamento fa sembrare a Nick come se fosse nella sua home directory, e non sarà in grado di vedere i file di nessun altro utente:
sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>
Dov’e ‘ andata? Guarda qui:
# ls /home/nicktest.txt
Si noti che un chroot jail
non è considerato di per sé una restrizione di sicurezza adeguata. Mentre impedisce a un utente di cambiare da una directory limitata, ci sono modi per aggirare questo (l’idea generale è indicata nella pagina man chroot(2)
, che dovresti dare un’occhiata se stai pensando di utilizzare questo trucco in un contesto critico di produzione o aziendale.)
Avvolgimento (per ora)
Quindi, puoi vedere che chroot
può essere uno strumento piuttosto utile. Nella parte 2, esaminerò più l’assegnazione di directory specifiche agli utenti e la fornitura di un ambiente di shell a un utente remoto senza esporre il resto del server.
Nuovo ai contenitori? Scarica il Primer dei contenitori e impara le basi dei contenitori Linux.