Chroot da solo non offre alcun tipo di sicurezza. In altre parole, tratta un chroot come se i processi chroot potessero accedere a tutto sul sistema, perché spesso lo fanno. Vedi anche chroot "jail" - che cos'è e come si usa? - nota in particolare l'osservazione di Michael Mrozek
"Chroot Jail" è un termine improprio che dovrebbe davvero estinguersi
Chroot è un metodo di contenimento solo per i file ed è più una comodità che una funzionalità di sicurezza. Se si dispone di un processo che consente agli utenti non attendibili di specificare i nomi dei file (un server FTP, ad esempio), chroot è un modo per assicurarsi che gli utenti non possano fare riferimento direttamente ai file all'esterno del chroot. Dovresti assicurarti che il chroot non contenga alcun file che possa sfuggire; in particolare:
- Inserisci solo il minimo indispensabile dei file del dispositivo (
/dev/*
) nella chroot. Non /dev
eseguire il bind mount , ad esempio non si desidera bloccare i dispositivi lì. Solo mettere dispositivi tty ei dispositivi di dati diverse ( /dev/null
, /dev/zero
, /dev/urandom
, ...).
- Non montare
/proc
. Questo è un grande vincolo, ma /proc
espone molte informazioni in base alla progettazione. Ad esempio, se si dispone di un processo 1234 in esecuzione come un determinato utente all'esterno del chroot, qualsiasi processo (chroot o meno) può accedere alla directory principale come /proc/1234/root
.
Un processo chroot può ancora inviare segnali a processi non chroot, aprire socket di rete, accedere alla memoria condivisa (su Linux, al giorno d'oggi, solo se /dev/shm
disponibile), ecc. Se si utilizza chroot per il contenimento, non eseguire alcun processo all'esterno il chroot come utente che sta eseguendo processi all'interno del chroot.
Chroot rimane un buon modo per eseguire una versione diversa dello stesso sistema operativo (con lo stesso kernel) ¹. Quando ci sono problemi di sicurezza, al giorno d'oggi ci sono strumenti migliori, in particolare jail FreeBSD e cgroup Linux e LXC . Rispetto ai vecchi tempi, anche la virtualizzazione completa (VirtualBox, KVM, ...) è diventata un'opzione più praticabile anche sull'hardware delle materie prime.
¹ A proposito, nella mia risposta ho spiegato come non avviare i servizi all'interno di un chroot Debian. Questo non è un problema di sicurezza e si presume che i servizi siano cooperativi e scritti correttamente.
policy-rc.d
(come spieghi nell'altra tua risposta) tutto ciò che deve essere fatto per evitare che i processi (che non avvii esplicitamente) vengano eseguiti nel chroot?