16.4. Creeëren en controleren van jails

Sommige beheerders kiezen ervoor om jails op te delen in de volgende twee types: “complete” jails, welke een volledig FreeBSD systeem emuleert en “service” jails, gericht op één applicatie of dienst, mogelijkerwijs draaiende met privileges. Dit is alleen een conceptuele splitsing, de manier van het opbouwen van een jail wordt hierdoor niet veranderd. De jail(8) handleiding is heel duidelijk over de procedure voor het maken van een jail:

# setenv D /here/is/the/jail
# mkdir -p $D (1)
# cd /usr/src
# make buildworld (2)
# make installworld DESTDIR=$D (3)
# make distribution DESTDIR=$D (4)
# mount -t devfs devfs $D/dev (5)
(1)
Het selecteren van een locatie voor een jail is het beste beginpunt. Hier zal de jail fysiek te vinden zijn binnen het bestandssysteem van het host systeem. Een goede keuze kan /usr/jailjailnaam zijn, waar jailnaam de naam is van de jail. Het /usr bestandssysteem heeft meestal genoeg ruimte voor het jail bestandssysteem, wat voor een “complete” jail betekend dat het eigenlijk een replica is van elk bestand dat standaard aanwezig is binnen het FreeBSD basissysteem.
(2)
Als u uw userland al heeft herbouwd met make world of make buildworld, dan kunt u deze stap overslaan en uw bestaande userland in de nieuwe jail installeren.
(3)
Dit commando zal de gekozen fysieke directory vullen met de benodigde binaire bestanden, bibliotheken, handleidingen, etc.
(4)
Het distribution doel voor make installeert elk benodigd configuratie bestand. In simpelere termen, het installeert alle installeerbare bestanden in /usr/src/etc naar de /etc directory van de jail omgeving: $D/etc.
(5)
Het koppelen van het devfs(8) bestandssysteem is niet vereist in een jail. Aan de andere kant, vrijwel elke applicatie heeft toegang nodig tot minstens één apparaat, afhankelijk van het doel van het programma. Het is erg belangrijk om toegang tot apparaten te controleren binnenin een jail, omdat incorrecte instellingen een aanvaller de mogelijkheid kunnen geven om vervelende dingen in de jail te doen. De controle over devfs(8) wordt gedaan door middel van rulesets, welke beschreven worden in de devfs(8) en devfs.conf(5) handleidingen.

Zodra een jail is geïnstalleerd, kan het opgestart worden door de jail(8) applicatie. De jail(8) applicatie heeft vier benodigde argumenten welke beschreven worden in Paragraaf 16.3.1. Er kunnen ook andere argumenten gebruikt worden, om bijvoorbeeld de jail te starten met de instellingen van een specifieke gebruiker. Het commando argument hangt af van het type jail, voor een virtueel systeem is /etc/rc een goede keuze, omdat het de reguliere opstart procedure nabootst van een FreeBSD systeem. Voor een dienst jail is het geheel afhankelijk van de dienst of applicatie die in de jail gaat draaien.

Jails worden over het algemeen gestart tegelijkertijd met de rest van het systeem. Het FreeBSD rc mechanisme levert een makkelijke manier om dat te doen:

  1. Een lijst van jails die opgestart moeten worden tijdens het opstarten van het systeem, moeten worden toegevoegd aan het rc.conf(5) bestand:

    jail_enable="YES"   # Stel dit in op NO om te voorkomen dat er jails gestart worden
    jail_list="www"     # Door spaties gescheiden lijst van jails
    

    Opmerking: De jail namen in jail_list mogen alleen alfanumerieke karakters bevatten.

  2. Voor elke jail die gespecificeerd is in jail_list moet een groep van rc.conf(5) instellingen worden toegevoegd:

    jail_www_rootdir="/usr/jail/www"     # de hoofd directory van de jail
    jail_www_hostname="www.example.org"  # de hostnaam van de jail
    jail_www_ip="192.168.0.10"           # het IP adres van de jail
    jail_www_devfs_enable="YES"          # moet devfs wel of niet gekoppeld worden in de jail
    jail_www_devfs_ruleset="www_ruleset" # welke devfs ruleset gebruikt moet worden voor de jail
    

    De standaard opstart variabelen in rc.conf(5) gebruiken het /etc/rc bestand om de jail op te starten, wat er vanuit gaat dat de jail een compleet virtueel systeem is. Voor service jails moet het standaard opstart commando worden gewijzigd door het aanpassen van de jail_jailname_exec_start optie.

    Opmerking: Voor een complete lijst van beschikbare opties, zie de rc.conf(5) handleiding.

service(8) kan worden gebruikt om jails handmatig te starten en te stoppen, mits er een overeenkomstige verzameling regels bestaat in /etc/rc.conf.

# service jail start www
# service jail stop www

Er is op dit moment geen nette methode om een jail te stoppen. Dit komt omdat de benodigde applicaties die een nette afsluiting verzorgen, niet beschikbaar zijn in een jail. De beste manier om een jail af te sluiten is door het volgende commando van binnenin de jail uit te voeren of door middel van het jexec(8) commando:

# sh /etc/rc.shutdown

Meer informatie hierover kan gevonden worden in de jail(8) handleiding.