Gentoo Logo

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.

Aggiornato il 15 dicembre 2005

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.