Date: Sat, 2 Aug 2008 11:38:18 GMT From: Remko Lodder <remko@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 146445 for review Message-ID: <200808021138.m72BcI6W096738@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=146445 Change 146445 by remko@remko_nakur on 2008/08/02 11:38:17 Finalize the jails chapter. Needs review Submitted by: myself Affected files ... .. //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/jails/chapter.sgml#7 edit Differences ... ==== //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/jails/chapter.sgml#7 (text+ko) ==== @@ -481,18 +481,45 @@ 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>* High-Level administratieve applicaties in de &os; + <title>High-Level administratieve applicaties in de &os; Ports Collection.</title> - <para>Wordt nog vertaald.</para> + <para>Tussen de vele software van derde partijen voor jail + beheer, is éé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> + <title>Toepassing van jails</title> <sect2 id="jails-service-jails"> <sect2info> @@ -506,32 +533,491 @@ </authorgroup> </sect2info> - <title>* Dienst jails</title> + <title>Dienst jails</title> - <para>Wordt nog vertaald.</para> + <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> + <title>Ontwerp</title> + + <para>Éé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 het 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/ezjail</filename>, welke + een simpelere manier geeft voor het beheren van &os; jails + en welke niet zo complex is als deze opstelling.</para> + </warning> + + <para>Dit 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 updaten 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ë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 + role="directory">/home/j</filename> directory.</para> + </listitem> + + <listitem> + <para><filename role="directory">/home/j/mroot</filename> is + de template voor elke jail en tevens de alleen-lezen + partitie voor elke jail.</para> + </listitem> + + <listitem> + <para>Een lege directory zal voor elke jail gemaakt worden + onder de <filename role="directory">/home/j</filename> + directory.</para> + </listitem> + + <listitem> + <para>Elke jail heeft een <filename + role="directory">/s</filename>, wat gekoppeld zal worden + het beschrijfbare gedeelte van het systeem.</para> + </listitem> + + <listitem> + <para>Elke jail zal zijn eigen beschrijfbaar systeem hebben + welke gebaseerd is op <filename + role="directory">/home/j/skel</filename>.</para> + </listitem> + + <listitem> + <para>Elke jail ruimte (het beschrijfbare gedeelte van de + jail), wordt gecreeërd in de <filename + role="directory">/home/js</filename> directory.</para> + </listitem> + </itemizedlist> - <para>Wordt nog vertaald.</para> + <note> + <para>Dit gaat ervanuit dat de jails worden geplaatst in de + <filename role="directory">/home</filename> partitie. Deze + kan uiteraard aangepast worden, maar dan moeten de + voorbeelden hieronder ook worden aangepast.</para> + </note> </sect3> <sect3 id="jails-service-jails-template"> - <title>* De template creeëren</title> + <title>De template creeëren</title> + + <para>Deze sectie zal beschrijven 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 dit voor elkaar te krijgen. 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. + We maken gebruik 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 altijd handig voor nieuwe gebruikers.</para> + + <procedure> + <step> + <para>Als eerste, creeër een directory structuur voor + het alleen-lezen bestandssysteem welke de &os; binaries + zal bevatten voor onze jails. Daarna wisselen we naar + de &os; broncode directory en installeren we het + alleen-lezen bestandssysteem 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 bereiden we de &os; Ports Collectie voor op de + jails, en ook de &os; broncode directory, wat benodigd is + voor <application>mergemaster</application>:</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 creeëren we een skelet voor het beschrijfbare + 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>Gebruik <application>mergemaster</application> om de + ontbrekende configuratie bestanden te installeren. Haal + daarna alle directories weg die gecreeërd zijn door + <application>mergemaster</application>:</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 role="directory">/s</filename> + directory. Als er echte directories worden gebruikt of + er worden directories op de verkeerde plek aangemaakt + resulteren in een gefaalde 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>Wordt nog vertaald.</para> + <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ëren</title> + <title> Jails creeë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ë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 passnummer + worden niet gecontroleerd door &man.fsck.8; tijdens het + opstarten, en partities met een dumpnummer van 0 worden + niet gebackupped door &man.dump.8;. We willen niet dat + <application>fsck</application> de + <application>nullfs</application> koppelingen controleert + of dat <application>dump</application> een backup maakt + van de alleen-lezen nullfs koppelingen van de jails. Daarom + zijn ze gemarkeerd met <quote>0 0</quote> in de laatste + twee colommen 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 + role="directory">/usr/home</filename> directory in plaats + van naar <filename role="directory">/home</filename> komt + doordat het fysieke pad van de <filename + role="directory">/home</filename> directory op een + standaard &os; installatie verwijst naar <filename + role="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ë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 copy 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 <filename>/etc/rc.d/jail</filename> + bestand:</para> + + <screen>&prompt.root; <userinput>mount -a</userinput> +&prompt.root; <userinput>/etc/rc.d/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> - <para>Wordt nog vertaald.</para> + <screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen> </sect3> <sect3 id="jails-service-jails-upgrading"> - <title>* Upgraden</title> + <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 geimplementeerd 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 + role="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> creeë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>/etc/rc.d/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 role="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. Dit dient als reservekopie + voor het geval er iets misgaat. De naamgevings conventie + die gebruikt wordt, is dezelfde als wanneer er een nieuw + systeem gemaakt wordt. 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>/etc/rc.d/jail start</userinput></screen> + </step> + </procedure> - <para>Wordt nog vertaald.</para> + <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>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200808021138.m72BcI6W096738>