aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/jails/chapter.xml
blob: e3790afe6d583ad3a4b575703c25d4fb53706b38 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
    The FreeBSD Documentation Project
    The FreeBSD German Documentation Project

    $FreeBSD$
    $FreeBSDde: de-docproj/books/handbook/jails/chapter.xml,v 1.23 2011/05/25 20:42:25 jkois Exp $
    basiert auf: 1.27
-->
<chapter id="jails">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Matteo</firstname>
	<surname>Riondato</surname>
	<contrib>Beigetragen von </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
        <firstname>Oliver</firstname>
        <surname>Peter</surname>
        <contrib>Übersetzt von </contrib>
      </author>
      <author>
        <firstname>Dirk</firstname>
        <surname>Arlt</surname>
      </author>
      <author>
        <firstname>Johann</firstname>
        <surname>Kois</surname>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Jails</title>

  <indexterm><primary>jails</primary></indexterm>

  <sect1 id="jails-synopsis">
    <title>Übersicht</title>

    <para>Dieses Kapitel erklärt, was &os;-Jails sind und wie man sie
      einsetzt.  Jails, manchmal als Ersatz für
      <emphasis>chroot-Umgebungen</emphasis> bezeichnet, sind ein sehr
      mächtiges Werkzeug für Systemadministratoren, jedoch kann
      deren grundlegende Verwendung auch für fortgeschrittene Anwender
      nützlich sein.</para>

    <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie</para>

    <itemizedlist>
      <listitem>
	<para>Wissen, was eine Jail ist und welche Verwendungszwecke
	  es dafür unter &os; gibt.</para>
      </listitem>

      <listitem>
	<para>Wissen, wie man eine Jail erstellt, startet und
	  und anhält.</para>
      </listitem>

      <listitem>
	<para>Die Grundlagen der Jail-Administration (sowohl
	  innerhalb als auch ausserhalb des Jails) kennen.</para>
      </listitem>
    </itemizedlist>

    <para>Weitere nützliche Informationen über Jails
      sind beispielsweise in folgenden Quellen zu finden:</para>

    <itemizedlist>
      <listitem>
	<para>Der &man.jail.8; Manualpage.  Diese umfassende Referenz
	  beschreibt, wie man unter &os; eine Jail startet, anhält
	  und kontrolliert.</para>
      </listitem>

      <listitem>
	<para>Den Mailinglisten und deren Archive.  Die Archive der
	  Mailingliste &a.questions; und anderen Mailinglisten, welche
	  vom &a.mailman.lists; bereitgestellt werden, beinhalten bereits
	  umfangreiche Informationen zu Jails.  Daher ist es sinnvoll,
	  bei Problemen mit Jails zuerst die Archive der Mailinglisten
	  zu durchsuchen, bevor Sie eine neue Anfrage auf der
	  Mailingliste &a.questions.name; stellen.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="jails-terms">
    <title>Jails - Definitionen</title>

    <para>Um die für den Einsatz von Jails benötigten
      FreeBSD-Funktionen, deren Interna sowie die Art und Weise, mit der
      diese mit anderen Teilen des Betriebssystems interagieren, zu
      erläutern, werden in diesem Kapitel folgende Definitionen
      verwendet:</para>

    <variablelist>
      <varlistentry>
	<term>&man.chroot.8; (-Befehl)</term>
	<listitem>
	  <para>Ein Werkzeug, das den &os;-Systemaufruf &man.chroot.2;
	    verwendet, um das Wurzelverzeichnis eines Prozesses und all
	    seiner Nachkömmlinge zu ändern.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>&man.chroot.2; (-Umgebung)</term>
	<listitem>
	  <para>Die Umgebung eines Prozesses, der in einem
	    <quote>chroot</quote> läuft.  Diese beinhaltet
	    Ressourcen, wie zum Beispiel sichtbare Abschnitte
	    des Dateisystems, verfügbare Benutzer- und
	    Gruppenkennungen, Netzwerkschnittstellen und weitere
	    IPC-Mechanismen und so weiter.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>&man.jail.8; (-Befehl)</term>
	<listitem>
	  <para>Das Systemadministrationswerkzeug, welches es erlaubt,
	    Prozesse innerhalb der Jail-Umgebung zu starten.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Host (-Benutzer, -Prozess, -System)</term>
	<listitem>
	  <para>Das verwaltende System einer Jail-Umgebung.  Das
	    Host-System hat Zugriff auf alle verfügbaren
	    Hardwareressourcen und kann sowohl innerhalb als auch
	    ausserhalb der Jail-Umgebung Prozesse steuern.  Einer der
	    wichtigsten Unterschiede des Host-System einer Jails ist,
	    dass die Einschränkungen, welche für die
	    Superuser-Prozesse innerhalb eines Jails gelten, nicht
	    für die Prozesse des Host-Systems gelten.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Gast (-Benutzer, -Prozess, -System)</term>
	<listitem>
	  <para>Ein Prozess, ein Benutzer oder eine andere Instanz,
	    deren Zugriff durch eine &os;-Jail eingeschränkt
	    ist.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>

  <sect1 id="jails-intro">
    <title>Einführung</title>

    <para>Da die Systemadministration oft eine schwierige Aufgabe ist,
      wurden viele mächtige Werkzeuge entwickelt, die
      Administratoren bei Installation, Konfiguration und Wartung ihrer
      Systeme unterstützen sollen.  Eine wichtige Aufgabe eines
      Administrators ist es, Systeme so abzusichern, dass es im
      regulären Betrieb zu keinen Sicherheitsverstößen
      kommt.</para>

    <para>Eines der Werkzeuge, mit dem die Sicherheit eines &os;-Systems
      verbessert werden kann, sind Jails.  Jails wurden schon in
      &os;&nbsp;4.X von &a.phk; eingeführt, wurden jedoch mit
      &os;&nbsp;5.X stark verbessert, sodass sie inzwischen zu einem
      mächtigen und flexiblen Subsystem herangereift sind.  Trotzdem
      geht die Entwicklung nach wie vor weiter.  Wichtige Ziele sind
      derzeit:  Bessere Zweckmäßigkeit, Leistung,
      Ausfallsicherheit und allgemeine Sicherheit.</para>

    <sect2 id="jails-what">
      <title>Was ist eine Jail?</title>

      <para>BSD-ähnliche Betriebssysteme besitzen seit den Zeiten
	von 4.2BSD &man.chroot.2;.  Das Werkzeug &man.chroot.2; kann dazu
	benutzt werden, das root-Verzeichnis einer Reihe von Prozessen
	zu ändern, um so eine seperate sichere Umgebung (abgeschnitten
	vom Rest des Systems) zu schaffen.  Prozesse, die in einer
	chroot-Umgebung erstellt wurden, können nicht auf Dateien
	oder Ressourcen zugreifen, die sich ausserhalb der Umgebung
	befinden.  Dadurch ist es einem kompromittierten Dienst nicht
	möglich, das gesamte System zu kompromittieren.
	&man.chroot.8; eignet sich für einfache Aufgaben, die keine
	flexiblen, komplexen oder fortgeschrittenen Funktionen
	benötigen.  Obwohl seit der Entwicklung des chroot-Konzepts
	zahlreiche Sicherheitslöcher geschlossen wurden, die es
	einem Prozess erlauben konnten, aus einer Jail auszubrechen,
	war seit langer Zeit klar, dass &man.chroot.2; nicht die ideale
	Lösung ist, einen Dienst sicher zu machen.</para>

      <para>Dies ist einer der Hauptgründe, warum
	<emphasis>Jails</emphasis> entwickelt wurden.</para>

      <para>Jails setzen auf dem traditionellen &man.chroot.2;-Konzept
	auf und verbessern es auf unterschiedlichste Art und Weise.  In
	einer traditionellen &man.chroot.2;-Umgebung sind Prozesse auf
	den Bereich des Dateisystems beschränkt, auf den sie
	zugreifen können.  Der Rest der Systemressourcen (wie zum
	Beispiel eine Reihe von Systembenutzern, die laufenden Prozesse
	oder das Netzwerk-Subsystem) teilen sich die chroot-Prozesse mit
	dem Host-System.  Jails dehnen dieses Modell nicht nur auf die
	Virtualisierung des Zugriffs auf das Dateisystem, sondern auch
	auf eine Reihe von Benutzern, das Netzwerk-Subsystem des
	&os;-Kernels und weitere Bereiche aus.  Eine ausführlichere
	Übersicht der ausgefeilten Bedienelemente zur Konfiguration
	einer Jail-Umgebung finden Sie im Abschnitt <xref
	linkend="jails-tuning"/> des Handbuchs.</para>

      <para>Eine Jail zeichnet sich durch folgende Merkmale aus:</para>

      <itemizedlist>
	<listitem>
	  <para>Einen Unterverzeichnisbaum, der die Jail enthält.
	    Einem Prozess, der innerhalb der Jail läuft, ist es
	    nicht mehr möglich, aus diesem auszubrechen.  Von
	    der traditionellen &man.chroot.2;-Umgebung bekannte
	    Sicherheitsprobleme existieren bei &os;-Jails nicht
	    mehr.</para>
	</listitem>

	<listitem>
	  <para>Einen Hostname, der innerhalb der Jail verwendet wird.
	    Jails werden vor allem dazu verwendet, Netzwerkdienste
	    anzubieten, daher ist es für Systemadministratoren
	    von großem Nutzen, dass jede Jail einen beschreibenden
	    Hostname haben kann.</para>
	</listitem>

	<listitem>
	  <para>Eine <acronym>IP</acronym> Adresse, die der Jail
	    zugewiesen wird und nicht verändert werden kann,
	    solange das Jail läuft.  Die IP-Adresse einer Jails
	    ist üblicherweise ein Adress-Alias auf eine
	    existierende Netzwerkschnittstelle.  Dies ist jedoch
	    nicht zwingend erforderlich.</para>
	</listitem>

	<listitem>
	  <para>Einen Befehl (genauer den Pfad einer ausführbaren
	    Datei) der innerhalb der Jail ausgeführt werden soll.
	    Dieser Pfad wird relativ zum root-Verzeichnis einer
	    Jail-Umgebung angegeben und kann sehr unterschiedlich
	    aussehen (je nachdem, wie die Jail-Umgebung konfiguriert
	    wurde).</para>
	</listitem>
      </itemizedlist>

      <para>Unabhängig davon können Jails eine Reihe eigener
	Benutzer und einen eigenen Benutzer <username>root</username>
	haben.  Selbstverständlich sind die Rechte des Benutzers
	<username>root</username> nur auf die Jail-Umgebung
	beschränkt.  Aus der Sicht des Host-Systems ist der
	Benutzer <username>root</username> der Jail-Umgebung kein
	allmächtiger Benutzer, da der Benutzer
	<username>root</username> der Jail-Umgebung nicht dazu
	berechtigt ist, kritische Operationen am System ausserhalb der
	angebundenen &man.jail.8;-Umgebung durchzuführen.
	Weitere Informationen über die Einsatzmöglichkeiten
	und Beschränkungen des Benutzers <username>root</username>
	werden im Abschnitt <xref linkend="jails-tuning"/> des
	Handbuchs besprochen.</para>
    </sect2>
  </sect1>

 <sect1 id="jails-build">
    <title>Einrichtung und Verwaltung von Jails</title>

    <para>Einige Administratoren unterscheiden zwei verschiedene
      Jail-Arten:  <quote>Komplette</quote> Jails, die ein echtes
      &os; darstellen und Jails für einen bestimmten
      <quote>Dienst</quote>, die nur einer bestimmten Anwendung
      oder einem Dienst (der möglicherweise mit besonderen
      Privilegien laufen soll) gewidmet sind.  Dies ist aber nur
      eine konzeptuelle Unterscheidung, die Einrichtung einer
      Jail bleibt davon gänzlich unberührt.</para>

    <screen>&prompt.root; <userinput>setenv D <replaceable>/hier/ist/die/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>Das Festlegen des Installationsorts für das Jail
	  eignet sich am besten als Startpunkt.  Hier wird sich die
	  Jail innerhalb des Host-Dateisystems befinden.  Eine gute
	  Möglichkeit wäre etwa <filename
	  class="directory">/usr/jail/<replaceable>name_der_jail</replaceable></filename>,
	  wobei <replaceable>name_der_jail</replaceable> den Hostname
	  darstellt, über den die Jail identifiziert werden
	  soll.  Das Dateisystem unterhalb von <filename
	  class="directory">/usr/</filename> stellt normalerweise
	  aussreichend Platz für eine Jail zur Verfügung
	  (bedenken Sie, dass eine <quote>komplette</quote> Jail
	  ein Replikat einer jeden Datei der Standardinstallation des
	  &os;-Basissystems enthält.</para>
      </callout>

      <callout arearefs="jailbuildworld">
	<para>Wenn Sie bereits ihre Systemanwendungen mittels
          <command>make world</command> oder <command>make buildworld</command>
          neu erstellt haben, können Sie diesen Schritt überspringen
          und die Systemanwendungen in die neue Jail installieren.</para>
      </callout>

      <callout arearefs="jailinstallworld">
	<para>Dieser Befehl wird den Verzeichnisbaum mit allen
	  notwendigen Binärdateien, Bibliotheken, Manualpages
	  usw. erstellen.</para>
      </callout>

      <callout arearefs="jaildistrib">
	<para>Der <maketarget>distribution</maketarget>-Befehl
	  lässt <application>make</application> alle
	  benötigten Konfigurationsdateien installieren, es
	  werden also alle installierbaren Dateien aus
	  <filename class="directory">/usr/src/etc/</filename> in
	  das Verzeichnis <filename class="directory">/etc</filename>
	  der Jail installiert (also nach <filename
	  class="directory">$D/etc/</filename>).</para>
      </callout>

      <callout arearefs="jaildevfs">
	<para>Das Einhängen des &man.devfs.8;-Dateisystems
	  innerhalb der Jail ist nicht unbedingt notwendig.
	  Allerdings benötigt fast jede Anwendung Zugriff auf
	  wenigstens ein Gerät.  Es ist daher sehr wichtig,
	  den Zugriff auf Devices aus der Jail heraus zu
	  kontrollieren, da unsaubere Einstellungen es einem
	  Angreifer erlauben könnten, in das System einzudringen.
	  Die Kontrolle über &man.devfs.8; erfolgt durch die in
	  den Manualpages &man.devfs.8; und &man.devfs.conf.5;
	  beschriebenen Regeln.</para>
      </callout>
    </calloutlist>

    <para>Ist eine Jail einmal erst erstellt, kann sie durch
      &man.jail.8; gestartet werden.  &man.jail.8; benötigt
      zwingend mindestens vier Argumente, die im Abschnitt <xref
      linkend="jails-what"/> des Handbuchs beschrieben sind.  Weitere
      Argumente sind möglich, um beispielsweise die Jail mit den
      Berechtigungen eines bestimmten Benutzers laufen zu lassen.  Das
      Argument <option><replaceable>command</replaceable></option>
      hängt vom Typ der Jail ab; für ein <emphasis>virtuelles
      System</emphasis> ist <filename>/etc/rc</filename> eine gute
      Wahl, da dies dem Startvorgang eines echten &os;-Systems
      entspricht.  Bei einer <emphasis>Service</emphasis>-Jail
      hängt dieses von der Art des Dienstes ab, der in der Jail
      laufen soll.</para>

    <para>Jails werden häufig mit dem Betriebssystem gestartet,
      da der <filename>rc</filename>-Mechanismus von &os; dafür
      eine einfach zu realisierende Möglichkeit bietet.</para>

    <procedure>
      <step>
	<para>Eine Liste der Jails, die mit dem Betriebssystem
	  gestartet werden sollen, wird in die Datei &man.rc.conf.5;
	  geschrieben:</para>

	<programlisting>jail_enable="YES"   # Set to NO to disable starting of any jails
jail_list="<replaceable>www</replaceable>"     # Space separated list of names of jails</programlisting>

	<note>
	  <para>Die Namen der Jails in der
	    <varname>jail_list</varname> sollten nur alphanumerische
	    Zeichen enthalten.</para>
	</note>
      </step>

      <step>
	<para>Für jede Jail in der <varname>jail_list</varname>
	  sollten in &man.rc.conf.5; einige Einstellungen
	  vorgenommen werden:</para>

	<programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www"     # jail's root directory
jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org"  # jail's hostname
jail_<replaceable>www</replaceable>_ip="192.168.0.10"           # jail's IP address
jail_<replaceable>www</replaceable>_devfs_enable="YES"          # mount devfs in the jail
jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # devfs ruleset to apply to jail</programlisting>

	<para>Beim Start einer in &man.rc.conf.5; konfigurierten Jail
	  wird das <filename>/etc/rc</filename>-Skript der Jail (das
	  "annimmt", dass es sich in einem kompletten System befindet)
	  aufgerufen.  Für Service-Jails sollten die Startskripte
	  der Jail durch das Setzen der Option
	  <varname>jail_<replaceable>jailname</replaceable>_exec_start</varname>
	  entsprechend angepasst werden.</para>

	<note>
	  <para>Eine vollständige Liste der Optionen findet sich
	    in der Manualpage zu &man.rc.conf.5;.</para>
	</note>
      </step>
    </procedure>

    <para>Das <filename>/etc/rc.d/jail</filename>-Skript kann
      zum manuellen Starten und Stoppen der Jail genutzt werden,
      wenn ein Eintrag in <filename>rc.conf</filename> angelegt
      wurde:</para>

    <screen>&prompt.root; <userinput>/etc/rc.d/jail start <replaceable>www</replaceable></userinput>
&prompt.root; <userinput>/etc/rc.d/jail stop <replaceable>www</replaceable></userinput></screen>

    <para>Es gibt momentan keinen sauberen Weg, eine &man.jail.8; zu
      stoppen.  Dies liegt daran, dass die Kommandos zum sauberen
      Herunterfahren eines Systems innerhalb einer Jail nicht
      ausgeführt werden können.  Der beste Weg eine Jail zu
      beenden ist es daher, innerhalb der Jail den folgenden Befehl
      auszuführen (alternativ können Sie auch &man.jexec.8;
      von außerhalb der Jail aufrufen):</para>

    <screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>

    <para>Weitere Informationen zu diesem Thema finden Sie in der
      Manualpage &man.jail.8;.</para>
  </sect1>

  <sect1 id="jails-tuning">
    <title>Feinabstimmung und Administration</title>

    <para>Es gibt verschiedene Optionen, die für jede Jail
      gesetzt werden können und verschiedene Wege, ein
      &os;-Host-System mit Jails zu kombinieren.  Dieser Abschnitt
      zeigt Ihnen:</para>

    <itemizedlist>
      <listitem>
	<para>Einige zur Verfügung stehende Optionen zur
	  Abstimmung des Verhaltens und der Sicherheitseinstellungen,
	  die mit einer Jail-Installation ausgeführt werden
	  können.</para>
      </listitem>

      <listitem>
	<para>Einige der Anwendungsprogramme für das
	  Jail-Management, die über die &os; Ports-Sammlung
	  verfügbar sind und genutzt werden können, um
	  Jail-basierte Lösungen allumfassend umzusetzen.</para>
      </listitem>
    </itemizedlist>

    <sect2 id="jails-tuning-utilities">
      <title>Systemwerkzeuge zur Feinabstimmung von Jails in &os;</title>

      <para>Die Feinabstimmung einer Jail-Konfiguration erfolgt zum
	Großteil durch das Setzen von &man.sysctl.8;-Variablen.
	Es gibt einen speziellen sysctl-Zweig, der als Basis für
	die Organisation aller relevanten Optionen dient:  Die
	<varname>security.jail.*</varname>-Hierarchie der
	&os;-Kerneloptionen.  Die folgende Liste enthält alle
	jail-bezogenen sysctls (inklusiver ihrer Voreinstellungen).
	Die Namen sollten selbsterklärend sein, für
	weitergehende Informationen lesen Sie bitte die Manualpages
	&man.jail.8; und &man.sysctl.8;.</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:
	     0</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>Diese Variablen können vom Administrator des
	<emphasis>Host-Systems</emphasis> genutzt werden, um
	Beschränkungen hinzuzufügen oder aufzuheben, die dem
	Benutzer <username>root</username> als Vorgabe auferlegt sind.
	Beachten Sie, dass es einige Beschränkungen gibt, die nicht
	verändert werden können.  Der Benutzer
	<username>root</username> darf innheralb der &man.jail.8; keine
	Dateisysteme mounten und unmounten.  Ebenso ist es ihm untersagt,
	das &man.devfs.8;-Regelwerk zu laden oder zu entladen.  Er darf
	weder Firewallregeln setzen, noch administrative Aufgaben
	erledigen, die Modifikationen am Kernel selbst erfordern
	(wie bespielsweise das Setzen des <varname>Securelevels</varname>
	des Kernel.</para>

      <para>Das &os;-Basissystem enthält einen Basissatz an
	Werkzeugen, um Informationen über aktive Jails zu erlangen
	und einer Jail administrative Befehle zuzuordnen.  Die Befehle
	&man.jls.8; und &man.jexec.8; sind Teil des &os;-Basissystems
	und können für folgende Aufgaben verwendet werden:</para>

      <itemizedlist>
	<listitem>
	  <para>Das Anzeigen einer Liste der aktiven Jails und ihrer
	    zugehörigen Jail Identifier (<acronym>JID</acronym>),
	    ihrer <acronym>IP</acronym>-Addresse, ihres Hostnames und
	    ihres Pfades.</para>
	</listitem>

	<listitem>
	  <para>Das Herstellen einer Verbindung mit einer laufenden
	    Jail, das Starten eines Befehls aus dem gastgebenen
	    System heraus oder das Ausführen einer administrativen
	    Aufgabe innerhalb der Jail selbst.  Dies ist insbesondere
	    dann nützlich, wenn der Benutzer
	    <username>root</username> die Jail sauber herunterfahren
	    möchte.  &man.jexec.8; kann auch zum  Starten einer
	    Shell innerhalb der Jail genutzt werden, um adminstrative
	    Aufgaben durchzuführen:</para>

	  <screen>&prompt.root; <userinput>jexec <replaceable>1</replaceable> tcsh</userinput></screen>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2 id="jails-tuning-admintools">
      <title>High-Level-Werkzeuge zur Jail-Administration in der &os;
        Ports-Sammlung</title>

    <para>Unter den zahlreichen Fremdwerkzeugen für die Administration
      von Jails sind die <filename
      role="package">sysutils/jailutils</filename> die
      vollständigsten und brauchbarsten.  Dabei handelt es sich um
      eine Sammlung kleiner Anwendungen, die das &man.jail.8;-Management
      vereinfachen.  Weitere Informationen zu diesen Werkzeugen finden
      Sie auf den entsprechenden Internetseiten.</para>
    </sect2>
  </sect1>

  <sect1 id="jails-application">
    <title>Anwendung von Jails</title>

    <sect2 id="jails-service-jails">
      <sect2info>
	<authorgroup>
	  <author>
	    <firstname>Daniel</firstname>
	    <surname>Gerzo</surname>
	    <contrib>Beigetragen von </contrib>
	    <!-- 15. May 2007 -->
	  </author>
	</authorgroup>
      </sect2info>

      <title>Service-Jails</title>

      <para>Dieser Abschnitt basiert auf einer von &a.simon; auf <ulink
	url="http://simon.nitro.dk/service-jails.html"></ulink>
	präsentierten Idee und einem aktualisierten
	Artikel von Ken Tom (<email>locals@gmail.com</email>). Er
	beschreibt, wie ein &os;-System durch Benutzung der
	&man.jail.8;-Funktion mit zusätzlichen
	Sicherheitsebenen ausgestattet werden kann.  Es wird dabei
	angenommen, dass auf Ihrem &os;-System RELENG_6_0 oder neuer
	installiert ist und dass Sie die Informationen aus den
	vorangehenden Abschnitten gelesen und verstanden haben.</para>

      <sect3 id="jails-service-jails-design">
       <title>Design</title>

	<para>Eines der Hauptprobleme bei Jails ist das Management
	  ihres Upgrade-Prozesses.  Dieser neigt dazu, problematisch zu
	  sein, da jede Jail bei jedem Upgrade komplett neu gebaut
	  werden muss.  Das stellt normalerweise kein Problem dar, wenn
	  es sich um eine einzelne Jail handelt, da der Upgrade-Prozess
	  recht einfach ist.  Verwenden Sie aber eine größere
	  Anzahl von Jails, kann dieser Prozess sehr zeitaufwendig
	  werden.</para>

	<warning>
	  <para>Diese Konfiguration erfordert fortgeschrittene
	    Kenntnisse im Umgang mit &os; sowie der Benutzung seiner
	    Funktionen.  Sollten die unten vorgestellten Schritte zu
	    kompliziert wirken, wird empfohlen, sich einfachere Verfahren
	    wie <filename role="package">sysutils/ezjail</filename>
	    anzusehen, da diese einfachere Methoden zur Administration
	    von Jails verwenden und daher nicht so anspruchsvoll sind
	    wie der hier beschriebene Aufbau.</para>
	</warning>

	<para>Diese Konfiguration basiert darauf, Jails so weit als
	  möglich gemeinsam zu verwalten.  Dies passiert auf sichere
	  Art und Weise durch den Einsatz von &man.mount.nullfs.8;-Mounts
	  (read-only).  Dadurch werden Aktualisierungen erleichtert und
	  das Verteilen von verschiedenen Diensten auf verschiedene
	  Jails wird attraktiver.  Außerdem bietet dieses Verfahren
	  einen einfachen Weg, Jails hinzuzufügen, zu entfernen und
	  zu aktualisieren.</para>

	<note>
	  <para>Beispiele für Dienste sind in diesem
	    Zusammenhang:  Ein <acronym>HTTP</acronym>-Server, ein
	    <acronym>DNS</acronym>-Server, ein
	    <acronym>SMTP</acronym>-Server und so weiter.</para>
	</note>

	<para>Die Ziele des in diesem Abschnitt beschriebenen Aufbaus
	  sind:</para>

	<itemizedlist>
	  <listitem>
	    <para>Das Erstellen einer einfachen und gut
	      verständlichen Struktur von Jails.  Dies beinhaltet,
	      <emphasis>nicht</emphasis> für jede Jail ein
	      vollständiges installworld laufen lassen zu
	      müssen.</para>
	  </listitem>

	  <listitem>
	    <para>Es einfach zu machen, neue Jails zu erstellen oder
	      alte zu entfernen.</para>
	  </listitem>

	  <listitem>
	    <para>Es einfach zu machen, bestehende Jails zu
	      aktualisieren.</para>
	  </listitem>

	  <listitem>
	    <para>Es einfach zu machen, einen angepassten &os;-Zweig zu
	      nutzen.</para>
	  </listitem>

	  <listitem>
	    <para>Paranoid bezüglich Sicherheit zu sein und
	      Angriffsmöglickeiten weitgehend zu reduzieren.</para>
	  </listitem>

	  <listitem>
	    <para>Soviel Platz und Inodes wie möglich
	      einzusparen.</para>
	  </listitem>
	</itemizedlist>

	<para>Wie bereits erwähnt, ist dieses Design stark darauf
	  angewiesen, dass eine read-only-Hauptvorlage in jede Jail
	  hinein gemountet wird (bekannt als
	  <application>nullfs</application>), und dass jede Jail
	  über wenigstens ein beschreibbares Gerät
	  verfügt.  Das Gerät kann hierbei eine separate
	  physikalische Platte oder ein vnode unterstütztes
	  &man.md.4;-Gerät sein. Im folgenden Beispiel wird ein
	  <application>nullfs</application>-Mount genutzt, auf den
	  nur Lesezugriff erlaubt ist.</para>

	<para>Das Layout des Dateisystems wird in der folgenden Liste
	  beschrieben:</para>

	<itemizedlist>
	  <listitem>
	    <para>Jede Jail wird unterhalb des <filename
	      class="directory">/home/j</filename>-Verzeichnisses
	      gemountet.</para>
	  </listitem>

	  <listitem>
	    <para><filename class="directory">/home/j/mroot</filename>
	      ist die Vorlage für jede Jail und die nur lesbare
	      Partition für alle Jails.</para>
	  </listitem>

	  <listitem>
	    <para>Unterhalb von <filename
	      class="directory">/home/j</filename> wird für jede
	      Jail ein leeres Verzeichnis angelegt.</para>
	  </listitem>

	  <listitem>
	    <para>Jede Jail bekommt ein <filename
	      class="directory">/s</filename>-Verzeichnis, das zum
	      read/write-Teilbereich des Systems verlinkt wird.</para>
	  </listitem>

	  <listitem>
	    <para>Jede Jail bekommt ihr eigenes read/write-System,
	      das auf <filename
	      class="directory">/home/j/skel</filename> basiert.</para>
	  </listitem>

	  <listitem>
	    <para>Jeder Jailbereich (genauer der read/write-Teilbereich
	      jeder Jail) wird in <filename
	    class="directory">/home/js</filename> erstellt.</para>
	  </listitem>
	</itemizedlist>

	<note>
	  <para>Es wird angenommen, dass die Jails sich unterhalb des
	    <filename class="directory">/home</filename> Verzeichnisses
	    befinden.  Dieser Ort kann von Ihnen natürlich
	    geändert werden.  Allerdings müssen die Pfade
	    in den folgenden Beispielen dann entsprechend angepasst
	    werden.</para>
	</note>
	<!-- Insert an image or drawing here to illustrate the example. -->
      </sect3>

      <sect3 id="jails-service-jails-template">
	<title>Erstellen der Vorlage</title>

	<para>Dieser Abschnitt beschreibt die Schritte, die zum
	  Erstellen der Hauptvorlage (die den nur lesbaren Bereich
	  für alle weiteren Jails darstellt) notwendig sind.</para>

	<para>Es ist immer eine gute Idee, &os; auf den aktuellen
	  -RELEASE-Zweig zu aktualisieren.  Lesen Sie das entsprechende
	  <ulink
	  url="&url.books.handbook;/makeworld.html">Kapitel</ulink> des
	  Handbuchs für Informationen zu diesem Thema.  Selbst wenn
	  Sie auf eine Aktualisierung des Betriebssystems verzichten,
	  müssen Sie dennoch ein buildworld durchführen, um
	  fortfahren zu können.  Außerdem müssen Sie
	  das Paket <filename role="package">sysutils/cpdup</filename>
	  installiert sein.  In diesem Beispiel wird &man.portsnap.8;
	  verwendet, um die aktuelle &os; Ports-Sammlung herunterzuladen.
	  Der Abschnitt <ulink
	  url="&url.books.handbook;/portsnap.html">Portsnap</ulink> des
	  Handbuchs beschreibt, wie Sie dieses Werkzeug effektiv
	  einsetzen.</para>

	<procedure>
	  <step>
	    <para>Zuerst erstellen wir eine Verzeichnissstruktur
	      für das read-only-Dateisystem, das die
	      &os;-Binärdateien für unsere Jails enthalten
	      wird.  Anschließend wechseln wir in den
	      &os;-Quellcodebaum und installieren das
	      read-only-Dateisystem in die (Vorlage-)Jail.</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>Als nächstes bereiten wir die Ports-Sammlung
	      fü die Jails vor und kopieren den &os; Quellcodebaum
	      in die Jail, da dieser für
	      <application>mergemaster</application> benötigt wird:</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>Danach wird die Struktur für den
	      read/write-Bereich des Systems erstellt:</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>Nutzen Sie <application>mergemaster</application>, um
	      fehlende Konfigurationsdateien zu installieren.
	      Anschließend werden die von
	      <application>mergemaster</application> erstellten
	      Extra-Verzeichnisse entfernt:</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>Nun wird das read/write-Dateisystem mit dem
	      read-only-Dateisystem verlinkt.  Bitte vergewissern Sie
	      sich, dass die symbolischen Links an den korrekten
	      <filename class="directory">s/</filename> Positionen
	      erstellt werden.  Echte Verzeichnisse oder an falschen
	      Positionen erstellte Verzeichnisse lassen die Installation
	      fehlschlagen.</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>Zuletzt erstellen Sie eine allgemeine
	      <filename>/home/j/skel/etc/make.conf</filename> mit
	      folgendem Inhalt:</para>

	    <programlisting>WRKDIRPREFIX?=  /s/portbuild</programlisting>

	    <para>Ein gesetztes <literal>WRKDIRPREFIX</literal>
	      erlaubt es, die &os;-Ports innerhalb jeder Jail
	      zu kompilieren.  Das Ports-Verzeichnis ist Teil des
	      read-only System.  Der angepasste Pfad des
	      <literal>WRKDIRPREFIX</literal> macht es möglich,
	      innerhalb des read/write-Bereichs der Jail Ports zu
	      bauen.</para>
	  </step>
	</procedure>
      </sect3>

      <sect3 id="jails-service-jails-creating">
	<title>Jails erstellen</title>

	<para>Da nun eine komplette &os;-Jailvorlage vorliegt, sind wir
	  nun in der Lage, Jails einrichten und in
	  <filename>/etc/rc.conf</filename> zu konfigurieren.  Dieses
	  Beispiel zeigt das Erstellen von drei Jails:
	  <quote>NS</quote>, <quote>MAIL</quote> und
	  <quote>WWW</quote>.</para>

	<procedure>
	  <step>
	    <para>Fügen Sie die folgenden Zeilen in
	      <filename>/etc/fstab</filename> ein, damit die
	      read-only-Vorlage und der read/write-Bereich für
	      alle Jails verfügbar sind:</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>Mit der Pass-Nummer 0 markierte Partitionen werden
		beim Booten des Systems nicht von &man.fsck.8;
		geprüft, mit 0 als Dump-Nummer markierte Partitonen
		werden von &man.dump.8; nicht gesichert.  Wir wollen
		nicht, dass <application>fsck</application> unsere
		<application>nullfs</application>-Mounts prüft oder
		dass <application>dump</application> die nur lesbaren
		nullfs-Mounts unserer Jails sichert.  Deshalb werden
		diese Bereiche in den letzten beiden Spalten der
		obenstehenden <filename>fstab</filename> mit
		<quote>0&nbsp;0</quote> markiert.</para>
	    </note>
	  </step>

	  <step>
	    <para>Konfigurieren Sie die 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>Der Grund dafür, dass die Variablen
		<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
		nach <filename class="directory">/usr/home</filename>
		statt nach <filename class="directory">/home</filename>
		zeigen, liegt darin, dass der physikalische Pfad des
		<filename
		class="directory">/home</filename>-Verzeichnisses unter
		&os; <filename class="directory">/usr/home</filename>
		lautet.  Die Variable
		<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
		darf im Pfad aber <emphasis>keinen symbolischen
		Link</emphasis> enthalten, weil das Jail ansonsten
		nicht gestartet werden kann.  Verwenden Sie
		&man.realpath.1;, um den korrekten Wert für diese
		Variable zu bestimmen.  Weitere Informationen finden
		Sie im Security Advisory &os;-SA-07:01.jail.</para>
	    </warning>
	  </step>

	  <step>
	    <para>Erstellen Sie die notwendigen Mountpunkte für
	      die nur lesbaren Bereiche jeder Jail:</para>

	    <screen>&prompt.root; <userinput>mkdir /home/j/ns /home/j/mail /home/j/www</userinput></screen>
	  </step>

	  <step>
	    <para>Installieren Sie die read/write-Vorlage in jede
	      Jail.  Benutzen Sie hierfür <filename
	      role="package">sysutils/cpdup</filename>, welches es
	      erleichtert, eine korrekte Kopie jedes Verzeichnisses
	      zu erstellen:</para>

	    <!-- keramida: Why is cpdup required here?  Doesn't cpio(1)
	     already include adequate functionality for performing this
	     job *and* have the advantage of being part of the base
	     system of FreeBSD? -->

	    <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>An dieser Stelle werden die Jails erstellt und
	      fü den Betrieb vorbereitet.  Zuerst mounten Sie die
	      notwendigen Dateisysteme für jede Jail und starten
	      diese dann mit dem Skript
	      <filename>/etc/rc.d/jail</filename>:</para>

	    <screen>&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
	  </step>
	</procedure>

	<para>Die Jails sollten nun laufen.  Um zu prüfen, ob sie
	  korrekt gestartet wurden, verwenden Sie &man.jls.8;.  Nach
	  dem Aufruf dieses Befehls sollten Sie eine Ausgabe
	  ähnlich der folgenden erhalten:</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>An diesem Punkt sollte es möglich sein, sich an
	jeder Jail anzumelden, Benutzer anzulegen und Dienste zu
	konfigurieren.  Die Spalte <literal>JID</literal> gibt die
	Jail-Identifikationsnummer jeder laufenden Jail an. Nutzen Sie
	den folgenden Befehl, um administrative Aufgaben in der Jail
	mit der <literal>JID</literal> 3 durchzuführen:</para>

	<screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen>
      </sect3>

      <sect3 id="jails-service-jails-upgrading">
	<title>Jails aktualisieren</title>

	<para>Mit der Zeit wird es notwendig sein, das System auf
	  eine neuere Version von &os; zu aktualisieren.  Zum einen aus
	  Sicherheitsgründen, zum anderen, um neu eingeführte
	  Funktionen nutzen zu können, die für die bestehenden
	  Jails sinnvoll sind.  Das Design dieses Aufbaus bietet einen
	  einfachen Weg, bestehende Jails zu aktualisieren. Zudem
	  reduziert es die Downtime, da die Jails erst im allerletzten
	  Schritt gestoppt werden müssen.  Außerdem bietet
	  es die Möglichkeit, zu älteren Versionen
	  zurückzukehren, falls irgendwelche Probleme auftreten.</para>

	<procedure>
	  <step>
	    <para>Im ersten Schritt wird das Host-System aktualisiert.
	      Anschließend wird eine temporäre neue
	      read-only Vorlage <filename
	      class="directory">/home/j/mroot2</filename> erstellt.</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>Der <maketarget>installworld</maketarget>-Durchlauf
	      erzeugt einige unnötige Verzeichnisse, die nun entfernt
	      werden sollten:</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>Erzeugen Sie neue symbolische Links für das
	      Hauptdateisystem:</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>Nun ist es an der Zeit, die Jails zu stoppen:</para>

	    <screen>&prompt.root; <userinput>/etc/rc.d/jail stop</userinput></screen>
	  </step>

	  <step>
	    <para>Unmounten des originalen Dateisystems:</para>

	    <!-- keramida: Shouldn't we suggest a short script-based
	     loop here, instead of tediously copying the same commands
	     multiple times? -->

	    <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>Die read/write-Systeme sind an das read-only
	        System angehängt (<filename
	        class="directory">/s</filename>), das daher zuerst
	        ausgehängt werden muss.</para>
	    </note>
	  </step>

	  <step>
	    <para>Verschieben Sie das alte read-only-Dateisystem und
	      ersetzen Sie es durch das neue Dateisystem.  Das alte
	      Dateisystem kann so als Backup dienen, falls etwas schief
	      geht.  Die Namensgebung entspricht hier derjenigen bei der
	      Erstellung eines neuen read-only-Dateisystems. Verschieben
	      Sie die originale &os; Ports-Sammlung in das neue
	      Dateisystem, um Platz und Inodes zu sparen:</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>Nun ist die neue read-only-Vorlage fertig.  Sie
	      müssen daher nur noch die Dateisysteme erneut mounten
	      und die Jails starten:</para>

	    <screen>&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
	  </step>
	</procedure>

	<para>Nutzen Sie &man.jls.8; um zu prüfen, ob die Jails
	  korrekt gestartet wurden.  Vergessen Sie nicht, innerhalb jeder
	  Jail <command>mergemaster</command> laufen zu lassen. Die
	  Konfigurationsdateien müssen (ebenso wie die
	  rc.d-Skripten) aktualisiert werden.</para>
      </sect3>
    </sect2>
  </sect1>
</chapter>