|
1.
Il chroot
Il chroot per un servizio è un modo di limitare l'ambiente del servizio
stesso (o
dell'utente) per potere accedere solo dove si ha il permesso, e di non ottenere
l'accesso (o le informazioni) che potrebbero portare all'accesso come root.
Eseguendo il servizio come utente non root (nobody,
apache, named) un attaccante può accedere solo ai file con i
permessi di quell'utente. Questo significa che un attaccante non può ottenere
l'accesso come root anche se i servizi dovessero avere un problema di
sicurezza.
Alcuni servizi come pure-ftpd e bind hanno delle proprie
caratteristiche per il chroot, e altri servizi non le hanno. Se il servizio
le supporta, si devono usare, altrimenti si devono creare. Segue come
creare un chroot con un esempio base, e lo si farà con bash (per
una facile comprensione).
Creare la directory /chroot con mkdir /chroot. Trovare le
librerie dinamiche con le quali è compilato bash (se è compilato con
-static questo passo non è necessario):
Il seguente comando crea un elenco di librerie usate da bash.
Codice 1.1: Elenco delle librerie usate |
# ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000)
libdl.so.2 => /lib/libdl.so.2 (0x40060000)
libc.so.6 => /lib/libc.so.6 (0x40063000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
|
Ora si crei l'ambiente per bash.
Codice 1.1: Creare l'ambiente per il chroot per bash |
# mkdir /chroot/bash
# mkdir /chroot/bash/bin
# mkdir /chroot/bash/lib
|
Copiare i file usati da bash (/lib) nella lib
del chroot e copiare il comando bash nella directory bin del
chroot. Questo crea lo stesso ambiente, con meno funzionalità. Dopo provare:
chroot /chroot/bash /bin/bash. Se si ottiene un prompt con
/, funziona. Altrimenti si otterrà il nome del file che manca.
Alcune librerie condivise dipendono le une dalle altre.
Si noti che dentro al chroot non funziona niente tranne echo. Non ci
sono altri comandi nell'ambiente del chroot oltre a bash, e echo è una
funzionalità build-in.
Questo è praticamente lo stesso modo con cui si può creare un chroot per un
servizio. La sola differenza è che i servizi a volte dipendono dai
dispositivi e dai file di configurazione in /etc. Si deve
copiarli (i dispositivi possono essere copiati con cp -a)
nell'ambiente del chroot, modificare l'init script per poter usare il chroot
prima di eseguirlo. Può essere difficile trovare quali dispositivi e file di
configurazione sono necessari a un servizio. Viene in aiuto il comando
strace. Avviare il servizio con /usr/bin/strace e cercare open,
read, stat e forse connect. Si troverà un aiuto su quali file devono essere
copiati. Ma nella maggior parte dei casi basta copiare il file passwd
(modificare la copia e rimuovere gli utenti che non hanno niente a che fare
con il servizio), /dev/zero, /dev/log e
/dev/random.
1.
User Mode Linux
Un altro modo per creare un ambiente più sicuro è quello di eseguire una
macchina virtuale. Questa, come dice il nome, è un processo che si esegue
all'inizio del sistema operativo reale, e fornisce un ambiente hardware e del
sistema operativo che sembra essere quello dell'unica macchina. Il beneficio
per la sicurezza è che se il server che si esegue sulla macchina virtuale
viene compromesso, sarà interessato solo il server virtuale e non
l'installazione reale.
Per ulteriori informazioni su come impostare il User Mode Linux consultare la
guida User Mode Linux.
|