aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/jails/chapter.xml
blob: a0ada52a15eb4959bdb8590fc0c28b0713d3e0ed (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
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
    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: r54232
-->
<chapter xmlns="http://docbook.org/ns/docbook"
  xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
  xml:id="jails">
  <info>
    <title>Jails</title>

    <authorgroup>
      <author>
	<personname>
	  <firstname>Matteo</firstname>
	  <surname>Riondato</surname>
	</personname>
	<contrib>Beigetragen von </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<personname>
	  <firstname>Oliver</firstname>
	  <surname>Peter</surname>
	</personname>
	<contrib>Übersetzt von </contrib>
      </author>
      <author>
	<personname>
	  <firstname>Dirk</firstname>
	  <surname>Arlt</surname>
	</personname>
      </author>
      <author>
	<personname>
	  <firstname>Johann</firstname>
	  <surname>Kois</surname>
	</personname>
      </author>
    </authorgroup>
  </info>

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

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

    <para>Da die Systemadministration eine schwierige Aufgabe ist,
      wurden viele Werkzeuge entwickelt, die Administratoren bei der
      Installation, Konfiguration und Wartung ihrer Systeme
      unterstützen sollen.  Eines dieser Werkzeuge, die verwendet
      werden können um die Sicherheit eines &os;-Systems zu
      erhöhen, sind <firstterm>Jails</firstterm>.  Jails sind seit
      &os;&nbsp;4.X verfügbar und werden ständig in ihrer
      Nützlichkeit, Leistung, Zuverlässigkeit und Sicherheit
      verbessert.  Jails können als eine Art von
      Betriebssystem-Virtualisierung angesehen werden.</para>

    <para>Jails setzen auf dem &man.chroot.2;-Konzept auf, das dazu
      verwendet wird das root-Verzeichnis einer Reihe von Prozessen
      zu ändern, um so eine separate, sichere Umgebung zu schaffen.
      Prozesse, die in einer chroot-Umgebung erstellt wurden, können
      nicht auf Dateien oder Ressourcen zugreifen, die sich außerhalb
      dieser Umgebung befinden.  Dadurch ist es einem kompromittierten
      Dienst nicht möglich, das gesamte System zu kompromittieren.
      Im Laufe der Zeit wurden viele Wege gefunden, um aus einer
      chroot-Umgebung auszubrechen, so dass es für die Sicherung von
      Diensten nicht die ideale Lösung ist.</para>

    <para>Jails verbessern das traditionelle chroot-Konzept auf
      unterschiedlichste Art und Weise.  In einer traditionellen
      chroot-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 erweitern dieses Modell nicht nur auf die
      Virtualisierung des Zugriffs auf das Dateisystem, sondern auch
      auf eine Reihe von Benutzern und  das Netzwerk-Subsystem.  Zudem
      stehen weitere Möglichkeiten zur Verfügung, den Zugriff auf eine
      Jail-Umgebung zu kontrollieren.</para>

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

    <itemizedlist>
      <listitem>
	<para>Ein Unterverzeichnisbaum: dies ist der Ausgangspunkt der
	  Jail.  Einem Prozess, der innerhalb der Jail läuft, ist es
	  nicht mehr möglich, aus diesem Unterverzeichnis
	  auszubrechen.</para>
      </listitem>

      <listitem>
	<para>Ein Hostname: dieser Name wird für die Jail
	  verwendet.</para>
      </listitem>

      <listitem>
	<para>Eine <acronym>IP</acronym> Adresse: diese Adresse wird
	  der Jail zugewiesen.  Die <acronym>IP</acronym>-Adresse
	  einer Jails ist üblicherweise ein Adress-Alias auf eine
	  existierende Netzwerkschnittstelle.</para>
      </listitem>

      <listitem>
	<para>Ein Kommando: der Pfad einer ausführbaren Datei, die
	  innerhalb der Jail ausgeführt werden soll.  Dieser Pfad wird
	  relativ zum root-Verzeichnis der Jail-Umgebung
	  angegeben.</para>
      </listitem>
    </itemizedlist>

    <para>Jails haben einen eigenen Satz von Benutzern und ihren
      eigenen <systemitem class="username">root</systemitem>-Konto.
      Die Rechte dieser Benutzer sind nur auf die Jail-Umgebung
      beschränkt.  Der Benutzer <systemitem
	class="username">root</systemitem> der Jail-Umgebung ist nicht
      dazu berechtigt, kritische Operationen am System außerhalb der
      angebundenen Jail-Umgebung durchzuführen.</para>

    <para>Dieses Kapitel bietet einen Überblick über die Terminologie
      und die Kommandos zur Verwaltung von &os; Jails.  Jails sind ein
      sehr mächtiges Werkzeug für Administratoren und fortgeschrittene
      Anwender.</para>

      <!--
    <important>
      <para>Jails sind ein mächtiges Werkzeug, aber sie sind kein
	Sicherheits-"Allheilmittel".  Es ist wichtig zu beachten, dass
	es für einen Prozess in der Jail nicht möglich ist, von selbst
	auszubrechen.  Es gibt jedoch Möglichkeiten, in denen ein
	unpriviligierter Benutzer außerhalb der Jail, mit einem
	priviligierten Benutzer innerhalb der Jail kooperiert, und
	somit erhöhte Rechte in der Host-Umgebung erlangt.</para>

      <para>Den meisten dieser Angriffe kann vorgebeugt werden, indem
	sichergestellt wird, dass das Rootverzeichnis der Jail für
	unpriviligierte Benutzer der Host-Umgebung nicht zugänglich
	ist.</para>
    </important>
-->
    <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
	  anhält.</para>
      </listitem>

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

    <important>
      <para>Jails sind ein mächtiges Werkzeug, aber sie sind kein
	Sicherheits-"Allheilmittel".  Es ist wichtig zu beachten, dass
	es für einen Prozess in der Jail nicht möglich ist, von selbst
	auszubrechen.  Es gibt jedoch Möglichkeiten, in denen ein
	unprivilegierter Benutzer außerhalb der Jail, mit einem
	privilegierten Benutzer innerhalb der Jail kooperiert, und
	somit erhöhte Rechte in der Host-Umgebung erlangt.</para>

      <para>Den meisten dieser Angriffe kann vorgebeugt werden, indem
	sichergestellt wird, dass das Rootverzeichnis der Jail für
	unprivilegierte Benutzer der Host-Umgebung nicht zugänglich
	ist.</para>
    </important>
  </sect1>

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

    <para>Um die für den Einsatz von Jails benötigten os;-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
	    außerhalb 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 xml: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.  Bei der Erstellung einer
      kompletten Jail gibt es zwei Optionen für die Quelle des
      Userlands: vorkompilierte Binärpakete (im Lieferumfang der
      Installationsmedien enthalten) oder die Kompilierung aus dem
      Quelltext.</para>

    <sect2>
      <title>Eine Jail installieren</title>

      <sect3 xml:id="jails-install-internet">
	<title>Eine Jail aus dem Internet installieren</title>

	<para>Der Werkzeug &man.bsdinstall.8; kann verwendet werden,
	  um die für eine Jail benötigten Binärdateien zu holen und zu
	  installieren.  Dies geht durch die Auswahl eines
	  Spiegelservers, welche Distributionen in das
	  Zielverzeichnis installiert werden sollen, sowie die
	  grundlegende Konfiguration einer Jail:</para>

	<screen>&prompt.root; <userinput>bsdinstall jail <replaceable>/pfad/zur/jail</replaceable></userinput></screen>

	<para>Nachdem der Befehl ausgeführt wurde, wird der
	  Host für den Betrieb der Jail konfiguriert.</para>
      </sect3>

      <sect3 xml:id="jails-install-iso">
	<title>Eine Jail aus einer ISO-Datei installieren</title>

    <para>Um das Basissystem von Installationsmedien zu installieren,
      erstellen Sie zunächst das Rootverzeichnis für die Jail.  Dazu
      setzen Sie <varname>DESTDIR</varname> auf das entsprechende
      Verzeichnis.</para>

    <para>Starten Sie eine Shell und legen Sie
      <varname>DESTDIR</varname> fest:</para>

    <screen>&prompt.root; <userinput>sh</userinput>
&prompt.root; <userinput>export DESTDIR=<replaceable>/hier/ist/die/jail</replaceable></userinput></screen>

    <para>Hängen Sie das Installationsmedium wie in &man.mdconfig.8;
      beschrieben ein, wenn Sie von einem
      ISO-Abbild installieren:</para>

    <screen>&prompt.root; <userinput>mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mnt</userinput>
&prompt.root; <userinput>cd /mnt/usr/freebsd-dist/</userinput></screen>

    <para>Extrahieren Sie die Binärdateien aus den Archiven des
      Installationsmediums in das entsprechende Verzeichnis.  Es wird
      mindestens das <quote>base</quote>-Set benötigt, aber Sie können
      auch eine komplette Installation durchführen, wenn Sie dies
      bevorzugen.</para>

    <para>Um lediglich das Basissystem zu installieren, führen Sie
      dieses Kommando aus:</para>

    <screen>&prompt.root; <userinput>tar -xf base.txz -C $DESTDIR</userinput></screen>

    <para>Führen Sie folgendes Kommando aus, um alles
      außer den Kernel zu installieren:</para>

    <screen>&prompt.root; <userinput>for set in base ports; do tar -xf $set.txz -C $DESTDIR ; done</userinput></screen>
      </sect3>

      <sect3 xml:id="jails-install-source">
	<title>Eine Jail aus den Quellen bauen und
	  installieren</title>

    <para>Die Manualpage &man.jail.8; beschreibt die Erstellung einer
      Jail wie folgt:</para>

    <screen>&prompt.root; <userinput>setenv D <replaceable>/hier/ist/die/jail</replaceable></userinput>
&prompt.root; <userinput>mkdir -p $D</userinput>      <co xml:id="jailpath"/>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildworld</userinput>  <co xml:id="jailbuildworld"/>
&prompt.root; <userinput>make installworld DESTDIR=$D</userinput>  <co xml:id="jailinstallworld"/>
&prompt.root; <userinput>make distribution DESTDIR=$D</userinput>  <co xml:id="jaildistrib"/>
&prompt.root; <userinput>mount -t devfs devfs $D/dev</userinput>   <co xml: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>/usr/jail/name_der_jail</filename>,
	  wobei <replaceable>name_der_jail</replaceable> den Hostname
	  darstellt, über den die Jail identifiziert werden
	  soll.  <filename>/usr/</filename> stellt normalerweise
	  ausreichend 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 <buildtarget>distribution</buildtarget>-Befehl
	  lässt <application>make</application> alle benötigten
	  Konfigurationsdateien installieren, es werden also alle
	  installierbaren Dateien aus
	  <filename>/usr/src/etc/</filename> in das Verzeichnis
	  <filename>/etc</filename> der Jail installiert (also nach
	  <filename>$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>
      </sect3>
    </sect2>

    <sect2>
      <title>Den Host konfigurieren</title>

    <para>Ist die Jail erst einmal erstellt, kann sie durch
      &man.jail.8; gestartet werden.  &man.jail.8; benötigt zwingend
      mindestens vier Argumente, die in <xref
	linkend="jails-synopsis"/> 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>Konfigurieren Sie die Jail in
	  <filename>/etc/jail.conf</filename>:</para>

	<programlisting><replaceable>www</replaceable> {
    host.hostname = <replaceable>www.example.org</replaceable>;           # Hostname
    ip4.addr = <replaceable>192.168.0.10</replaceable>;                   # IP address of the jail
    path = "<replaceable>/usr/jail/www</replaceable>";                    # Path to the jail
    devfs_ruleset = "<replaceable>www_ruleset</replaceable>";             # devfs ruleset
    mount.devfs;                               # Mount devfs inside the jail
    exec.start = "/bin/sh /etc/rc";            # Start command
    exec.stop = "/bin/sh /etc/rc.shutdown";    # Stop command
}</programlisting>

	<para>Um die Jails mit dem Betriebssystem zu starten, fügen
	  Sie folgende Zeile in
	  <filename>/etc/rc.conf</filename> ein:</para>

	<programlisting>jail_enable="YES"   # Set to NO to disable starting of any jails</programlisting>

	<para>Beim Start einer in &man.jail.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>exec.start</varname>
	  entsprechend angepasst werden.</para>

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

    <para>&man.service.8; kann zum manuellen Starten und Stoppen der
      Jail genutzt werden, wenn ein Eintrag in
      <filename>jail.conf</filename> angelegt wurde:</para>

    <screen>&prompt.root; <userinput>service jail start <replaceable>www</replaceable></userinput>
&prompt.root; <userinput>service jail stop <replaceable>www</replaceable></userinput></screen>

    <para>Jails können mit &man.jexec.8; heruntergefahren werden.
      Führen Sie zunächst &man.jls.8; aus, um die
      <varname>JID</varname> der Jail ausfindig zu machen.
      Anschließend können Sie &man.jexec.8; benutzen, um das
      Shutdown-Skript in der Jail auszuführen.</para>

    <screen>&prompt.root; <userinput>jls</userinput>
   JID  IP Address      Hostname                      Path
     3  192.168.0.10    www                           /usr/jail/www
&prompt.root; <userinput>jexec <replaceable>3</replaceable> /etc/rc.shutdown</userinput></screen>

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

  <sect1 xml: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 xml: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 <systemitem class="username">root</systemitem> als
	Vorgabe auferlegt sind.  Beachten Sie, dass es einige
	Beschränkungen gibt, die nicht verändert werden können.  Der
	Benutzer <systemitem class="username">root</systemitem> darf
	innerhalb 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 beispielsweise das Setzen des
	<varname>Securelevels</varname> für den 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>-Adresse, ihres Hostnames und
	    ihres Pfades.</para>
	</listitem>

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

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

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

      <para>Unter den zahlreichen Werkzeugen für die Administration
	von Jails ist <package>sysutils/ezjail</package> am
	vollständigsten und brauchbarsten.  Dabei handelt es sich um
	eine Sammlung von Skripten, die das &man.jail.8;-Management
	vereinfachen.  Weitere Informationen zu diesem Werkzeug finden
	Sie im <link
	  xlink:href="&url.books.handbook;/jails-ezjail.html">
	  Abschnitt über
	  <application>ezjail</application></link>.</para>
    </sect2>

    <sect2 xml:id="jails-updating">
      <title>Jails auf dem aktuellen Stand halten</title>

      <para>Jails sollten immer vom Host-System auf dem neuesten Stand
	gehalten werden, da eine Aktualisierung aus einer Jail heraus
	wahrscheinlich fehlschlägt, da in der Voreinstellung von
	&os; die Verwendung von &man.chflags.1; in einem Jail nicht
	erlaubt ist und somit der Austausch einiger Dateien verhindert
	wird.  Es ist zwar möglich, dieses Verhalten zu ändern, aber
	es wird empfohlen, &man.freebsd-update.8; zu benutzen, um die
	Jails zu aktualisieren.  Verwenden Sie <option>-b</option> mit
	dem Pfad der Jail, die Sie aktualisieren möchten.</para>

      <screen>&prompt.root; <userinput>freebsd-update -b <replaceable>/hier/ist/die/jail</replaceable> fetch</userinput>
&prompt.root; <userinput>freebsd-update -b <replaceable>/hier/ist/die/jail</replaceable> install</userinput></screen>
    </sect2>
  </sect1>

  <sect1 xml:id="jails-application">
    <info>
      <title>Mehrere Jails aktualisieren</title>

      <authorgroup>
	<author>
	  <personname>
	    <firstname>Daniel</firstname>
	    <surname>Gerzo</surname>
	  </personname>
	  <contrib>Beigetragen von </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <personname>
	    <firstname>Simon</firstname>
	    <surname>L. B. Nielsen</surname>
	  </personname>
	  <contrib>Basierend auf einer Idee von </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <personname>
	    <firstname>Ken</firstname>
	    <surname>Tom</surname>
	  </personname>
	  <contrib>Artikel geschrieben von </contrib>
	</author>
      </authorgroup>
    </info>

    <para>Die Verwaltung von mehreren Jails kann problematisch
      sein, da jede Jail bei jedem Upgrade komplett neu gebaut
      werden muss.  Dieser Prozess kann sehr zeitaufwändig sein,
      wenn eine große Anzahl von Jails erstellt oder manuell
      aktualisiert werden müssen.</para>

    <para>Dieser Abschnitt beschreibt eine Methode zur Lösung
      dieses Problems, indem so viel wie möglich zwischen Jails,
      auf sichere Art und Weise, durch den Einsatz von
      &man.mount.nullfs.8;-Mounts geteilt wird.  Dadurch werden
      Aktualisierungen erleichtert und das Verteilen von
      verschiedenen Diensten, wie <acronym>HTTP</acronym>,
      <acronym>DNS</acronym> und <acronym>SMTP</acronym>, auf
      verschiedene Jails wird attraktiver.  Außerdem bietet dieses
      Verfahren einen einfachen Weg, Jails zu erstellen, zu
      entfernen und zu aktualisieren.</para>

    <note>
      <para>Es existieren auch einfachere Lösungen, wie zum
	Beispiel <application>ezjail</application>, das einfachere
	Methoden zur Administration von Jails verwendet und daher
	nicht so anspruchsvoll ist, wie der hier beschriebene Aufbau.
	<application>ezjail</application> wird in <xref
	  linkend="jails-ezjail"/> ausführlich behandelt.</para>
    </note>

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

    <itemizedlist>
      <listitem>
	<para>Das Erstellen einer einfachen und gut verständlichen
	  Jail Struktur, die es nicht erfordert 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öglichkeiten weitgehend zu reduzieren.</para>
      </listitem>

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

    <para>Dieses Design ist darauf angewiesen, dass eine
      read-only-Hauptvorlage in jede Jail hinein gemountet wird
      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 Speichergerät sein.  Im
      folgenden Beispiel wird ein read/write
      <application>nullfs</application>-Mount genutzt.</para>

    <para>Das Layout des Dateisystems ist wie folgt:</para>

    <itemizedlist>
      <listitem>
	<para>Die Jails befinden sich unterhalb der
	  <filename>/home</filename> Partition.</para>
      </listitem>

      <listitem>
	<para>Jede Jail wird unterhalb des
	  <filename>/home/j</filename>-Verzeichnisses
	  gemountet.</para>
      </listitem>

      <listitem>
	<para><filename>/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>/home/j</filename> wird für jede
	  Jail ein leeres Verzeichnis angelegt.</para>
      </listitem>

      <listitem>
	<para>Jede Jail bekommt ein
	  <filename>/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>/home/j/skel</filename> basiert.</para>
      </listitem>

      <listitem>
	<para>Der read/write-Teilbereich jeder Jail wird in
	  <filename>/home/js</filename> erstellt.</para>
      </listitem>
    </itemizedlist>

	<!-- Insert an image or drawing here to illustrate the example. -->

    <sect2 xml:id="jails-service-jails-template">
      <title>Erstellen der Vorlage</title>

      <para>Dieser Abschnitt beschreibt die Schritte, die zum
	Erstellen der Hauptvorlage notwendig sind.</para>

      <para>Es wird empfohlen, zunächst das &os; Host-System nach
	den Anweisungen in <xref linkend="makeworld"/> auf den
	aktuellen -RELEASE-Zweig zu aktualisieren.  Darüber hinaus
	verwendet diese Vorlage <package>sysutils/cpdup</package>,
	sowie <application>portsnap</application> zum herunterladen
	der &os; Ports-Sammlung.</para>

      <procedure>
	<step>
	  <para>Zuerst erstellen wir eine Verzeichnisstruktur für das
	    read-only-Dateisystem, das die &os;-Binärdateien für die
	    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ür 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.  Vergewissern Sie
	    sich, dass die symbolischen Links an den korrekten
	    <filename>s/</filename> Positionen erstellt werden, weil
	    echte Verzeichnisse oder an falschen Positionen
	    erstellte Verzeichnisse die Installation fehlschlagen
	    lassen.</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>Dies 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>
    </sect2>

    <sect2 xml:id="jails-service-jails-creating">
      <title>Jails erstellen</title>

      <para>Die Jailvorlage kann nun verwendet werden, um die Jails
	einzurichten und in <filename>/etc/rc.conf</filename> zu
	konfigurieren.  In diesem Beispiel werden drei Jails
	erstellt: <literal>NS</literal>, <literal>MAIL</literal>
	und <literal>WWW</literal>.</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>

	  <para>Um zu verhindern, dass <application>fsck</application>
	    die <application>nullfs</application>-Mounts während des
	    Bootens überprüft oder dass
	    <application>dump</application> die Mounts sichert, müssen
	    die letzten beiden Spalten auf <literal>0</literal>
	    gesetzt werden.</para>
	</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>

	  <para>Die Variable
	    <varname>jail_<replaceable>name</replaceable>_rootdir</varname>
	    zeigt nach <filename>/usr/home</filename> statt nach
	    <filename>/home</filename>, da der physikalische Pfad
	    von <filename>/home</filename> unter &os;
	    <filename>/usr/home</filename> lautet.  Die Variable
	    <varname>jail_<replaceable>name</replaceable>_rootdir</varname>
	    darf im Pfad aber
	    <emphasis>keinen symbolischen Link</emphasis> enthalten,
	    weil die Jail ansonsten nicht gestartet werden
	    kann.</para>
	</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 mit
	    <package>sysutils/cpdup</package> die read/write-Vorlage
	    in jede Jail:</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ür den Betrieb vorbereitet.  Mounten Sie zuerst die
	    notwendigen Dateisysteme für jede Jail.  Danach starten
	    Sie die Jails:</para>

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

      <para>Die Jails sollten nun laufen.  Um zu prüfen, ob sie
	korrekt gestartet wurden, verwenden Sie
	<command>jls</command>.  Die Ausgabe sollte ähnlich der
	folgenden sein:</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> <literal>3</literal>
	durchzuführen:</para>

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

    <sect2 xml:id="jails-service-jails-upgrading">
      <title>Jails aktualisieren</title>

      <para>Das Design dieses Aufbaus bietet einen einfachen Weg,
	bestehende Jails zu aktualisieren, während die Ausfallzeiten
	minimiert werden.  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>/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><buildtarget>installworld</buildtarget> 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 können die Jails gestoppt werden:</para>

	  <screen>&prompt.root; <userinput>service jail stop</userinput></screen>
	</step>

	<step>
	  <para>Hängen Sie die originalen Dateisysteme aus, da die
	    read/write-Systeme an das read-only System
	    (<filename>/s</filename>) angeschlossen sind:</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>
	</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>service jail start</userinput></screen>
	</step>
      </procedure>

      <para>Nutzen Sie <command>jls</command> um zu prüfen, ob die
	Jails korrekt gestartet wurden.  Führen Sie innerhalb jeder
	Jail <command>mergemaster</command> aus, damit die
	Konfigurationsdateien aktualisiert werden.</para>
    </sect2>
  </sect1>

  <sect1 xml:id="jails-ezjail">
    <info>
      <title>Verwaltung von Jails mit
	<application>ezjail</application></title>

      <authorgroup>
	<author>
	  <personname>
	    <firstname>Warren</firstname>
	    <surname>Block</surname>
	  </personname>
	  <contrib>Beigetragen von </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <personname>
	    <firstname>Björn</firstname>
	    <surname>Heidotting</surname>
	  </personname>
	  <contrib>Übersetzt von </contrib>
	</author>
      </authorgroup>
    </info>

    <para>Das Erstellen und Verwalten von mehreren Jails kann schnell
      zeitaufwändig und fehleranfällig werden.  Dirk Engling's
      <application>ezjail</application> automatisiert und vereinfacht
      viele dieser Aufgaben.  Als Vorlage wird ein
      <emphasis>Basejail</emphasis> erzeugt.  Zusätzliche Jails nutzen
      &man.mount.nullfs.8; um viele Verzeichnisse aus der Basejail zu
      teilen, ohne dabei zusätzlichen Speicherplatz zu belegen.  Jedes
      weitere Jail benötigt daher nur wenige Megabyte an
      Speicherplatz, bevor die Anwendungen installiert werden.</para>

    <para>Weitere Vorteile und Merkmale werden im Detail auf der
      Webseite von <application>ezjail</application> beschrieben:
      <link
	xlink:href="https://erdgeist.org/arts/software/ezjail/"></link>.</para>

    <sect2 xml:id="jails-ezjail-install">
      <title><application>ezjail</application> installieren</title>

      <para>Für die Installation von <application>ezjail</application>
	wird zunächst eine Loopback-Schnittstelle für die Jails
	benötigt.  Anschließend kann
	<application>ezjail</application> installiert und der
	dazugehörige Dienst aktiviert werden.</para>

      <procedure xml:id="jails-ezjail-install-procedure">
	<step>
	  <para>Damit der Verkehr auf der Loopback-Schnittstelle des
	    Jails vom Host-System separiert ist, wird eine zweite
	    Loopback-Schnittstelle in
	    <filename>/etc/rc.conf</filename> erstellt:</para>

	  <programlisting>cloned_interfaces="lo1"</programlisting>

	  <para>Die zusätzliche Schnittstelle <literal>lo1</literal>
	    wird erstellt, wenn das System neu gestartet wird.  Die
	    Schnittstelle kann auch ohne Neustart manuell erstellt
	    werden:</para>

	  <screen>&prompt.root; <userinput>service netif cloneup</userinput>
Created clone interfaces: lo1.</screen>

	  <para>Jails können die Aliase dieser sekundären
	    Schnittstelle verwenden, ohne dabei das Host-System zu
	    stören.</para>

	  <para>Der Zugang zur Loopback-Adresse <systemitem
	      class="ipaddress">127.0.0.1</systemitem> wird an die
	    erste <acronym>IP</acronym>-Adresse umgeleitet, die dem
	    Jail zugewiesen ist.  Damit die Loopback-Schnittstelle des
	    Jails der neuen <literal>lo1</literal>-Schnittstelle
	    zugeordnet werden kann, muss beim Erstellen der Jail diese
	    Schnittstelle als erstes in der Liste der
	    <acronym>IP</acronym>-Adressen angegeben werden.</para>

	  <para>Teilen Sie jedem Jail eine Loopback-Adresse aus dem
	    Netzblock <systemitem
	      class="ipaddress">127.0.0.0</systemitem><systemitem
	      class="netmask">/8</systemitem> zu.</para>
	</step>

	<step>
	  <para>Installieren Sie
	    <package>sysutils/ezjail</package>:</para>

	  <screen>&prompt.root; <userinput>cd /usr/ports/sysutils/ezjail</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
	</step>

	<step>
	  <para>Aktivieren Sie <application>ezjail</application>,
	    indem Sie folgende Zeile in
	    <filename>/etc/rc.conf</filename> hinzufügen:</para>

	  <programlisting>ezjail_enable="YES"</programlisting>
	</step>

	<step>
	  <para>Der Dienst wird automatisch gestartet, wenn das System
	    bootet.  Er kann auch direkt für die aktuelle Sitzung
	    gestartet werden:</para>

	  <screen>&prompt.root; <userinput>service ezjail start</userinput></screen>
	</step>
      </procedure>
    </sect2>

    <sect2 xml:id="jails-ezjail-initialsetup">
      <title>Einrichtung</title>

      <para>Nach erfolgreicher Installation von
	<application>ezjail</application> kann die Verzeichnisstruktur
	für die Basejail erstellt und befüllt werden.  Dieser Schritt
	wird einmalig auf dem Host-System ausgeführt.</para>

      <para>In diesen beiden Beispielen wird <option>-p</option>
	verwendet, um die Ports-Sammlung mit &man.portsnap.8; in die
	Basejail herunterzuladen.  Diese Kopie kann dann von allen
	Jails gemeinsam genutzt werden.  Eine separate Kopie der
	Ports-Sammlung für die Jails ermöglicht die Isolierung der
	Ports vom Host-System.  Die <acronym>FAQ</acronym> von
	<application>ezjail</application> erklärt dies im Detail:
	<link
	  xlink:href="https://erdgeist.org/arts/software/ezjail/#FAQ"></link>.</para>

      <procedure xml:id="jails-ezjail-initialsetup-procedure">
	<step>
	  <stepalternatives>
	    <step>
	      <title>Die Jail mit &os;-RELEASE installieren</title>

	      <para>Benutzen Sie <command>install</command>, wenn das
		&os;-RELEASE für die Jail der Version auf dem
		Host-System entspricht.  Wenn beispielsweise auf dem
		Host-System &os;&nbsp;10-STABLE installiert ist, wird
		in der Jail das neueste RELEASE von &os;-10
		installiert:</para>

	      <screen>&prompt.root; <userinput>ezjail-admin install -p</userinput></screen>
	    </step>

	    <step>
	      <title>Die Jail mit <command>installworld</command>
		installieren</title>

	      <para>Mit <command>ezjail-admin update</command> kann
		die Basejail mit den Binärdateien aus dem Host-System
		befüllt werden.  Diese Dateien wurden auf dem
		Host-System mittels
		<buildtarget>buildworld</buildtarget> erzeugt.</para>

	      <para>In diesem Beispiel wird &os;&nbsp;10-STABLE aus
		den Quellen gebaut.  Die Verzeichnisse für die Jail
		wurden bereits erstellt.  Anschließend wird
		<command>installworld</command> ausgeführt, das
		<filename>/usr/obj</filename> aus dem Host-System in
		die Basejail installiert.</para>

	      <screen>&prompt.root; <userinput>ezjail-admin update -i -p</userinput></screen>

	      <para>In der Voreinstellung wird
		<filename>/usr/src</filename> des Host-Systems
		verwendet.  Ein anderes Quellverzeichnis kann durch
		die Angabe von <option>-s</option>, oder durch Setzen
		der Variable <varname>ezjail_sourcetree</varname> in
		<filename>/usr/local/etc/ezjail.conf</filename>
		definiert werden.</para>
	    </step>
	  </stepalternatives>
	</step>
      </procedure>

      <tip>
	<para>Die Ports-Sammlung der Basejail wird mit den anderen
	  Jails geteilt, jedoch werden die heruntergeladenen
	  Distfiles im jeweiligen Jail gespeichert.  In der
	  Voreinstellung werden diese Dateien in
	  <filename>/var/ports/distfiles</filename> der Jail
	  gespeichert.  Wenn die Ports gebaut werden, wird
	  <filename>/var/ports</filename> im Jail als
	  Arbeitsverzeichnis genutzt.</para>
      </tip>

      <tip>
	<para>Zum herunterladen der Pakete, für die Installation in
	  der Basejail, wird in der Voreinstellung das
	  <acronym>FTP</acronym>-Protokoll verwendet.  Firewalls und
	  Proxies können jedoch bei der
	  <acronym>FTP</acronym>-Übertragung Probleme verursachen.
	  Das <acronym>HTTP</acronym>-Protokoll arbeitet anderes und
	  vermeidet diese Probleme.  Sie können eine
	  <acronym>URL</acronym> für einen bestimmten Spiegel in
	  <filename>/usr/local/etc/ezjail.conf</filename>
	  eintragen:</para>

	<programlisting>ezjail_ftphost=http://ftp.FreeBSD.org</programlisting>

	<para>Im <xref linkend="mirrors-ftp"/> finden Sie
	  eine Liste mit Spiegeln.</para>
      </tip>
    </sect2>

    <sect2 xml:id="jails-ezjail-create">
      <title>Eine neue Jail erstellen und starten</title>

      <para>Neue Jails werden mit <command>ezjail-admin
	  create</command> erstellt.  In diesen Beispielen wird die
	<literal>lo1</literal> Loopback-Schnittstelle, wie oben
	beschrieben, verwendet.</para>

      <procedure xml:id="jails-ezjail-create-steps">
	<title>Eine neue Jail erstellen und starten</title>

	<step>
	  <para>Geben Sie bei der Erstellung der Jail einen Namen
	    und die verwendeten Loopback- und Netzwerk-Schnittstellen
	    mit den <acronym>IP</acronym>-Adressen an.  In diesem
	    Beispiel trägt die Jail den Namen
	    <literal>dnsjail</literal>.</para>

	  <screen>&prompt.root; <userinput>ezjail-admin create <replaceable>dnsjail</replaceable> '<replaceable>lo1|127.0.1.1</replaceable>,<replaceable>em0</replaceable>|<replaceable>192.168.1.50</replaceable>'</userinput></screen>

	  <tip xml:id="jails-ezjail-raw-network-sockets">
	    <para>Die meisten Netzwerkdienste laufen problemlos in
	      einer Jail.  Ein paar wenige Netzwerkdienste, vor allem
	      &man.ping.8; verwenden Netzwerk-Sockets.  Aus
	      Sicherheitsgründen werden Netzwerk-Sockets innerhalb der
	      Jails deaktiviert, so dass Dienste, die diese Sockets
	      benötigten, nicht funktionieren werden.  Gelegentlich
	      benötigt ein Jail jedoch den Zugriff auf Raw-Sockets.
	      Beispielsweise verwenden Netzwerk-Monitoring-Anwendungen
	      &man.ping.8;, um die Verfügbarkeit von anderen Rechnern
	      zu überprüfen.  Sollten diese Sockets tatsächlich
	      benötigt werden, können sie durch einen Eintrag in der
	      Konfigurationsdatei von
	      <application>ezjail</application>,
	      <filename>/usr/local/etc/<replaceable>jailname</replaceable></filename>,
	      für einzelne Jails aktiviert werden.  Bearbeiten Sie den
	      Eintrag <literal>parameters</literal>:</para>

	    <programlisting>export jail_<replaceable>jailname</replaceable>_parameters="allow.raw_sockets=1"</programlisting>

	    <para>Aktivieren Sie keine Netzwerk-Sockets, solange
	      die Dienste im Jail sie nicht tatsächlich
	      benötigen.</para>
	  </tip>
	</step>

	<step>
	  <para>Starten Sie die Jail:</para>

	  <screen>&prompt.root; <userinput>ezjail-admin start <replaceable>dnsjail</replaceable></userinput></screen>
	</step>

	<step>
	  <para>Starten Sie eine Konsole in der Jail:</para>

	  <screen>&prompt.root; <userinput>ezjail-admin console <replaceable>dnsjail</replaceable></userinput></screen>
	</step>
      </procedure>

      <para>Die Jail ist jetzt in Betrieb und die zusätzliche
	Konfiguration kann nun abgeschlossen werden.  Typische
	Einstellungen an dieser Stelle sind:</para>

      <procedure>
	<step>
	  <title>Das <systemitem
	      class="username">root</systemitem>-Passwort
	    setzen</title>

	  <para>Verbinden Sie sich mit der Jail und setzen Sie das
	    Passwort für den Benutzer
	    <systemitem class="username">root</systemitem>:</para>

	  <screen>&prompt.root; <userinput>ezjail-admin console <replaceable>dnsjail</replaceable></userinput>
&prompt.root; <userinput>passwd</userinput>
Changing local password for root
New Password:
Retype New Password:</screen>
	</step>

	<step>
	  <title>Konfiguration der Zeitzone</title>

	  <para>Die Zeitzone kann innerhalb der Jail mit
	    &man.tzsetup.8; gesetzt werden.  Um störende
	    Fehlermeldungen zu vermeiden, kann der Eintrag
	    &man.adjkerntz.8; in <filename>/etc/crontab</filename>
	    auskommentiert werden.  Dieser Job versucht die
	    Uhr des Rechners zu aktualisieren, was jedoch in einem
	    Jail fehlschlägt, da die Jail nicht auf diese Hardware
	    zugreifen darf.</para>
	</step>

	<step>
	  <title><acronym>DNS</acronym>-Server</title>

	  <para>Tragen Sie die Zeilen für die Nameserver der Domäne
	    in <filename>/etc/resolv.conf</filename> ein, damit die
	    Namensauflösung in der Jail funktioniert.</para>
	</step>

	<step>
	  <title><filename>/etc/hosts</filename> anpassen</title>

	  <para>Ändern Sie die Adresse und fügen Sie den Namen der
	    Jail zu den <literal>localhost</literal>-Einträgen in
	    <filename>/etc/hosts</filename> hinzu.</para>
	</step>

	<step>
	  <title><filename>/etc/rc.conf</filename>
	    konfigurieren</title>

	  <para>Tragen Sie Konfigurationseinstellungen in
	    <filename>/etc/rc.conf</filename> ein.  Der Rechnername
	    und die <acronym>IP</acronym>-Adresse werden nicht
	    eingestellt, da diese Werte bereits durch die
	    Jail-Konfiguration zur Verfügung gestellt werden.</para>
	</step>
      </procedure>

      <para>Nach der Konfiguration der Jail können die Anwendungen,
	für die die Jail erstellt wurde, installiert werden.</para>

      <tip>
	<para>Einige Ports müssen mit speziellen Optionen gebaut
	  werden, damit sie in der Jail verwendet werden können.  Zum
	  Beispiel haben die Netzwerk-Monitoring-Pakete
	  <package>net-mgmt/nagios-plugins</package> und
	  <package>net-mgmt/monitoring-plugins</package> eine Option
	  <literal>JAIL</literal>, die aktiviert werden muss, damit
	  diese Werkzeuge innerhalb einer Jail funktionieren.</para>
      </tip>
    </sect2>

    <sect2 xml:id="jails-ezjail-update">
      <title>Jails aktualisieren</title>

      <sect3 xml:id="jails-ezjail-update-os">
	<title>Das Betriebssystem aktualisieren</title>

	<para>Da das Basissystem der Basejail von den anderen Jails
	  gemeinsam genutzt wird, werden bei einem Update der Basejail
	  automatisch alle anderen Jails aktualisiert.  Die
	  Aktualisierung kann entweder über den Quellcode oder über
	  binäre Updates erfolgen.</para>

	<para>Um das Basissystem auf dem Host-System zu bauen und in
	  der Basejail zu installieren, geben Sie folgendes
	  ein:</para>

	<screen>&prompt.root; <userinput>ezjail-admin update -b</userinput></screen>

	<para>Wenn das Basissystem bereits auf dem Host-System gebaut
	  wurde, kann es in der Basejail installiert werden:</para>

	<screen>&prompt.root; <userinput>ezjail-admin update -i</userinput></screen>

	<para>Binär-Updates verwenden &man.freebsd-update.8;.  Das
	  Update unterliegt dabei den gleichen Einschränkungen, als
	  wenn &man.freebsd-update.8; direkt ausgeführt würde.  Vor
	  allem stehen mit dieser Methode nur -RELEASE Versionen von
	  &os; zur Verfügung.</para>

	<para>Aktualisieren Sie die Basejail auf die neueste
	  &os;-Version des Host-Systems.  Zum Beispiel von
	  RELEASE-p1 auf RELEASE-p2.</para>

	<screen>&prompt.root; <userinput>ezjail-admin update -u</userinput></screen>

	<para>Damit das Basejail aktualisiert werden kann, muss
	  zunächst das Host-System, wie in <xref
	    linkend="freebsdupdate-upgrade"/> beschrieben,
	  aktualisiert werden.  Sobald das Host-System aktualisiert
	  und neu gestartet wurde, kann die Basejail aktualisiert
	  werden.  Da &man.freebsd-update.8; keine Möglichkeit
	  besitzt, die derzeit installierte Version der Basejail zu
	  bestimmen, muss die ursprüngliche Version beim Aufruf mit
	  angegeben werden.  Benutzen Sie &man.file.1; um die
	  ursprüngliche Version der Basejail zu bestimmen:</para>

	<screen>&prompt.root; <userinput>file /usr/jails/basejail/bin/sh</userinput>
/usr/jails/basejail/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 9.3, stripped</screen>

	<para>Nutzen Sie diese Information, um die Aktualisierung von
	  <literal>9.3-RELEASE</literal> auf die aktuelle Version des
	  Host-Systems durchzuführen:</para>

	<screen>&prompt.root; <userinput>ezjail-admin update -U -s <replaceable>9.3-RELEASE</replaceable></userinput></screen>

	<para>Nachdem die Basejail aktualisiert ist, muss in jeder
	  Jail &man.mergemaster.8; ausgeführt werden, um die
	  Konfigurationsdateien zu aktualisieren.</para>

	<para>Wie &man.mergemaster.8; verwendet wird, hängt stark vom
	  Zweck und Vertrauenswürdigkeit der Jail ab.  Wenn die
	  Dienste oder Benutzer nicht vertrauenswürdig sind, dann
	  sollte &man.mergemaster.8; nur innerhalb der Jail ausgeführt
	  werden:</para>

	<example xml:id="jails-ezjail-update-mergemaster-untrusted">
	  <title>&man.mergemaster.8; in einer nicht vertrauenswürdigen
	    Jail ausführen</title>

	  <para>Entfernen Sie die Verknüpfung von
	    <filename>/usr/src</filename> des Jails zur Basejail und
	    erstellen Sie ein neues <filename>/usr/src</filename> als
	    Mountpunkt für die Jail.  Hängen Sie
	    <filename>/usr/src</filename> vom Host-System
	    schreibgeschützt in den Mountpunkt für die Jail
	    ein:</para>

	  <screen>&prompt.root; <userinput>rm /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput>
&prompt.root; <userinput>mkdir /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput>
&prompt.root; <userinput>mount -t nullfs -o ro /usr/src /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput></screen>

	  <para>Öffnen Sie eine Konsole in der Jail:</para>

	  <screen>&prompt.root; <userinput>ezjail-admin console <replaceable>jailname</replaceable></userinput></screen>

	  <para>Innerhalb der Jail führen Sie dann &man.mergemaster.8;
	    aus.  Danach verlassen Sie die Konsole:</para>

	  <screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>mergemaster -U</userinput>
&prompt.root; <userinput>exit</userinput></screen>

	  <para>Abschließend können Sie <filename>/usr/src</filename>
	    aus der Jail aushängen:</para>

	  <screen>&prompt.root; <userinput>umount /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput></screen>
	</example>

	<example xml:id="jails-ezjail-update-mergemaster-trusted">
	  <title>&man.mergemaster.8; in einer vertrauenswürdigen Jail
	    ausführen</title>

	  <para>Wenn den Benutzern und den Diensten in der Jail
	    vertraut wird, kann &man.mergemaster.8; auf dem
	    Host-System ausgeführt werden:</para>

	  <screen>&prompt.root; <userinput>mergemaster -U -D /usr/jails/<replaceable>jailname</replaceable></userinput></screen>
	</example>

	<tip>
	  <para>Nach einem größeren Versionsupdate empfiehlt
	    <package>sysutils/ezjail</package>, sicherzustellen,
	    dass <command>pkg</command> die richtige Version hat.
	    Geben Sie dazu den folgenden Befehl ein, um auf die
	    entsprechende Version zu aktualisieren:</para>

	  <screen>&prompt.root; <userinput>pkg-static upgrade -f pkg</userinput></screen>
	</tip>
      </sect3>

      <sect3 xml:id="jails-ezjail-update-ports">
	<title>Ports aktualisieren</title>

	<para>Die Ports-Sammlung der Basejail wird von den anderen
	  Jails gemeinsam genutzt.  Somit genügt es, die
	  Ports-Sammlung in der Basejail zu aktualisieren.</para>

	<para>Die Ports-Sammlung der Basejail wird mit
	  &man.portsnap.8; aktualisiert:</para>

	<screen>&prompt.root; <userinput>ezjail-admin update -P</userinput></screen>
      </sect3>
    </sect2>

    <sect2 xml:id="jails-ezjail-control">
      <title>Jails verwalten</title>

      <sect3 xml:id="jail-ezjail-control-stop-start">
	<title>Jails starten und stoppen</title>

	<para><application>ezjail</application> startet automatisch
	  alle Jails, wenn das System hochfährt.  Jails können auch
	  manuell mit <command>stop</command> und
	  <command>start</command> gestoppt und neu gestartet
	  werden:</para>

	<screen>&prompt.root; <userinput>ezjail-admin stop <replaceable>sambajail</replaceable></userinput>
Stopping jails: sambajail</screen>

	<para>In der Voreinstellung werden die Jails automatisch
	  gestartet, wenn das Host-System hochfährt.  Der automatische
	  Start kann mit <command>config</command> deaktiviert
	  werden:</para>

	<screen>&prompt.root; <userinput>ezjail-admin config -r norun <replaceable>seldomjail</replaceable></userinput></screen>

	<para>Diese Einstellung wird nach einem Neustart des
	  Host-Systems aktiviert.  Eine Jail, die bereits
	  läuft, wird hiermit nicht gestoppt.</para>

	<para>Der automatische Start kann auch aktiviert
	  werden:</para>

	<screen>&prompt.root; <userinput>ezjail-admin config -r run <replaceable>oftenjail</replaceable></userinput></screen>
      </sect3>

      <sect3 xml:id="jails-ezjail-control-backup">
	<title>Jails archivieren und wiederherstellen</title>

	<para>Benutzen Sie <command>archive</command> um ein
	  <filename>.tar.gz</filename>-Archiv einer Jail zu erstellen.
	  Der Dateiname wird aus dem Namen der Jail und dem aktuellen
	  Datum zusammengesetzt.  Archivdateien werden in
	  <filename>/usr/jails/ezjail_archives</filename> abgelegt.
	  Ein alternatives Verzeichnis für die Ablage kann in der
	  Variable <varname>ezjail_archivedir</varname> der
	  Konfigurationsdatei definiert werden.</para>

	<para>Die Archivdatei kann an anderer Stelle als Sicherung
	  gespeichert werden, oder eine andere Jail kann daraus
	  mit <command>restore</command> wiederhergestellt werden.
	  Eine neue Jail kann auch aus dem Archiv erstellt werden, was
	  eine bequeme Möglichkeit bietet, bestehende Jails zu
	  klonen.</para>

	<para>Die Jail <literal>wwwserver</literal> stoppen und
	  archivieren:</para>

	<screen>&prompt.root; <userinput>ezjail-admin stop <replaceable>wwwserver</replaceable></userinput>
Stopping jails: wwwserver.
&prompt.root; <userinput>ezjail-admin archive <replaceable>wwwserver</replaceable></userinput>
&prompt.root; <userinput>ls /usr/jails/ezjail-archives/</userinput>
wwwserver-201407271153.13.tar.gz</screen>

	<para>Erstellen Sie aus dem eben erzeugten Archiv eine neue
	  Jail namens <literal>wwwserver-clone</literal>.  Verwenden
	  Sie die Schnittstelle <filename>em1</filename> und weisen
	  Sie eine neue <acronym>IP</acronym>-Adresse zu, um einen
	  Konflikt mit dem Original zu vermeiden:</para>

	<screen>&prompt.root; <userinput>ezjail-admin create -a /usr/jails/ezjail_archives/wwwserver-201407271153.13.tar.gz <replaceable>wwwserver-clone</replaceable> 'lo1|127.0.3.1,em1|192.168.1.51'</userinput></screen>
      </sect3>
    </sect2>

    <sect2 xml:id="jails-ezjail-example-bind">
      <title>Vollständiges Beispiel: <application>BIND</application>
	in einer Jail</title>

      <para>Einen <application>BIND</application>
	<acronym>DNS</acronym>-Server innerhalb einer Jail zu
	betreiben erhöht die Sicherheit, da der Dienst isoliert
	wird.  Dieses Beispiel erstellt einen einfachen
	<foreignphrase>caching-only</foreignphrase> Nameserver.</para>

      <itemizedlist>
	<listitem>
	  <para>Die Jail bekommt den Namen
	    <literal>dns1</literal>.</para>
	</listitem>

	<listitem>
	  <para>Die Jail erhält die <acronym>IP</acronym>-Adresse
	    <literal>192.168.1.240</literal> auf der Schnittstelle
	    <literal>re0</literal> des Host-Systems.</para>
	</listitem>

	<listitem>
	  <para>Die Upstream-<acronym>DNS</acronym>-Server des
	    <acronym>ISP</acronym>s lauten
	    <literal>10.0.0.62</literal> und
	    <literal>10.0.0.61</literal>.</para>
	</listitem>

	<listitem>
	  <para>Die Basejail wurde bereits erstellt und die
	    Ports-Sammlung installiert, wie in <xref
	      linkend="jails-ezjail-initialsetup"/>
	    beschrieben.</para>
	</listitem>
      </itemizedlist>

      <example xml:id="jails-ezjail-example-bind-steps">
	<title><application>BIND</application> in einer Jail laufen
	  lassen</title>

	<para>Erstellen Sie eine geklonte Loopback-Schnittstelle durch
	  einen Eintrag in <filename>/etc/rc.conf</filename>:</para>

	<programlisting>cloned_interfaces="lo1"</programlisting>

	<para>Erzeugen Sie jetzt die Loopback-Schnittstelle:</para>

	<screen>&prompt.root; <userinput>service netif cloneup</userinput>
Created clone interface: lo1</screen>

	<para>Erstellen Sie die Jail:</para>

	<screen>&prompt.root; <userinput>ezjail-admin create dns1 'lo1|127.0.2.1,re0|192.168.1.240'</userinput></screen>

	<para>Starten Sie die Jail, verbinden Sie sich mit der Konsole
	  und führen Sie die grundlegende Konfiguration durch:</para>

	<screen>&prompt.root; <userinput>ezjail-admin start dns1</userinput>
&prompt.root; <userinput>ezjail-admin console dns1</userinput>
&prompt.root; <userinput>passwd</userinput>
Changing local password for root
New Password:
Retype New Password:
&prompt.root; <userinput>tzsetup</userinput>
&prompt.root; <userinput>sed -i .bak -e '/adjkerntz/ s/^/#/' /etc/crontab</userinput>
&prompt.root; <userinput>sed -i .bak -e 's/127.0.0.1/127.0.2.1/g; s/localhost.my.domain/dns1.my.domain dns1/' /etc/hosts</userinput></screen>

	<para>Setzen Sie vorübergehend die
	  Upstream-<acronym>DNS</acronym>-Server in
	  <filename>/etc/resolv.conf</filename>, damit die
	  Ports-Sammlung heruntergeladen werden kann:</para>

	<programlisting>nameserver 10.0.0.62
nameserver 10.0.0.62</programlisting>

	<para>Immer noch in der Konsole der Jail, installieren Sie
	  <package>dns/bind99</package>.</para>

	<screen>&prompt.root; <userinput>make -C /usr/ports/dns/bind99 install clean</userinput></screen>

	<para>Konfigurieren Sie den Nameserver in
	  <filename>/usr/local/etc/namedb/named.conf</filename>.</para>

	<para>Erstellen Sie eine Zugriffskontrollliste
	  (<acronym>ACL</acronym>) der Adressen und Netzwerke, die
	  <acronym>DNS</acronym>-Anfragen an diesen Nameserver senden
	  dürfen.  Diese Sektion wird vor der Sektion
	  <literal>options</literal> hinzugefügt, die sich bereits in
	  der Datei befindet:</para>

	<programlisting>...
// or cause huge amounts of useless Internet traffic.

acl "trusted" {
	192.168.1.0/24;
	localhost;
	localnets;
};

options {
...</programlisting>

	<para>Verwenden Sie die <acronym>IP</acronym>-Adresse der
	  Jail in der Direktive <literal>listen-on</literal>, um
	  <acronym>DNS</acronym>-Anfragen von anderen Rechnern aus
	  dem Netzwerk zu akzeptieren:</para>

	<programlisting>	listen-on	{ 192.168.1.240; };</programlisting>

	<para>Entfernen Sie die Kommentarzeichen <literal>/*</literal>
	  und <literal>*/</literal>.  Tragen Sie die
	  <acronym>IP</acronym>-Adressen der
	  Upstream-<acronym>DNS</acronym>-Server ein.  Unmittelbar
	  nach der Sektion <literal>forwarders</literal> fügen Sie
	  Verweise auf die bereits definierten <acronym>ACL</acronym>s
	  ein:</para>

	<programlisting>	forwarders {
		10.0.0.62;
		10.0.0.61;
	};

	allow-query       { any; };
	allow-recursion   { trusted; };
	allow-query-cache { trusted; };</programlisting>

	<para>Aktivieren Sie den Dienst in
	  <filename>/etc/rc.conf</filename>:</para>

	<programlisting>named_enable="YES"</programlisting>

	<para>Starten und testen Sie den Nameserver:</para>

	<screen>&prompt.root; <userinput>service named start</userinput>
wrote key file "/usr/local/etc/namedb/rndc.key"
Starting named.
&prompt.root; <userinput>/usr/local/bin/dig @192.168.1.240 freebsd.org</userinput></screen>

	<para>Beinhaltet die Antwort</para>

	<screen>;; Got answer;</screen>

	<para>dann funktioniert der Nameserver.  Eine längere
	  Verzögerung, gefolgt von der Antwort</para>

	<screen>;; connection timed out; no servers could be reached</screen>

	<para>weist auf ein Problem hin.  Überprüfen Sie die
	  Konfigurationseinstellungen und stellen Sie sicher, dass
	  alle lokalen Firewalls den <acronym>DNS</acronym>-Zugriff
	  auf die Upstream-<acronym>DNS</acronym>-Server
	  erlauben.</para>

	<para>Wie auch jeder andere lokale Rechner, kann der
	  <acronym>DNS</acronym>-Server Anfragen für Namensauflösung
	  an sich selbst stellen.  Tragen Sie die Adresse des
	  <acronym>DNS</acronym>-Servers in die
	  <filename>/etc/resolv.conf</filename> der
	  Client-Rechner:</para>

	<programlisting>nameserver 192.168.1.240</programlisting>

	<para>Ein lokaler <acronym>DHCP</acronym>-Server kann die
	  Adresse eines lokalen <acronym>DNS</acronym>-Servers
	  automatisch für alle <acronym>DHCP</acronym>-Clients zur
	  Verfügung stellen.</para>
      </example>
    </sect2>
  </sect1>
</chapter>