1071 lines
42 KiB
XML
1071 lines
42 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
||
<!--
|
||
The FreeBSD Dutch Documentation Project
|
||
|
||
$FreeBSD$
|
||
|
||
%SOURCE% en_US.ISO8859-1/books/handbook/jails/chapter.xml
|
||
%SRCID% 40900
|
||
-->
|
||
<chapter id="jails">
|
||
<chapterinfo>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Matteo</firstname>
|
||
<surname>Riondato</surname>
|
||
<contrib>Bijgedragen door </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Remko</firstname>
|
||
<surname>Lodder</surname>
|
||
<contrib>Vertaald door </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
</chapterinfo>
|
||
|
||
<title>Jails</title>
|
||
|
||
<indexterm><primary>jails</primary></indexterm>
|
||
|
||
<sect1 id="jails-synopsis">
|
||
<title>Overzicht</title>
|
||
|
||
<para>Dit hoofdstuk levert een uitleg van wat &os; jails zijn en
|
||
hoe ze gebruikt kunnen worden. Jails, soms ook wel bekend als
|
||
een verbeterde vervanging van
|
||
<emphasis>chroot omgevingen</emphasis>, zijn een erg krachtige
|
||
tool voor systeem beheerders, maar het standaard gedrag kan ook
|
||
interessant zijn voor gevorderde gebruikers.</para>
|
||
|
||
<important>
|
||
<para>Jails zijn een krachtig gereedschap, maar zijn geen zilveren kogel
|
||
qua beveiliging. Hoewel het belangrijk is om op te merken dat het
|
||
onmogelijk is voor een gevangen proces om zelf te ontsnappen, zijn er
|
||
verschillende manieren waarop een ongeprivilegieerde gebruiker buiten
|
||
een jail kan samenwerken met een geprivilegieerde gebruiker binnen de
|
||
jail en daarmee verhoogde privileges kan krijgen in de
|
||
gastheeromgeving.</para>
|
||
|
||
<para>De meeste van deze aanvallen kunnen worden voorkomen door ervoor te
|
||
zorgen dat de jail-root niet beschikbaar is voor ongeprivilegieerde
|
||
gebruikers binnen de gastheeromgeving. Buiten dat geldt als algemene
|
||
regel dat onvertrouwde gebruikers met geprivilegieerde toegang tot een
|
||
jail geen toegang tot de gastheeromgeving moet worden gegeven.</para>
|
||
</important>
|
||
|
||
<para>Na het lezen van dit hoofdstuk weet de lezer:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Wat een jail is, en welk doel het kan dienen in een
|
||
&os; installatie.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Hoe men een jail opbouwt, start en stopt.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>De basis over jail beheer, zowel van binnen in de
|
||
jail, als van buitenaf.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Andere bronnen met nuttige informatie over jails zijn:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>De &man.jail.8; handleiding. Hier kan de volledige
|
||
referentie gevonden worden van het <command>jail</command>
|
||
commando — de administratieve tool die in &os; gebruikt
|
||
kan worden om &os; jails mee te beheren, te starten en te
|
||
stoppen.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>De mailinglijsten en de archieven hiervan. De archieven
|
||
van de &a.questions; en andere mailing lijsten die gehost
|
||
worden door de &a.mailman.lists; bevatten reeds een rijke
|
||
bron van informatie over jails. Het zou altijd aantrekkelijk
|
||
moeten zijn om informatie in de archieven te zoeken, of een
|
||
nieuwe vraag stellen aan de &a.questions.name;
|
||
mailinglijst.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect1>
|
||
|
||
<sect1 id="jails-terms">
|
||
<title>Termen en begrippen van jails</title>
|
||
|
||
<para>Om een beter begrip te geven over de onderdelen van &os; die
|
||
gerelateerd zijn aan jails, de werking ervan, en hoe ze omgaan
|
||
met de rest van &os; worden de volgende termen gebruikt in het
|
||
hoofdstuk:</para>
|
||
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term>&man.chroot.8; (commando)</term>
|
||
<listitem>
|
||
<para>Hulpmiddel dat de systeemaanroep &man.chroot.2; van &os;
|
||
gebruikt om de rootmap van een proces en alle afstammelingen te
|
||
veranderen.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term>&man.chroot.2; (omgeving)</term>
|
||
<listitem>
|
||
<para>Een omgeving van processen die draaien in een
|
||
<quote>chroot</quote>. Dit is inclusief bronnen die
|
||
gebruikt worden, zoals bijvoorbeeld het gedeelte van
|
||
het bestandssysteem dat zichtbaar is, de gebruiker en
|
||
groep ID's welke beschikbaar zijn, netwerkkaarten
|
||
en andere IPC-mechanismes, etcetera.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term>&man.jail.8; (commando)</term>
|
||
<listitem>
|
||
<para>De systeem utility die het mogelijk maakt om processen
|
||
binnenin een jail te starten.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term>host (systeem, processen, gebruiker, etc.)</term>
|
||
<listitem>
|
||
<para>Het controlerende systeem van een jail omgeving. Het
|
||
host systeem heeft toegang tot alle beschikbare hardware
|
||
bronnen en kan processen controleren zowel buiten als
|
||
binnenin een jail. <20><>n van de belangrijkste
|
||
verschillen van het host systeem met een jail zijn de
|
||
limitaties die van toepassing zijn op super-gebruiker
|
||
processen binnenin een jail, niet geforceerd worden voor
|
||
processen in het host systeem.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term>hosted (systeem, processen, gebruiker, etc.)</term>
|
||
<listitem>
|
||
<para>Een proces, gebruiker, of andere entiteit wiens toegang
|
||
tot bronnen is gelimiteerd door een &os; jail.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</sect1>
|
||
|
||
<sect1 id="jails-intro">
|
||
<title>Introductie</title>
|
||
|
||
<para>Omdat systeem beheer een complexe en enorme taak is, zijn er
|
||
vele sterke tools ontwikkeld om het leven van een systeem beheerder
|
||
makkelijker te maken. Deze tools leveren meestal verbeteringen op
|
||
de manier waarop systemen worden ge<67>nstalleerd, geconfigureerd
|
||
en onderhouden. Een deel van de taken waarvan verwacht wordt dat
|
||
die uitgevoerd wordt door de systeem beheerder is het goed
|
||
configureren van de beveiliging van een systeem, zodat het kan
|
||
blijven doorgaan met het serveren van de taak, zonder dat er
|
||
beveiligingsproblemen optreden.</para>
|
||
|
||
<para><EFBFBD><EFBFBD>n van de tools welke gebruikt kan worden om
|
||
de beveiliging van een &os; systeem te verbeteren zijn
|
||
<emphasis>jails</emphasis>. Jails zijn ge<67>ntroduceerd in
|
||
&os; 4.X door &a.phk;, maar zijn grotendeels verbeterd in
|
||
&os; 5.X om ze nog sterker en krachtiger te maken. De
|
||
ontwikkeling gaat nog steeds door met verbeteringen voor het
|
||
gebruik, performance, betrouwbaarheid en beveiliging.</para>
|
||
|
||
<sect2 id="jails-what">
|
||
<title>Wat is een jail</title>
|
||
|
||
<para>BSD achtige systemen hebben sinds 4.2-BSD ondersteuning
|
||
voor &man.chroot.2;. De &man.chroot.8; utility kan gebruikt
|
||
worden om de root directory van een set processen te wijzigen
|
||
waardoor een veilige omgeving wordt gecree<65>rd voor de
|
||
rest van het systeem. Processen die gemaakt worden in een
|
||
chroot omgeving kunnen bestanden en bronnen daarbuiten niet
|
||
benaderen. Daardoor zou een compromitering van een dienst die
|
||
in een chroot omgeving draait niet direct betekenen dat het hele
|
||
systeem gecompromiteerd is. De &man.chroot.8; utility is goed
|
||
genoeg voor simpele taken, waarbij flexibiliteit en geavanceerde
|
||
en complexe opties niet nodig zijn. Sinds het uitvinden van het
|
||
chroot concept, zijn er vele mogelijkheden gevonden om hieruit
|
||
te kunnen komen en alhoewel ze verbeterd zijn in moderne versies
|
||
van &os;, werd het duidelijk dat &man.chroot.2; niet de meest
|
||
ideale oplossing was voor het beveiligen van diensten. Er moest
|
||
een nieuw subsysteem ontwikkeld worden.</para>
|
||
|
||
<para>Dit is <20><>n van de redenen waarom jails zijn
|
||
ontwikkeld.</para>
|
||
|
||
<para>Jails zijn een verbeterd concept van de &man.chroot.2;
|
||
omgeving, in verschillende opzichten. In een traditionele
|
||
&man.chroot.2; omgeving worden processen alleen gelimiteerd
|
||
in het deel van het bestandssysteem die ze kunnen benaderen.
|
||
De rest van de systeem bronnen (zoals de set van systeem
|
||
gebruikers, de draaiende processen of het netwerk subsysteem)
|
||
worden gedeeld door het chrooted proces en de processen op het
|
||
host systeem. Jails breiden dit model uit door het niet
|
||
alleen virtualizeren van de toegang tot het bestandssysteem maar
|
||
ook tot de set van gebruikers, het netwerk subsysteem van de
|
||
&os; kernel en een aantal andere delen. Een meer complete set
|
||
van gespecificeerde controle mogelijkheden die beschikbaar zijn
|
||
voor het personaliseren van de toegang tot een jail omgeving
|
||
wordt beschreven in <xref linkend="jails-tuning"/>.</para>
|
||
|
||
<para>Een jail heeft vier kenmerken:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Een eigen directory structuur — het startpunt
|
||
van waaruit een jail benaderd wordt. Zodra men in de jail
|
||
zit, mogen processen niet buiten deze directory structuur
|
||
komen. Traditionele problemen die &man.chroot.2;'s ontwerp
|
||
getart hebben, hebben geen invloed op &os; jails.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Een hostname — de hostnaam die gebruikt wordt in
|
||
de jail. Jails worden met name gebruikt voor het hosten van
|
||
netwerk diensten, daardoor kan het de systeembeheerder heel
|
||
erg helpen als er beschrijvende hostnames worden
|
||
gekozen.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Een <acronym>IP</acronym> adres — deze wordt
|
||
gekoppeld aan de jail en kan op geen enkele manier worden
|
||
gewijzigd tijdens het leven van de jail. Het IP adres van
|
||
een jail is meestal een alias op een reeds bestaande
|
||
netwerk interface, maar dit is niet noodzakelijk.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Een commando — het padnaam van een uitvoerbaar
|
||
bestand in de jail. Deze is relatief aan de rootdirectory
|
||
van de jail omgeving en verschilt per situatie, afhankelijk
|
||
van het type van de specifieke jail omgeving.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Buiten deze kenmerken, kunnen jails hun eigen set aan
|
||
gebruikers en <username>root</username> gebruiker hebben.
|
||
Uiteraard zijn de mogelijkheden van de <username>root</username>
|
||
gebruiker beperkt tot de jail omgeving en, vanuit het host
|
||
systeem gezien, is de <username>root</username> gebruiker geen
|
||
super-gebruiker. Daarnaast is het de <username>root</username>
|
||
gebruiker in een jail omgeving niet toegestaan om kritieke
|
||
operaties uit te voeren op het systeem buiten de gedefinieerde
|
||
jail omgeving. Meer informatie over de mogelijkheden en
|
||
beperkingen van de <username>root</username> gebruiker kan
|
||
gevonden worden in
|
||
<xref linkend="jails-tuning"/>hieronder.</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="jails-build">
|
||
<title>Cree<EFBFBD>ren en controleren van jails</title>
|
||
|
||
<para>Sommige beheerders kiezen ervoor om jails op te delen in
|
||
de volgende twee types: <quote>complete</quote> jails, welke
|
||
een volledig &os; systeem emuleert en <quote>service</quote>
|
||
jails, gericht op <20><>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 &man.jail.8; handleiding
|
||
is heel duidelijk over de procedure voor het maken van een
|
||
jail:</para>
|
||
|
||
<screen>&prompt.root; <userinput>setenv D <replaceable>/here/is/the/jail</replaceable></userinput>
|
||
&prompt.root; <userinput>mkdir -p $D</userinput> <co id="jailpath"/>
|
||
&prompt.root; <userinput>cd /usr/src</userinput>
|
||
&prompt.root; <userinput>make buildworld</userinput> <co id="jailbuildworld"/>
|
||
&prompt.root; <userinput>make installworld DESTDIR=$D</userinput> <co id="jailinstallworld"/>
|
||
&prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co id="jaildistrib"/>
|
||
&prompt.root; <userinput>mount -t devfs devfs $D/dev</userinput> <co id="jaildevfs"/></screen>
|
||
|
||
<calloutlist>
|
||
<callout arearefs="jailpath">
|
||
<para>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 <filename
|
||
class="directory">/usr/jail<replaceable>jailnaam</replaceable></filename>
|
||
zijn, waar <replaceable>jailnaam</replaceable> de naam is van de
|
||
jail. Het <filename class="directory">/usr</filename>
|
||
bestandssysteem heeft meestal genoeg ruimte voor het jail
|
||
bestandssysteem, wat voor een <quote>complete</quote> jail
|
||
betekend dat het eigenlijk een replica is van elk bestand
|
||
dat standaard aanwezig is binnen het &os; basissysteem.</para>
|
||
</callout>
|
||
|
||
<callout arearefs="jailbuildworld">
|
||
<para>Als u uw userland al heeft herbouwd met
|
||
<command>make world</command> of <command>make buildworld</command>,
|
||
dan kunt u deze stap overslaan en uw bestaande userland in de nieuwe
|
||
jail installeren.</para>
|
||
</callout>
|
||
|
||
<callout arearefs="jailinstallworld">
|
||
<para>Dit commando zal de gekozen fysieke directory vullen
|
||
met de benodigde binaire bestanden, bibliotheken,
|
||
handleidingen, etc.</para>
|
||
</callout>
|
||
|
||
<callout arearefs="jaildistrib">
|
||
<para>Het <maketarget>distribution</maketarget> doel voor
|
||
<application>make</application> installeert elk benodigd
|
||
configuratie bestand. In simpelere termen, het installeert
|
||
alle installeerbare bestanden in
|
||
<filename class="directory">/usr/src/etc</filename> naar de
|
||
<filename class="directory">/etc</filename> directory van
|
||
de jail omgeving:
|
||
<filename class="directory">$D/etc</filename>.</para>
|
||
</callout>
|
||
|
||
<callout arearefs="jaildevfs">
|
||
<para>Het koppelen van het &man.devfs.8; bestandssysteem
|
||
is niet vereist in een jail. Aan de andere kant, vrijwel
|
||
elke applicatie heeft toegang nodig tot minstens
|
||
<20><>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
|
||
&man.devfs.8; wordt gedaan door middel van rulesets, welke
|
||
beschreven worden in de &man.devfs.8; en &man.devfs.conf.5;
|
||
handleidingen.</para>
|
||
</callout>
|
||
</calloutlist>
|
||
|
||
<para>Zodra een jail is ge<67>nstalleerd, kan het opgestart worden
|
||
door de &man.jail.8; applicatie. De &man.jail.8; applicatie
|
||
heeft vier benodigde argumenten welke beschreven worden in
|
||
<xref linkend="jails-what"/>. Er kunnen ook andere argumenten
|
||
gebruikt worden, om bijvoorbeeld de jail te starten met de
|
||
instellingen van een specifieke gebruiker. Het
|
||
<option><replaceable>commando</replaceable></option> argument
|
||
hangt af van het type jail, voor een
|
||
<emphasis>virtueel systeem</emphasis> is
|
||
<filename>/etc/rc</filename> een goede keuze, omdat het de
|
||
reguliere opstart procedure nabootst van een &os; systeem.
|
||
Voor een <emphasis>dienst</emphasis> jail is het geheel afhankelijk
|
||
van de dienst of applicatie die in de jail gaat draaien.</para>
|
||
|
||
<para>Jails worden over het algemeen gestart tegelijkertijd met
|
||
de rest van het systeem. Het &os; <filename>rc</filename>
|
||
mechanisme levert een makkelijke manier om dat te doen:</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Een lijst van jails die opgestart moeten worden tijdens
|
||
het opstarten van het systeem, moeten worden toegevoegd aan
|
||
het &man.rc.conf.5; bestand:</para>
|
||
|
||
<programlisting>jail_enable="YES" # Stel dit in op NO om te voorkomen dat er jails gestart worden
|
||
jail_list="<replaceable>www</replaceable>" # Door spaties gescheiden lijst van jails</programlisting>
|
||
|
||
<note>
|
||
<para>De jail namen in <varname>jail_list</varname> mogen alleen
|
||
alfanumerieke karakters bevatten.</para>
|
||
</note>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Voor elke jail die gespecificeerd is in
|
||
<varname>jail_list</varname> moet een groep van &man.rc.conf.5;
|
||
instellingen worden toegevoegd:</para>
|
||
|
||
<programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www" # de hoofd directory van de jail
|
||
jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org" # de hostnaam van de jail
|
||
jail_<replaceable>www</replaceable>_ip="192.168.0.10" # het IP adres van de jail
|
||
jail_<replaceable>www</replaceable>_devfs_enable="YES" # moet devfs wel of niet gekoppeld worden in de jail
|
||
jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # welke devfs ruleset gebruikt moet worden voor de jail</programlisting>
|
||
|
||
<para>De standaard opstart variabelen in &man.rc.conf.5;
|
||
gebruiken het <filename>/etc/rc</filename> 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
|
||
<varname>jail_<replaceable>jailname</replaceable>_exec_start</varname>
|
||
optie.</para>
|
||
|
||
<note>
|
||
<para>Voor een complete lijst van beschikbare opties, zie de
|
||
&man.rc.conf.5; handleiding.</para>
|
||
</note>
|
||
</step>
|
||
</procedure>
|
||
|
||
<para>&man.service.8; kan worden gebruikt om jails handmatig te starten en
|
||
te stoppen, mits er een overeenkomstige verzameling regels bestaat in
|
||
<filename>/etc/rc.conf</filename>.</para>
|
||
|
||
<screen>&prompt.root; <userinput>service jail start <replaceable>www</replaceable></userinput>
|
||
&prompt.root; <userinput>service jail stop <replaceable>www</replaceable></userinput></screen>
|
||
|
||
<para>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 &man.jexec.8; commando:</para>
|
||
|
||
<screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>
|
||
|
||
<para>Meer informatie hierover kan gevonden worden in de
|
||
&man.jail.8; handleiding.</para>
|
||
</sect1>
|
||
|
||
<sect1 id="jails-tuning">
|
||
<title>Optimaliseren en administratie</title>
|
||
|
||
<para>Er zijn meerdere opties beschikbaar die ingesteld kunnen
|
||
worden voor elke jail, en er zijn meerdere mogelijkheden om een
|
||
&os; host systeem te combineren met jails om een betere scheiding
|
||
tussen systeem en applicaties te verkrijgen. Deze sectie
|
||
leert:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Een aantal opties zijn beschikbaar voor het optimaliseren
|
||
van het gedrag en beveiligings beperkingen die
|
||
ge<67>mplementeerd worden in een jail.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Een aantal <quote>high-level</quote> applicaties die
|
||
gebruikt worden voor het beheren van jails, welke beschikbaar
|
||
zijn via de &os; Ports Collectie en kunnen gebruikt worden
|
||
om een complete jail-gebaseerde oplossing te
|
||
cree<65>ren.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<sect2 id="jails-tuning-utilities">
|
||
<title>Systeem applicaties voor het optimaliseren van jails onder
|
||
&os;</title>
|
||
|
||
<para>Het goed kunnen optimaliseren van een jail configuratie wordt
|
||
veelal gedaan door het instellen van &man.sysctl.8; variabelen.
|
||
Er bestaat een speciale subtak van sysctl voor het organiseren
|
||
van alle relevante opties: de <varname>security.jail.*</varname>
|
||
hierarchie binnen de &os; kernel. Hieronder staat een
|
||
lijst van de belangrijkste jail-gerelateerde sysctl variabelen,
|
||
met informatie over de standaard waarden. De benaming zou
|
||
zelf beschrijvend moeten zijn, maar voor meer informatie
|
||
kunnen de &man.jail.8; en &man.sysctl.8; handleidingen
|
||
geraadpleegd worden.</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para><varname>security.jail.set_hostname_allowed:
|
||
1</varname></para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><varname>security.jail.socket_unixiproute_only:
|
||
1</varname></para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><varname>security.jail.sysvipc_allowed:
|
||
1</varname></para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><varname>security.jail.enforce_statfs:
|
||
2</varname></para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><varname>security.jail.allow_raw_sockets:
|
||
0</varname></para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><varname>security.jail.chflags_allowed:
|
||
0</varname></para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><varname>security.jail.jailed: 0</varname></para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Deze variabelen kunnen door de systeem beheerder gebruikt
|
||
worden op het <emphasis>host systeem</emphasis> om limitaties
|
||
toe te voegen of te verwijderen, welke standaard opgedwongen
|
||
worden aan de <username>root</username> gebruiker. Let op,
|
||
een aantal beperkingen kan niet worden aangepast. De
|
||
<username>root</username> gebruiker mag geen bestandssystemen
|
||
koppelen of ontkoppelen binnenin een &man.jail.8;. De
|
||
<username>root</username> gebruiker mag ook geen &man.devfs.8;
|
||
rulesets laden of ontladen, firewall rules plaatsen of andere
|
||
taken uitvoeren die vereisen dat de in-kernel data wordt
|
||
aangepast, zoals het aanpassen van de
|
||
<varname>securelevel</varname> variabele in de kernel.</para>
|
||
|
||
<para>Het basis systeem van &os; bevat een basis set van
|
||
applicaties voor het inzien van de actieve jails, en voor
|
||
het uitvoeren van administratieve commando's in een jail.
|
||
De &man.jls.8; en &man.jexec.8; commando's zijn onderdeel van
|
||
het basis systeem en kunnen gebruikt worden voor het
|
||
uitvoeren van de volgende simpele taken:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Het printen van een lijst van actieve jails met het
|
||
corresponderende jail ID (<acronym>JID</acronym>),
|
||
<acronym>IP</acronym> adres, de hostnaam en het pad.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Het koppelen met een actieve jail vanuit het host
|
||
systeem, en voor het uitvoeren van administratieve taken
|
||
in de jail zelf. Dit is bijzonder handig wanneer de
|
||
<username>root</username> gebruiker een jail netjes
|
||
wilt afsluiten. Het &man.jexec.8; commando kan ook
|
||
gebruikt worden om een shell te starten in een jail
|
||
om daarmee administratieve taken uit te voeren;
|
||
bijvoorbeeld met:</para>
|
||
|
||
<screen>&prompt.root; <userinput>jexec <replaceable>1</replaceable> tcsh</userinput></screen>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 id="jails-tuning-admintools">
|
||
<title>Administratieve applicaties op hoog niveau in de &os;
|
||
Ports Collection.</title>
|
||
|
||
<para>Tussen de vele software van derde partijen voor jail
|
||
beheer, is <20><>n van de meest complete en
|
||
bruikbare paketten:
|
||
<filename role="package">sysutils/jailutils</filename>.
|
||
Dit is een set van kleine applicaties, die bijdragen aan
|
||
&man.jail.8; beheer. Kijk op de web pagina voor meer
|
||
informatie.</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="jails-application">
|
||
<title>Toepassing van jails</title>
|
||
|
||
<sect2 id="jails-service-jails">
|
||
<sect2info>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Daniel</firstname>
|
||
<surname>Gerzo</surname>
|
||
<contrib>Bijgedragen door </contrib>
|
||
<!-- 15. May 2007 -->
|
||
</author>
|
||
</authorgroup>
|
||
</sect2info>
|
||
|
||
<title>Dienst jails</title>
|
||
|
||
<para>Deze sectie is gebaseerd op een idee van &a.simon;
|
||
op <ulink url="http://simon.nitro.dk/service-jails.html"></ulink>,
|
||
en een geupdate artikel door Ken Tom
|
||
<email>locals@gmail.com</email>. Deze sectie illusteert hoe een
|
||
&os; systeem opgezet kan worden met een extra laag beveiliging
|
||
door gebruik te maken van &man.jail.8;. Er wordt vanuit gegaan
|
||
dat het betrokken systeem minstens RELENG_6_0 draait en dat de
|
||
informatie eerder in dit hoofdstuk goed begrepen is.</para>
|
||
|
||
<sect3 id="jails-service-jails-design">
|
||
<title>Ontwerp</title>
|
||
|
||
<para><EFBFBD><EFBFBD>n van de grootste problemen met jails is het
|
||
beheer van het upgrade proces. Dit is meestal een probleem
|
||
omdat elke jail vanaf het begin af aan moet worden opgebouwd
|
||
wanneer er geupdate wordt. Meestal is dit voor een enkele jail
|
||
geen probleem, omdat het update proces redelijk simpel is, maar
|
||
het kan een vervelende tijdrovende klus zijn als er meerdere
|
||
jails zijn.</para>
|
||
|
||
<warning>
|
||
<para>Deze opstelling vereist uitgebreide kennis en ervaring
|
||
van &os; en zijn mogelijkheden. Als onderstaande stappen
|
||
te lastig lijken te zijn, wordt aangeraden om een simpeler
|
||
systeem te bekijken zoals <filename
|
||
role="package">sysutils/qjail</filename> of
|
||
<filename role="package">sysutils/ezjail</filename>, welke
|
||
een simpele manier geeft voor het beheren van &os; jails
|
||
en niet zo complex is als deze opstelling.</para>
|
||
</warning>
|
||
|
||
<para>Het idee werd geopperd om zulke problemen zoveel als
|
||
mogelijk te voorkomen door zoveel als mogelijk te delen
|
||
tussen de verschillende jails op een zo veilig mogelijke
|
||
manier — door gebruik te maken van alleen-lezen
|
||
&man.mount.nullfs.8; koppelingen, zodat het upgraden simpeler
|
||
wordt en het inzetten van jails voor enkele diensten
|
||
interessanter wordt. Daarnaast geeft het een simpele manier
|
||
om nieuwe jails toe te voegen of te verwijderen en om deze te
|
||
upgraden.</para>
|
||
|
||
<note>
|
||
<para>Voorbeelden binnen deze context zijn: een
|
||
<acronym>HTTP</acronym> server, een <acronym>DNS</acronym>
|
||
server, een <acronym>SMTP</acronym> server
|
||
enzovoorts.</para>
|
||
</note>
|
||
|
||
<para>De doelen van de opstelling zoals beschreven in dit
|
||
hoofdstuk zijn:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Het cree<65>ren van een simpele en makkelijk te
|
||
begrijpen jail structuur. Dit impliceert dat er
|
||
<emphasis>niet</emphasis> elke keer een volledige
|
||
installworld gedraaid hoeft te worden voor elke
|
||
jail.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Het makkelijk maken van het aanmaken en verwijderen
|
||
van jails.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Het makkelijk maken van het updaten en upgraden van
|
||
bestaande jails.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Het mogelijk maken van het draaien van een eigen
|
||
gemaakte &os; tak.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Paranoia zijn over beveiliging, zoveel mogelijk
|
||
beperken, om de kans op inbraak zo klein mogelijk te
|
||
maken.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Het zoveel mogelijk besparen van ruimte en inodes.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Zoals reeds besproken is dit ontwerp sterk afhankelijk van
|
||
het hebben van een <quote>master-template</quote>, welke
|
||
alleen-lezen (beter bekend als
|
||
<application>nullfs</application>) gekoppeld is binnen elke
|
||
jail, en een beschrijfbaar apparaat per jail. Een apparaat
|
||
kan hierin zijn een aparte fysieke schijf, een partitie, of
|
||
een door vnodes ondersteunde &man.md.4; apparaat. In dit
|
||
voorbeeld wordt gebruik gemaakt van lezen-schrijven
|
||
<application>nullfs</application> koppelpunten.</para>
|
||
|
||
<para>Het gebruikte bestandssysteem wordt beschreven door de
|
||
volgende lijst:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Elke jail zal gekopeld worden onder de <filename
|
||
class="directory">/home/j</filename> directory.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><filename class="directory">/home/j/mroot</filename> is
|
||
de template voor elke jail en tevens de alleen-lezen
|
||
partitie voor elke jail.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Voor elke jail zal een lege directory structuur
|
||
gemaakt worden, welke valt onder de <filename
|
||
class="directory">/home/j</filename> directory.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Elke jail heeft een <filename
|
||
class="directory">/s</filename> directory, welke
|
||
gekoppeld zal worden aan het beschrijfbare gedeelte van
|
||
het systeem.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Elke jail zal zijn eigen beschrijfbaar systeem hebben
|
||
welke gebaseerd is op <filename
|
||
class="directory">/home/j/skel</filename>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Elke jail ruimte (het beschrijfbare gedeelte van de
|
||
jail), wordt gecree<65>rd in de <filename
|
||
class="directory">/home/js</filename> directory.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<note>
|
||
<para>De voorbeelden gaan er vanuit dat de jails geplaatst
|
||
worden in <filename
|
||
class="directory">/home</filename> partitie. Dit kan
|
||
uiteraard aangepast worden, maar dan moeten de
|
||
voorbeelden hieronder ook worden aangepast naar de plek
|
||
die gebruikt zal worden.</para>
|
||
</note>
|
||
</sect3>
|
||
|
||
<sect3 id="jails-service-jails-template">
|
||
<title>De template cree<65>ren</title>
|
||
|
||
<para>Deze sectie leert welke stappen er genomen moeten worden
|
||
om de master-template te maken. Deze zal het alleen-lezen
|
||
gedeelte vormen van de jails.</para>
|
||
|
||
<para>Het is altijd een goed idee om ervoor te zorgen dat het
|
||
&os; systeem de laatst beschikbare -RELEASE versie draait.
|
||
Zie het corresponderende hoofdstuk in het
|
||
<ulink url="&url.books.handbook;/makeworld.html">Handboek</ulink>
|
||
om te lezen hoe dit gedaan wordt. In het geval dat het de
|
||
moeite niet is om te updaten, zal een buildworld nodig zijn
|
||
voordat er verder gegaan kan worden. Daarnaast is het
|
||
<filename role="package">sysutils/cpdup</filename> pakket
|
||
benodigd. Er wordt gebruik gemaakt van de&man.portsnap.8;
|
||
applicatie om de &os; Ports Collectie te downloaden.
|
||
Het handbook met het <ulink
|
||
url="&url.books.handbook;/portsnap.html">hoofdstuk</ulink>
|
||
over Portsnap, is een aanrader voor nieuwe gebruikers.</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Als eerste moet er een directory structuur
|
||
gecree<65>rd worden voor het alleen-lezen
|
||
bestandssysteem, welke de &os; binaries zal bevatten
|
||
voor de jails. Daarna wordt het alleen-lezen
|
||
bestandssysteem ge<67>nstalleerd vanuit de
|
||
&os; broncode directory in de jail template:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mkdir /home/j /home/j/mroot</userinput>
|
||
&prompt.root; <userinput>cd /usr/src</userinput>
|
||
&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Hierna moet de &os; Ports Collectie worden voorbereid,
|
||
evenals de &os; broncode directory, wat voor
|
||
<application>mergemaster</application> vereist is:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
|
||
&prompt.root; <userinput>mkdir usr/ports</userinput>
|
||
&prompt.root; <userinput>portsnap -p /home/j/mroot/usr/ports fetch extract</userinput>
|
||
&prompt.root; <userinput>cpdup /usr/src /home/j/mroot/usr/src</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Nu moet er een <quote>skelet</quote> gecree<65>rd
|
||
worden voor het bechrijfbare gedeelte van het
|
||
systeem:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles</userinput>
|
||
&prompt.root; <userinput>mv etc /home/j/skel</userinput>
|
||
&prompt.root; <userinput>mv usr/local /home/j/skel/usr-local</userinput>
|
||
&prompt.root; <userinput>mv tmp /home/j/skel</userinput>
|
||
&prompt.root; <userinput>mv var /home/j/skel</userinput>
|
||
&prompt.root; <userinput>mv root /home/j/skel</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>De <application>mergemaster</application> applictie
|
||
moet gebruikt worden om de ontbrekende configuratie
|
||
bestanden te installeren. Erna moeten alle overtollige
|
||
directories die gecree<65>rd zijn door
|
||
<application>mergemaster</application> verwijderd
|
||
worden:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i</userinput>
|
||
&prompt.root; <userinput>cd /home/j/skel</userinput>
|
||
&prompt.root; <userinput>rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Nu moet er een symbolische link gemaakt worden tussen
|
||
het beschrijfbare bestandssysteem en het alleen-lezen
|
||
bestandssysteem, zorg ervoor dat de links gemaakt worden
|
||
in de juiste <filename class="directory">/s</filename>
|
||
directory. Als hier echte directories worden gemaakt
|
||
of de directories worden op de verkeerde plak aangemaakt
|
||
zal dit resulteren in een mislukte installatie:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
|
||
&prompt.root; <userinput>mkdir s</userinput>
|
||
&prompt.root; <userinput>ln -s s/etc etc</userinput>
|
||
&prompt.root; <userinput>ln -s s/home home</userinput>
|
||
&prompt.root; <userinput>ln -s s/root root</userinput>
|
||
&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
|
||
&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
|
||
&prompt.root; <userinput>ln -s ../../s/distfiles usr/ports/distfiles</userinput>
|
||
&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
|
||
&prompt.root; <userinput>ln -s s/var var</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Als laatste stap moet er een generieke
|
||
<filename>/home/j/skel/etc/make.conf</filename> gemaakt
|
||
worden met de volgende inhoud:</para>
|
||
|
||
<programlisting>WRKDIRPREFIX?= /s/portbuild</programlisting>
|
||
|
||
<para>Door het gebruik van <literal>WRKDIRPREFIX</literal>
|
||
op deze manier, is het mogelijk om per jail &os; ports
|
||
te compileren. Onthoud dat de ports directory onderdeel
|
||
is van het alleen-lezen bestandssysteem. Het eigen pad
|
||
voor <literal>WRKDIRPREFIX</literal> maakt het mogelijk
|
||
dat port builds gedaan worden op het beschrijfbare
|
||
gedeelte van elke jail.</para>
|
||
</step>
|
||
</procedure>
|
||
</sect3>
|
||
|
||
<sect3 id="jails-service-jails-creating">
|
||
<title>Jails cree<65>ren</title>
|
||
|
||
<para>Nu we een complete &os; template hebben, kunnen we de
|
||
jails opzetten en configureren in
|
||
<filename>/etc/rc.conf</filename>. Dit voorbeeld demonstreert
|
||
het cree<65>ren van drie jails: <quote>NS</quote>,
|
||
<quote>MAIL</quote> en <quote>WWW</quote>.</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Zet het volgende in <filename>/etc/fstab</filename>
|
||
zodat de alleen-lezen template voor de jails en de
|
||
beschrijfbare partititie beschikbaar zijn in de
|
||
respectievelijke jails:</para>
|
||
|
||
<programlisting>/home/j/mroot /home/j/ns nullfs ro 0 0
|
||
/home/j/mroot /home/j/mail nullfs ro 0 0
|
||
/home/j/mroot /home/j/www nullfs ro 0 0
|
||
/home/js/ns /home/j/ns/s nullfs rw 0 0
|
||
/home/js/mail /home/j/mail/s nullfs rw 0 0
|
||
/home/js/www /home/j/www/s nullfs rw 0 0</programlisting>
|
||
|
||
<note>
|
||
<para>Partities die gemarkeerd zijn met een 0 als
|
||
<quote>passnummer</quote> worden niet gecontroleerd
|
||
door &man.fsck.8; tijdens het opstarten, en partities
|
||
met een <quote>dumpnummer</quote> van 0 worden niet
|
||
geback-upped door &man.dump.8;. Het is niet gewenst dat
|
||
<application>fsck</application> de
|
||
<application>nullfs</application> koppelingen controleert
|
||
of dat <application>dump</application> een back-up maakt
|
||
van de alleen-lezen nullfs koppelingen van de jails.
|
||
Daarom worden ze gemarkeerd met <quote>0 0</quote>
|
||
in de laatste twee kolommen van elke
|
||
<filename>fstab</filename> regel hierboven.</para>
|
||
</note>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Configureer de jails in
|
||
<filename>/etc/rc.conf</filename>:</para>
|
||
|
||
<programlisting>jail_enable="YES"
|
||
jail_set_hostname_allow="NO"
|
||
jail_list="ns mail www"
|
||
jail_ns_hostname="ns.example.org"
|
||
jail_ns_ip="192.168.3.17"
|
||
jail_ns_rootdir="/usr/home/j/ns"
|
||
jail_ns_devfs_enable="YES"
|
||
jail_mail_hostname="mail.example.org"
|
||
jail_mail_ip="192.168.3.18"
|
||
jail_mail_rootdir="/usr/home/j/mail"
|
||
jail_mail_devfs_enable="YES"
|
||
jail_www_hostname="www.example.org"
|
||
jail_www_ip="62.123.43.14"
|
||
jail_www_rootdir="/usr/home/j/www"
|
||
jail_www_devfs_enable="YES"</programlisting>
|
||
|
||
<warning>
|
||
<para>De reden dat de
|
||
<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
|
||
variabele verwijst naar de <filename
|
||
class="directory">/usr/home</filename> directory in
|
||
plaats van naar <filename
|
||
class="directory">/home</filename> komt doordat het
|
||
fysieke pad van de <filename
|
||
class="directory">/home</filename> directory op een
|
||
standaard &os; installatie verwijst naar <filename
|
||
class="directory">/usr/home</filename>. De
|
||
<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
|
||
variabele mag <emphasis>niet</emphasis> ingesteld
|
||
worden op een symbolische link, omdat dan de jail
|
||
weigert te starten. Gebruik het &man.realpath.1;
|
||
programma om te zien welke waarde ingesteld moet worden
|
||
voor deze variabele. Zie de &os;-SA-07:11.jail
|
||
waarschuwing voor meer informatie.</para>
|
||
</warning>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Cree<EFBFBD>r de benodigde koppelpunten voor het
|
||
alleen-lezen bestandssysteem van elke jail:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mkdir /home/j/ns /home/j/mail /home/j/www</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Installeer de beschrijfbare template in elke jail.
|
||
Let op het gebruik van <filename
|
||
role="package">sysutils/cpdup</filename>, wat helpt
|
||
om een goede kopie te maken in elke directory:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mkdir /home/js</userinput>
|
||
&prompt.root; <userinput>cpdup /home/j/skel /home/js/ns</userinput>
|
||
&prompt.root; <userinput>cpdup /home/j/skel /home/js/mail</userinput>
|
||
&prompt.root; <userinput>cpdup /home/j/skel /home/js/www</userinput></screen>
|
||
|
||
</step>
|
||
|
||
<step>
|
||
<para>In deze fase zijn de jails gebouwd en voorbereid om
|
||
op te starten. Koppel eerst de benodigde bestandssystemen
|
||
voor elke jail, en start ze vervolgens door gebruik te
|
||
maken van het rc-bestand voor de jail:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mount -a</userinput>
|
||
&prompt.root; <userinput>service jail start</userinput></screen>
|
||
</step>
|
||
</procedure>
|
||
|
||
<para>De jails zouden nu gestart moeten zijn. Om te zien of ze
|
||
correct gestart zijn, wordt het &man.jls.8; programma
|
||
gebruikt. Het resultaat hiervan ziet er ongeveer als volgend
|
||
uit:</para>
|
||
|
||
<screen>&prompt.root; <userinput>jls</userinput>
|
||
JID IP Address Hostname Path
|
||
3 192.168.3.17 ns.example.org /home/j/ns
|
||
2 192.168.3.18 mail.example.org /home/j/mail
|
||
1 62.123.43.14 www.example.org /home/j/www</screen>
|
||
|
||
<para>Op dit moment, zou het mogelijk moeten zijn om op elke
|
||
jail aan te loggen, nieuwe gebruikers toe te voegen en het
|
||
configureren van daemons. De <literal>JID</literal> kolom
|
||
geeft het identificatie nummer voor elke gestarte jail.
|
||
Gebruik het volgende commando om administratieve commando's
|
||
uit te voeren in de jail met het <literal>JID</literal>
|
||
3:</para>
|
||
|
||
<screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen>
|
||
</sect3>
|
||
|
||
<sect3 id="jails-service-jails-upgrading">
|
||
<title>Upgraden</title>
|
||
|
||
<para>Naarmate de tijd verstrijkt komt de noodzaak om het
|
||
systeem te updaten naar een nieuwere versie van &os;,
|
||
danwel vanwege een veiligheids waarschuwing danwel vanwege
|
||
nieuwe mogelijkheden die ge<67>mplementeerd zijn en nuttig
|
||
zijn voor de jails. Het ontwerp van deze opzet levert een
|
||
makkelijke manier voor het upgraden van jails. Daarnaast
|
||
minimaliseert het de <quote>down-time</quote>, omdat de jails
|
||
alleen in de allerlaatste minuut uitgeschakeld worden. Het
|
||
geeft ook de mogelijkheid om terug te keren naar een oudere
|
||
versie, voor het geval er problemen ontstaan.</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>De eerste stap is het upgraden van het host systeem
|
||
zelf, waarna een nieuwe alleen-lezen template gemaakt
|
||
wordt in <filename
|
||
class="directory">/home/j/mroot2</filename>.</para>
|
||
|
||
<screen>&prompt.root; <userinput>mkdir /home/j/mroot2</userinput>
|
||
&prompt.root; <userinput>cd /usr/src</userinput>
|
||
&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot2</userinput>
|
||
&prompt.root; <userinput>cd /home/j/mroot2</userinput>
|
||
&prompt.root; <userinput>cpdup /usr/src usr/src</userinput>
|
||
&prompt.root; <userinput>mkdir s</userinput></screen>
|
||
|
||
<para>Het <maketarget>installworld</maketarget> doel
|
||
cree<65>rt een aantal onnodige directories, welke
|
||
verwijderd moeten worden:</para>
|
||
|
||
<screen>&prompt.root; <userinput>chflags -R 0 var</userinput>
|
||
&prompt.root; <userinput>rm -R etc var root usr/local tmp</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Maak opnieuw de beschrijfbare symbolische linken voor
|
||
het hoofd bestandssysteem:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ln -s s/etc etc</userinput>
|
||
&prompt.root; <userinput>ln -s s/root root</userinput>
|
||
&prompt.root; <userinput>ln -s s/home home</userinput>
|
||
&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
|
||
&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
|
||
&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
|
||
&prompt.root; <userinput>ln -s s/var var</userinput></screen>
|
||
|
||
</step>
|
||
|
||
<step>
|
||
<para>Dit is het juiste moment om de jails te stoppen:</para>
|
||
|
||
<screen>&prompt.root; <userinput>service jail stop</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Ontkoppel de originele bestandssystemen:</para>
|
||
|
||
<screen>&prompt.root; <userinput>umount /home/j/ns/s</userinput>
|
||
&prompt.root; <userinput>umount /home/j/ns</userinput>
|
||
&prompt.root; <userinput>umount /home/j/mail/s</userinput>
|
||
&prompt.root; <userinput>umount /home/j/mail</userinput>
|
||
&prompt.root; <userinput>umount /home/j/www/s</userinput>
|
||
&prompt.root; <userinput>umount /home/j/www</userinput></screen>
|
||
|
||
<note>
|
||
<para>Het beschrijfbare gedeelte van de jail is
|
||
gekoppeld aan het alleen-lezen gedeelte
|
||
(<filename class="directory">/s</filename>) en moet
|
||
derhalve eerst ontkoppeld worden.</para>
|
||
</note>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Verplaatst het oude alleen-lezen systeem en vervang
|
||
het door de nieuwe systeem. Het oude systeem dient als
|
||
reservekopie voor het geval er iets misgaat. De
|
||
naam moet het zelfde zijn als bij de installatie van het
|
||
nieuwe systeem. Verplaats de &os; Ports Collectie naar
|
||
het nieuwe bestandssysteem om ruimte en inodes te
|
||
besparen:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd /home/j</userinput>
|
||
&prompt.root; <userinput>mv mroot mroot.20060601</userinput>
|
||
&prompt.root; <userinput>mv mroot2 mroot</userinput>
|
||
&prompt.root; <userinput>mv mroot.20060601/usr/ports mroot/usr</userinput></screen>
|
||
|
||
</step>
|
||
|
||
<step>
|
||
<para>Op dit moment is het alleen-lezen gedeelte klaar,
|
||
de enig overgebleven taak is nu om alle bestandssystemen
|
||
opnieuw te koppelen en om de jails weer op te starten:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mount -a</userinput>
|
||
&prompt.root; <userinput>service jail start</userinput></screen>
|
||
</step>
|
||
</procedure>
|
||
|
||
<para>Gebruik het &man.jls.8; programma om te zien of de jails
|
||
correct zijn opgestart. Vergeet niet om in elke jail het
|
||
mergemaster programma te starten. Ook moeten de configuratie
|
||
bestanden en de rc.d scripts geupdate worden.</para>
|
||
</sect3>
|
||
</sect2>
|
||
</sect1>
|
||
</chapter>
|