15.4 Creare e Controllare la Jail

Alcuni amministratori dividono le jail nei seguenti due tipi: jail “complete”, che sono simili ad un sistema FreeBSD reale, e jail “di servizio”, dedicate ad un'unica applicazione o servizio, possibilmente in esecuzione con privilegi. Questa è solo una divisione concettuale ed il processo di creazione della jail non viene modificato da ciò. La pagina man jail(8) è abbastanza chiara a riguardo della procedura di creazione di una jail:

# setenv D /qui/c'e'/la/jail
# mkdir -p $D (1)
# cd /usr/src
# make world DESTDIR=$D (2)
# cd etc/ [1]
# make distribution DESTDIR=$D (3)
# mount_devfs devfs $D/dev (4)
(1)
Selezionare una directory per la jail è il miglior punto in cui iniziare. Questo sarà il punto in cui la jail risiederà fisicamente nel file system del sistema host. Una buona scelta può essere /usr/jail/nomejail, dove nomejail è il nome host che identifica la jail. Il file system /usr/ in genere ha abbastanza spazio vuoto per il file system delle jail, che per una jail “completa” è, in pratica, una replica di ogni file presente in una installazione base di FreeBSD
(2)
Questo comando popolerà la sotto-directory scelta come locazione fisica della jail con i binari necessari, le librerie, le pagine man e cosí via. Tutto è fatto nello stile tipico di FreeBSD — prima tutto viene creato/compilato, poi installato nel percorso di destinazione.
(3)
Il target distribution per make installa ogni file di configuazione richiesto. In parole povere, installa ogni file di /usr/src/etc/ nella directory /etc dell'ambiente jail: $D/etc/.
(4)
Non è richiesto di montare il file system devfs(8) all'interno della jail. D'altro lato, ogni applicazione o quasi ha bisogno di accedere ad almeno un dispositivo, a seconda dello scopo dell'applicazione stessa. È molto importante controllare l'accesso ai dispositivi dall'interno della jail, dato che con dei settaggi impropri un attaccante potrebbe compiere azioni dannose nella jail. Il controllo su devfs(8) è gestito attraverso le regole che sono descritte nelle pagine man di devfs(8) e devfs.conf(5).

Una volta che una jail è installata, può essere avviata usando l'utility jail(8). L'utility jail(8) prende quattro argomenti obbligatori che sono descritti nella Sezione 15.3.1. Possono essere specificati altri argomenti, ad esempio, per eseguire il programma nella jail con le credenziali di un utente specifico. L'argomento comando dipende dal tipo di jail; per un sistema virtuale, /etc/rc è una buona scelta, dato che replicherà la sequenza di avvio di un sistema FreeBSD reale. Per una jail di servizio, dipenderà dal servizio o dalla applicazione che sarà eseguita all'interno della jail.

Le jail spesso sono avviate al momento di boot e il meccanismo rc di FreeBSD fornisce un modo semplice per farlo.

  1. Una lista delle jail che sono abilitate al boot dovrebbe essere aggiunta al file rc.conf(5):

    jail_enable="YES"   # NO per disabilitare l'avvio delle jail
    jail_list="www"  # Lista dei nomi delle jail separati da spazi
    
  2. Per ogni jail elencata in jail_list, dovrebbe essere aggiunto un gruppo di impostazioni di rc.conf(5), che descrive la jail:

    jail_www_rootdir="/usr/jail/www"     # directory root della jail
    jail_www_hostname="www.example.org"  # nome-host della jail
    jail_www_ip="192.168.0.10"           # indirizzo IP della jail
    jail_www_devfs_enable="YES"          # dispositivi di mount devfs nella jail
    jail_www_devfs_ruleset="www_ruleset" # regole devfs da applicare alla jail
    

    L'avvio di default delle jail configurate in rc.conf(5) eseguirà lo script della jail in /etc/rc, che assume che la jail sia un completo sistema virtuale. Per jail di servizio, il comando di default di avvio della jail dovrebbe essere cambiato, impostando l'opzione jail_nomejail_exec_start in modo appropriato.

    Nota: Per una lista completa delle opzioni disponibili, per favore consulta la pagina man rc.conf(5).

Lo script /etc/rc.d/jail può essere usato per avviare o fermare una jail a mano, se esiste una entry in rc.conf:

# /etc/rc.d/jail start www
# /etc/rc.d/jail stop www

Un modo pulito per spegnere una jail(8) non è disponibile al momento. Questo perchè i comandi usati normalmente per fare uno shutdown pulito non possono essere usati all'interno della jail. Il modo migliore per spegnere una jail è eseguire il seguente comando all'interno della jail stessa o usando l'utility jexec(8) da fuori della jail:

# sh /etc/rc.shutdown

Maggiori informazioni al riguardo possono essere trovate nella pagina man jail(8).

Note

[1]

Questo step non è richiesto su FreeBSD 6.0 e successivi.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.