From owner-p4-projects@FreeBSD.ORG Sat Aug 2 11:38:18 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 89FB81065672; Sat, 2 Aug 2008 11:38:18 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4DC76106564A for ; Sat, 2 Aug 2008 11:38:18 +0000 (UTC) (envelope-from remko@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 37CCA8FC1E for ; Sat, 2 Aug 2008 11:38:18 +0000 (UTC) (envelope-from remko@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.2/8.14.2) with ESMTP id m72BcIep096740 for ; Sat, 2 Aug 2008 11:38:18 GMT (envelope-from remko@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.2/8.14.1/Submit) id m72BcI6W096738 for perforce@freebsd.org; Sat, 2 Aug 2008 11:38:18 GMT (envelope-from remko@freebsd.org) Date: Sat, 2 Aug 2008 11:38:18 GMT Message-Id: <200808021138.m72BcI6W096738@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to remko@freebsd.org using -f From: Remko Lodder To: Perforce Change Reviews Cc: Subject: PERFORCE change 146445 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Aug 2008 11:38:18 -0000 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: + + + + Het printen van een lijst van actieve jails met het + corresponderende jail ID (JID), + IP adres, de hostnaam en het pad. + + + + 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 + root 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: + + &prompt.root; jexec 1 tcsh + + - * High-Level administratieve applicaties in de &os; + <title>High-Level administratieve applicaties in de &os; Ports Collection. - Wordt nog vertaald. + Tussen de vele software van derde partijen voor jail + beheer, is één van de meest complete en + bruikbare paketten: + sysutils/jailutils. + Dit is een set van kleine applicaties, die bijdragen aan + &man.jail.8; beheer. Kijk op de web pagina voor meer + informatie. - * Toepassing van jails + Toepassing van jails @@ -506,32 +533,491 @@ - * Dienst jails + Dienst jails - Wordt nog vertaald. + Deze sectie is gebaseerd op een idee van &a.simon; + op , + en een geupdate artikel door Ken Tom + locals@gmail.com. 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. - * Ontwerp + Ontwerp + + Éé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. + + + 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 + sysutils/ezjail, welke + een simpelere manier geeft voor het beheren van &os; jails + en welke niet zo complex is als deze opstelling. + + + 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. + + + Voorbeelden binnen deze context zijn: een + HTTP server, een DNS + server, een SMTP server + enzovoorts. + + + De doelen van de opstelling zoals beschreven in dit + hoofdstuk zijn: + + + + Het creeëren van een simpele en makkelijk te + begrijpen jail structuur. Dit impliceert dat er + niet elke keer een volledige + installworld gedraaid hoeft te worden voor elke + jail. + + + + Het makkelijk maken van het aanmaken en verwijderen + van jails. + + + + Het makkelijk maken van het updaten en upgraden van + bestaande jails. + + + + Het mogelijk maken van het draaien van een eigen + gemaakte &os; tak. + + + + Paranoia zijn over beveiliging, zoveel mogelijk + beperken, om de kans op inbraak zo klein mogelijk te + maken. + + + + Het zoveel mogelijk besparen van ruimte en inodes. + + + + Zoals reeds besproken is dit ontwerp sterk afhankelijk van + het hebben van een master-template, welke + alleen-lezen (beter bekend als nullfs) + 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 nullfs + koppelpunten. + + Het gebruikte bestandssysteem wordt beschreven door de + volgende lijst: + + + + Elke jail zal gekopeld worden onder de /home/j directory. + + + + /home/j/mroot is + de template voor elke jail en tevens de alleen-lezen + partitie voor elke jail. + + + + Een lege directory zal voor elke jail gemaakt worden + onder de /home/j + directory. + + + + Elke jail heeft een /s, wat gekoppeld zal worden + het beschrijfbare gedeelte van het systeem. + + + + Elke jail zal zijn eigen beschrijfbaar systeem hebben + welke gebaseerd is op /home/j/skel. + + + + Elke jail ruimte (het beschrijfbare gedeelte van de + jail), wordt gecreeërd in de /home/js directory. + + - Wordt nog vertaald. + + Dit gaat ervanuit dat de jails worden geplaatst in de + /home partitie. Deze + kan uiteraard aangepast worden, maar dan moeten de + voorbeelden hieronder ook worden aangepast. + - * De template creeëren + De template creeëren + + 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. + + 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 + Handboek + 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 sysutils/cpdup pakket benodigd. + We maken gebruik van de &man.portsnap.8; applicatie om de + &os; Ports Collectie te downloaden. Het handbook met het + hoofdstuk + over Portsnap, is altijd handig voor nieuwe gebruikers. + + + + 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: + + &prompt.root; mkdir /home/j /home/j/mroot +&prompt.root; cd /usr/src +&prompt.root; make installworld DESTDIR=/home/j/mroot + + + + Hierna bereiden we de &os; Ports Collectie voor op de + jails, en ook de &os; broncode directory, wat benodigd is + voor mergemaster: + + &prompt.root; cd /home/j/mroot +&prompt.root; mkdir usr/ports +&prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract +&prompt.root; cpdup /usr/src /home/j/mroot/usr/src + + + + Nu creeëren we een skelet voor het beschrijfbare + gedeelte van het systeem: + + &prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles +&prompt.root; mv etc /home/j/skel +&prompt.root; mv usr/local /home/j/skel/usr-local +&prompt.root; mv tmp /home/j/skel +&prompt.root; mv var /home/j/skel +&prompt.root; mv root /home/j/skel + + + + Gebruik mergemaster om de + ontbrekende configuratie bestanden te installeren. Haal + daarna alle directories weg die gecreeërd zijn door + mergemaster: + + &prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i +&prompt.root; cd /home/j/skel +&prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev + + + + 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 /s + directory. Als er echte directories worden gebruikt of + er worden directories op de verkeerde plek aangemaakt + resulteren in een gefaalde installatie. + + &prompt.root; cd /home/j/mroot +&prompt.root; mkdir s +&prompt.root; ln -s s/etc etc +&prompt.root; ln -s s/home home +&prompt.root; ln -s s/root root +&prompt.root; ln -s ../s/usr-local usr/local +&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 +&prompt.root; ln -s ../../s/distfiles usr/ports/distfiles +&prompt.root; ln -s s/tmp tmp +&prompt.root; ln -s s/var var + + + + Als laatste stap moet er een generieke + /home/j/skel/etc/make.conf gemaakt + worden met de volgende inhoud: + + WRKDIRPREFIX?= /s/portbuild - Wordt nog vertaald. + Door het gebruik van WRKDIRPREFIX + 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 WRKDIRPREFIX maakt het mogelijk + dat port builds gedaan worden op het beschrijfbare + gedeelte van elke jail. + + - * Jails creeëren + Jails creeëren + + Nu we een complete &os; template hebben, kunnen we de + jails opzetten en configureren in + /etc/rc.conf. Dit voorbeeld demonstreert + het creeëren van drie jails: NS, + MAIL en WWW. + + + + Zet het volgende in /etc/fstab + zodat de alleen-lezen template voor de jails en de + beschrijfbare partititie beschikbaar zijn in de + respectievelijke jails: + + /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 + + + 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 + fsck de + nullfs koppelingen controleert + of dat dump een backup maakt + van de alleen-lezen nullfs koppelingen van de jails. Daarom + zijn ze gemarkeerd met 0 0 in de laatste + twee colommen van elke fstab regel + hierboven. + + + + + Configureer de jails in + /etc/rc.conf: + + 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" + + + De reden dat de + jail_name_rootdir + variabele verwijst naar de /usr/home directory in plaats + van naar /home komt + doordat het fysieke pad van de /home directory op een + standaard &os; installatie verwijst naar /usr/home. De + jail_name_rootdir + variabele mag niet 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. + + + + + Creeër de benodigde koppelpunten voor het + alleen-lezen bestandssysteem van elke jail: + + &prompt.root; mkdir /home/j/ns /home/j/mail /home/j/www + + + + Installeer de beschrijfbare template in elke jail. + Let op het gebruik van sysutils/cpdup, wat helpt + om een goede copy te maken in elke directory: + + &prompt.root; mkdir /home/js +&prompt.root; cpdup /home/j/skel /home/js/ns +&prompt.root; cpdup /home/j/skel /home/js/mail +&prompt.root; cpdup /home/j/skel /home/js/www + + + + + 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 /etc/rc.d/jail + bestand: + + &prompt.root; mount -a +&prompt.root; /etc/rc.d/jail start + + + + 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: + + &prompt.root; jls + 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 + + 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 JID 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 JID 3: - Wordt nog vertaald. + &prompt.root; jexec 3 tcsh - * Upgraden + Upgraden + + 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 down-time, 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. + + + + De eerste stap is het upgraden van het host systeem + zelf, waarna een nieuwe alleen-lezen template gemaakt + wordt in /home/j/mroot2. + + &prompt.root; mkdir /home/j/mroot2 +&prompt.root; cd /usr/src +&prompt.root; make installworld DESTDIR=/home/j/mroot2 +&prompt.root; cd /home/j/mroot2 +&prompt.root; cpdup /usr/src usr/src +&prompt.root; mkdir s + + Het installworld creeërt + een aantal onnodige directories, welke verwijderd moeten + worden: + + &prompt.root; chflags -R 0 var +&prompt.root; rm -R etc var root usr/local tmp + + + + Maak opnieuw de beschrijfbare symbolische linken voor + het hoofd bestandssysteem: + + &prompt.root; ln -s s/etc etc +&prompt.root; ln -s s/root root +&prompt.root; ln -s s/home home +&prompt.root; ln -s ../s/usr-local usr/local +&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 +&prompt.root; ln -s s/tmp tmp +&prompt.root; ln -s s/var var + + + + + Dit is het juiste moment om de jails te stoppen: + + &prompt.root; /etc/rc.d/jail stop + + + + Ontkoppel de originele bestandssystemen: + + &prompt.root; umount /home/j/ns/s +&prompt.root; umount /home/j/ns +&prompt.root; umount /home/j/mail/s +&prompt.root; umount /home/j/mail +&prompt.root; umount /home/j/www/s +&prompt.root; umount /home/j/www + + + Het beschrijfbare gedeelte van de jail is + gekoppeld aan het alleen-lezen gedeelte + (/s) en moet + derhalve eerst ontkoppeld worden. + + + + + 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: + + &prompt.root; cd /home/j +&prompt.root; mv mroot mroot.20060601 +&prompt.root; mv mroot2 mroot +&prompt.root; mv mroot.20060601/usr/ports mroot/usr + + + + + 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: + + &prompt.root; mount -a +&prompt.root; /etc/rc.d/jail start + + - Wordt nog vertaald. + 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.