aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/jails/chapter.xml
diff options
context:
space:
mode:
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/jails/chapter.xml')
-rw-r--r--de_DE.ISO8859-1/books/handbook/jails/chapter.xml1832
1 files changed, 0 insertions, 1832 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/jails/chapter.xml b/de_DE.ISO8859-1/books/handbook/jails/chapter.xml
deleted file mode 100644
index b32bb4f501..0000000000
--- a/de_DE.ISO8859-1/books/handbook/jails/chapter.xml
+++ /dev/null
@@ -1,1832 +0,0 @@
-<?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: r54360
--->
-<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>
-
- <para>Um die Jail auf das neueste Patch-Release der bereits
- installierten &os;-Version zu aktualisieren, führen Sie auf
- dem Host die folgenden Befehle aus:</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>
-
- <para>Um die Jail auf eine neue Haupt- oder Unterversion zu
- aktualisieren, wird zunächst eine Aktualisierung des
- Host-Systems durchgeführt, wie in <xref
- linkend="freebsdupdate-upgrade"/> beschrieben. Nachdem der
- Host aktualisiert und neu gestartet wurde, kann die Jail
- aktualisiert werden. Führen Sie folgende Befehle auf dem
- Host aus, um von 12.0-RELEASE auf 12.1-RELEASE zu
- aktualisieren:</para>
-
- <screen>&prompt.root; <userinput>freebsd-update -b <replaceable>/hier/ist/die/jail</replaceable> --currently-running <replaceable>12.0-RELEASE</replaceable> -r <replaceable>12.1-RELEASE</replaceable> upgrade</userinput>
-&prompt.root; <userinput>freebsd-update -b <replaceable>/hier/ist/die/jail</replaceable> install</userinput>
-&prompt.root; <userinput>service jail restart <replaceable>myjail</replaceable></userinput>
-&prompt.root; <userinput>freebsd-update -b <replaceable>/hier/ist/die/jail</replaceable> install</userinput></screen>
-
- <para>Wenn es sich um eine Aktualisierung einer Hauptversion
- handelte, installieren Sie alle installierten Pakete neu und
- starten Sie die Jail erneut. Dies ist notwendig, da sich die
- ABI-Version bei einer Aktualisierung zwischen Hauptversionen
- von &os; ändert. Führen Sie folgende Befehle auf dem
- Host-System aus:</para>
-
- <screen>&prompt.root; <userinput>pkg -j <replaceable>mymail</replaceable> upgrade -f</userinput>
-&prompt.root; <userinput>service jail restart <replaceable>myjail</replaceable></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>