aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/jails/chapter.sgml')
-rw-r--r--de_DE.ISO8859-1/books/handbook/jails/chapter.sgml1085
1 files changed, 0 insertions, 1085 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml b/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml
deleted file mode 100644
index af6e91bbef..0000000000
--- a/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml
+++ /dev/null
@@ -1,1085 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
-<!--
- The FreeBSD Documentation Project
- The FreeBSD German Documentation Project
-
- $FreeBSD$
- $FreeBSDde: de-docproj/books/handbook/jails/chapter.sgml,v 1.23 2011/05/25 20:42:25 jkois Exp $
- basiert auf: 1.27
--->
-<chapter id="jails">
- <chapterinfo>
- <authorgroup>
- <author>
- <firstname>Matteo</firstname>
- <surname>Riondato</surname>
- <contrib>Beigetragen von </contrib>
- </author>
- </authorgroup>
- <authorgroup>
- <author>
- <firstname>Oliver</firstname>
- <surname>Peter</surname>
- <contrib>Übersetzt von </contrib>
- </author>
- <author>
- <firstname>Dirk</firstname>
- <surname>Arlt</surname>
- </author>
- <author>
- <firstname>Johann</firstname>
- <surname>Kois</surname>
- </author>
- </authorgroup>
- </chapterinfo>
-
- <title>Jails</title>
-
- <indexterm><primary>jails</primary></indexterm>
-
- <sect1 id="jails-synopsis">
- <title>Übersicht</title>
-
- <para>Dieses Kapitel erklärt, was &os;-Jails sind und wie man sie
- einsetzt. Jails, manchmal als Ersatz für
- <emphasis>chroot-Umgebungen</emphasis> bezeichnet, sind ein sehr
- mächtiges Werkzeug für Systemadministratoren, jedoch kann
- deren grundlegende Verwendung auch für fortgeschrittene Anwender
- nützlich sein.</para>
-
- <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie</para>
-
- <itemizedlist>
- <listitem>
- <para>Wissen, was eine Jail ist und welche Verwendungszwecke
- es dafür unter &os; gibt.</para>
- </listitem>
-
- <listitem>
- <para>Wissen, wie man eine Jail erstellt, startet und
- und anhält.</para>
- </listitem>
-
- <listitem>
- <para>Die Grundlagen der Jail-Administration (sowohl
- innerhalb als auch ausserhalb des Jails) kennen.</para>
- </listitem>
- </itemizedlist>
-
- <para>Weitere nützliche Informationen über Jails
- sind beispielsweise in folgenden Quellen zu finden:</para>
-
- <itemizedlist>
- <listitem>
- <para>Der &man.jail.8; Manualpage. Diese umfassende Referenz
- beschreibt, wie man unter &os; eine Jail startet, anhält
- und kontrolliert.</para>
- </listitem>
-
- <listitem>
- <para>Den Mailinglisten und deren Archive. Die Archive der
- Mailingliste &a.questions; und anderen Mailinglisten, welche
- vom &a.mailman.lists; bereitgestellt werden, beinhalten bereits
- umfangreiche Informationen zu Jails. Daher ist es sinnvoll,
- bei Problemen mit Jails zuerst die Archive der Mailinglisten
- zu durchsuchen, bevor Sie eine neue Anfrage auf der
- Mailingliste &a.questions.name; stellen.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="jails-terms">
- <title>Jails - Definitionen</title>
-
- <para>Um die für den Einsatz von Jails benötigten
- FreeBSD-Funktionen, deren Interna sowie die Art und Weise, mit der
- diese mit anderen Teilen des Betriebssystems interagieren, zu
- erläutern, werden in diesem Kapitel folgende Definitionen
- verwendet:</para>
-
- <variablelist>
- <varlistentry>
- <term>&man.chroot.8; (-Befehl)</term>
- <listitem>
- <para>Ein Werkzeug, das den &os;-Systemaufruf &man.chroot.2;
- verwendet, um das Wurzelverzeichnis eines Prozesses und all
- seiner Nachkömmlinge zu ändern.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&man.chroot.2; (-Umgebung)</term>
- <listitem>
- <para>Die Umgebung eines Prozesses, der in einem
- <quote>chroot</quote> läuft. Diese beinhaltet
- Ressourcen, wie zum Beispiel sichtbare Abschnitte
- des Dateisystems, verfügbare Benutzer- und
- Gruppenkennungen, Netzwerkschnittstellen und weitere
- IPC-Mechanismen und so weiter.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&man.jail.8; (-Befehl)</term>
- <listitem>
- <para>Das Systemadministrationswerkzeug, welches es erlaubt,
- Prozesse innerhalb der Jail-Umgebung zu starten.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Host (-Benutzer, -Prozess, -System)</term>
- <listitem>
- <para>Das verwaltende System einer Jail-Umgebung. Das
- Host-System hat Zugriff auf alle verfügbaren
- Hardwareressourcen und kann sowohl innerhalb als auch
- ausserhalb der Jail-Umgebung Prozesse steuern. Einer der
- wichtigsten Unterschiede des Host-System einer Jails ist,
- dass die Einschränkungen, welche für die
- Superuser-Prozesse innerhalb eines Jails gelten, nicht
- für die Prozesse des Host-Systems gelten.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Gast (-Benutzer, -Prozess, -System)</term>
- <listitem>
- <para>Ein Prozess, ein Benutzer oder eine andere Instanz,
- deren Zugriff durch eine &os;-Jail eingeschränkt
- ist.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <sect1 id="jails-intro">
- <title>Einführung</title>
-
- <para>Da die Systemadministration oft eine schwierige Aufgabe ist,
- wurden viele mächtige Werkzeuge entwickelt, die
- Administratoren bei Installation, Konfiguration und Wartung ihrer
- Systeme unterstützen sollen. Eine wichtige Aufgabe eines
- Administrators ist es, Systeme so abzusichern, dass es im
- regulären Betrieb zu keinen Sicherheitsverstößen
- kommt.</para>
-
- <para>Eines der Werkzeuge, mit dem die Sicherheit eines &os;-Systems
- verbessert werden kann, sind Jails. Jails wurden schon in
- &os;&nbsp;4.X von &a.phk; eingeführt, wurden jedoch mit
- &os;&nbsp;5.X stark verbessert, sodass sie inzwischen zu einem
- mächtigen und flexiblen Subsystem herangereift sind. Trotzdem
- geht die Entwicklung nach wie vor weiter. Wichtige Ziele sind
- derzeit: Bessere Zweckmäßigkeit, Leistung,
- Ausfallsicherheit und allgemeine Sicherheit.</para>
-
- <sect2 id="jails-what">
- <title>Was ist eine Jail?</title>
-
- <para>BSD-ähnliche Betriebssysteme besitzen seit den Zeiten
- von 4.2BSD &man.chroot.2;. Das Werkzeug &man.chroot.2; kann dazu
- benutzt werden, das root-Verzeichnis einer Reihe von Prozessen
- zu ändern, um so eine seperate sichere Umgebung (abgeschnitten
- vom Rest des Systems) zu schaffen. Prozesse, die in einer
- chroot-Umgebung erstellt wurden, können nicht auf Dateien
- oder Ressourcen zugreifen, die sich ausserhalb der Umgebung
- befinden. Dadurch ist es einem kompromittierten Dienst nicht
- möglich, das gesamte System zu kompromittieren.
- &man.chroot.8; eignet sich für einfache Aufgaben, die keine
- flexiblen, komplexen oder fortgeschrittenen Funktionen
- benötigen. Obwohl seit der Entwicklung des chroot-Konzepts
- zahlreiche Sicherheitslöcher geschlossen wurden, die es
- einem Prozess erlauben konnten, aus einer Jail auszubrechen,
- war seit langer Zeit klar, dass &man.chroot.2; nicht die ideale
- Lösung ist, einen Dienst sicher zu machen.</para>
-
- <para>Dies ist einer der Hauptgründe, warum
- <emphasis>Jails</emphasis> entwickelt wurden.</para>
-
- <para>Jails setzen auf dem traditionellen &man.chroot.2;-Konzept
- auf und verbessern es auf unterschiedlichste Art und Weise. In
- einer traditionellen &man.chroot.2;-Umgebung sind Prozesse auf
- den Bereich des Dateisystems beschränkt, auf den sie
- zugreifen können. Der Rest der Systemressourcen (wie zum
- Beispiel eine Reihe von Systembenutzern, die laufenden Prozesse
- oder das Netzwerk-Subsystem) teilen sich die chroot-Prozesse mit
- dem Host-System. Jails dehnen dieses Modell nicht nur auf die
- Virtualisierung des Zugriffs auf das Dateisystem, sondern auch
- auf eine Reihe von Benutzern, das Netzwerk-Subsystem des
- &os;-Kernels und weitere Bereiche aus. Eine ausführlichere
- Übersicht der ausgefeilten Bedienelemente zur Konfiguration
- einer Jail-Umgebung finden Sie im Abschnitt <xref
- linkend="jails-tuning"/> des Handbuchs.</para>
-
- <para>Eine Jail zeichnet sich durch folgende Merkmale aus:</para>
-
- <itemizedlist>
- <listitem>
- <para>Einen Unterverzeichnisbaum, der die Jail enthält.
- Einem Prozess, der innerhalb der Jail läuft, ist es
- nicht mehr möglich, aus diesem auszubrechen. Von
- der traditionellen &man.chroot.2;-Umgebung bekannte
- Sicherheitsprobleme existieren bei &os;-Jails nicht
- mehr.</para>
- </listitem>
-
- <listitem>
- <para>Einen Hostname, der innerhalb der Jail verwendet wird.
- Jails werden vor allem dazu verwendet, Netzwerkdienste
- anzubieten, daher ist es für Systemadministratoren
- von großem Nutzen, dass jede Jail einen beschreibenden
- Hostname haben kann.</para>
- </listitem>
-
- <listitem>
- <para>Eine <acronym>IP</acronym> Adresse, die der Jail
- zugewiesen wird und nicht verändert werden kann,
- solange das Jail läuft. Die IP-Adresse einer Jails
- ist üblicherweise ein Adress-Alias auf eine
- existierende Netzwerkschnittstelle. Dies ist jedoch
- nicht zwingend erforderlich.</para>
- </listitem>
-
- <listitem>
- <para>Einen Befehl (genauer den Pfad einer ausführbaren
- Datei) der innerhalb der Jail ausgeführt werden soll.
- Dieser Pfad wird relativ zum root-Verzeichnis einer
- Jail-Umgebung angegeben und kann sehr unterschiedlich
- aussehen (je nachdem, wie die Jail-Umgebung konfiguriert
- wurde).</para>
- </listitem>
- </itemizedlist>
-
- <para>Unabhängig davon können Jails eine Reihe eigener
- Benutzer und einen eigenen Benutzer <username>root</username>
- haben. Selbstverständlich sind die Rechte des Benutzers
- <username>root</username> nur auf die Jail-Umgebung
- beschränkt. Aus der Sicht des Host-Systems ist der
- Benutzer <username>root</username> der Jail-Umgebung kein
- allmächtiger Benutzer, da der Benutzer
- <username>root</username> der Jail-Umgebung nicht dazu
- berechtigt ist, kritische Operationen am System ausserhalb der
- angebundenen &man.jail.8;-Umgebung durchzuführen.
- Weitere Informationen über die Einsatzmöglichkeiten
- und Beschränkungen des Benutzers <username>root</username>
- werden im Abschnitt <xref linkend="jails-tuning"/> des
- Handbuchs besprochen.</para>
- </sect2>
- </sect1>
-
- <sect1 id="jails-build">
- <title>Einrichtung und Verwaltung von Jails</title>
-
- <para>Einige Administratoren unterscheiden zwei verschiedene
- Jail-Arten: <quote>Komplette</quote> Jails, die ein echtes
- &os; darstellen und Jails für einen bestimmten
- <quote>Dienst</quote>, die nur einer bestimmten Anwendung
- oder einem Dienst (der möglicherweise mit besonderen
- Privilegien laufen soll) gewidmet sind. Dies ist aber nur
- eine konzeptuelle Unterscheidung, die Einrichtung einer
- Jail bleibt davon gänzlich unberührt.</para>
-
- <screen>&prompt.root; <userinput>setenv D <replaceable>/hier/ist/die/jail</replaceable></userinput>
-&prompt.root; <userinput>mkdir -p $D</userinput> <co id="jailpath"/>
-&prompt.root; <userinput>cd /usr/src</userinput>
-&prompt.root; <userinput>make buildworld</userinput> <co id="jailbuildworld"/>
-&prompt.root; <userinput>make installworld DESTDIR=$D</userinput> <co id="jailinstallworld"/>
-&prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co id="jaildistrib"/>
-&prompt.root; <userinput>mount -t devfs devfs $D/dev</userinput> <co id="jaildevfs"/></screen>
-
- <calloutlist>
- <callout arearefs="jailpath">
- <para>Das Festlegen des Installationsorts für das Jail
- eignet sich am besten als Startpunkt. Hier wird sich die
- Jail innerhalb des Host-Dateisystems befinden. Eine gute
- Möglichkeit wäre etwa <filename
- class="directory">/usr/jail/<replaceable>name_der_jail</replaceable></filename>,
- wobei <replaceable>name_der_jail</replaceable> den Hostname
- darstellt, über den die Jail identifiziert werden
- soll. Das Dateisystem unterhalb von <filename
- class="directory">/usr/</filename> stellt normalerweise
- aussreichend Platz für eine Jail zur Verfügung
- (bedenken Sie, dass eine <quote>komplette</quote> Jail
- ein Replikat einer jeden Datei der Standardinstallation des
- &os;-Basissystems enthält.</para>
- </callout>
-
- <callout arearefs="jailbuildworld">
- <para>Wenn Sie bereits ihre Systemanwendungen mittels
- <command>make world</command> oder <command>make buildworld</command>
- neu erstellt haben, können Sie diesen Schritt überspringen
- und die Systemanwendungen in die neue Jail installieren.</para>
- </callout>
-
- <callout arearefs="jailinstallworld">
- <para>Dieser Befehl wird den Verzeichnisbaum mit allen
- notwendigen Binärdateien, Bibliotheken, Manualpages
- usw. erstellen.</para>
- </callout>
-
- <callout arearefs="jaildistrib">
- <para>Der <maketarget>distribution</maketarget>-Befehl
- lässt <application>make</application> alle
- benötigten Konfigurationsdateien installieren, es
- werden also alle installierbaren Dateien aus
- <filename class="directory">/usr/src/etc/</filename> in
- das Verzeichnis <filename class="directory">/etc</filename>
- der Jail installiert (also nach <filename
- class="directory">$D/etc/</filename>).</para>
- </callout>
-
- <callout arearefs="jaildevfs">
- <para>Das Einhängen des &man.devfs.8;-Dateisystems
- innerhalb der Jail ist nicht unbedingt notwendig.
- Allerdings benötigt fast jede Anwendung Zugriff auf
- wenigstens ein Gerät. Es ist daher sehr wichtig,
- den Zugriff auf Devices aus der Jail heraus zu
- kontrollieren, da unsaubere Einstellungen es einem
- Angreifer erlauben könnten, in das System einzudringen.
- Die Kontrolle über &man.devfs.8; erfolgt durch die in
- den Manualpages &man.devfs.8; und &man.devfs.conf.5;
- beschriebenen Regeln.</para>
- </callout>
- </calloutlist>
-
- <para>Ist eine Jail einmal erst erstellt, kann sie durch
- &man.jail.8; gestartet werden. &man.jail.8; benötigt
- zwingend mindestens vier Argumente, die im Abschnitt <xref
- linkend="jails-what"/> des Handbuchs beschrieben sind. Weitere
- Argumente sind möglich, um beispielsweise die Jail mit den
- Berechtigungen eines bestimmten Benutzers laufen zu lassen. Das
- Argument <option><replaceable>command</replaceable></option>
- hängt vom Typ der Jail ab; für ein <emphasis>virtuelles
- System</emphasis> ist <filename>/etc/rc</filename> eine gute
- Wahl, da dies dem Startvorgang eines echten &os;-Systems
- entspricht. Bei einer <emphasis>Service</emphasis>-Jail
- hängt dieses von der Art des Dienstes ab, der in der Jail
- laufen soll.</para>
-
- <para>Jails werden häufig mit dem Betriebssystem gestartet,
- da der <filename>rc</filename>-Mechanismus von &os; dafür
- eine einfach zu realisierende Möglichkeit bietet.</para>
-
- <procedure>
- <step>
- <para>Eine Liste der Jails, die mit dem Betriebssystem
- gestartet werden sollen, wird in die Datei &man.rc.conf.5;
- geschrieben:</para>
-
- <programlisting>jail_enable="YES" # Set to NO to disable starting of any jails
-jail_list="<replaceable>www</replaceable>" # Space separated list of names of jails</programlisting>
-
- <note>
- <para>Die Namen der Jails in der
- <varname>jail_list</varname> sollten nur alphanumerische
- Zeichen enthalten.</para>
- </note>
- </step>
-
- <step>
- <para>Für jede Jail in der <varname>jail_list</varname>
- sollten in &man.rc.conf.5; einige Einstellungen
- vorgenommen werden:</para>
-
- <programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www" # jail's root directory
-jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org" # jail's hostname
-jail_<replaceable>www</replaceable>_ip="192.168.0.10" # jail's IP address
-jail_<replaceable>www</replaceable>_devfs_enable="YES" # mount devfs in the jail
-jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # devfs ruleset to apply to jail</programlisting>
-
- <para>Beim Start einer in &man.rc.conf.5; konfigurierten Jail
- wird das <filename>/etc/rc</filename>-Skript der Jail (das
- "annimmt", dass es sich in einem kompletten System befindet)
- aufgerufen. Für Service-Jails sollten die Startskripte
- der Jail durch das Setzen der Option
- <varname>jail_<replaceable>jailname</replaceable>_exec_start</varname>
- entsprechend angepasst werden.</para>
-
- <note>
- <para>Eine vollständige Liste der Optionen findet sich
- in der Manualpage zu &man.rc.conf.5;.</para>
- </note>
- </step>
- </procedure>
-
- <para>Das <filename>/etc/rc.d/jail</filename>-Skript kann
- zum manuellen Starten und Stoppen der Jail genutzt werden,
- wenn ein Eintrag in <filename>rc.conf</filename> angelegt
- wurde:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/jail start <replaceable>www</replaceable></userinput>
-&prompt.root; <userinput>/etc/rc.d/jail stop <replaceable>www</replaceable></userinput></screen>
-
- <para>Es gibt momentan keinen sauberen Weg, eine &man.jail.8; zu
- stoppen. Dies liegt daran, dass die Kommandos zum sauberen
- Herunterfahren eines Systems innerhalb einer Jail nicht
- ausgeführt werden können. Der beste Weg eine Jail zu
- beenden ist es daher, innerhalb der Jail den folgenden Befehl
- auszuführen (alternativ können Sie auch &man.jexec.8;
- von außerhalb der Jail aufrufen):</para>
-
- <screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>
-
- <para>Weitere Informationen zu diesem Thema finden Sie in der
- Manualpage &man.jail.8;.</para>
- </sect1>
-
- <sect1 id="jails-tuning">
- <title>Feinabstimmung und Administration</title>
-
- <para>Es gibt verschiedene Optionen, die für jede Jail
- gesetzt werden können und verschiedene Wege, ein
- &os;-Host-System mit Jails zu kombinieren. Dieser Abschnitt
- zeigt Ihnen:</para>
-
- <itemizedlist>
- <listitem>
- <para>Einige zur Verfügung stehende Optionen zur
- Abstimmung des Verhaltens und der Sicherheitseinstellungen,
- die mit einer Jail-Installation ausgeführt werden
- können.</para>
- </listitem>
-
- <listitem>
- <para>Einige der Anwendungsprogramme für das
- Jail-Management, die über die &os; Ports-Sammlung
- verfügbar sind und genutzt werden können, um
- Jail-basierte Lösungen allumfassend umzusetzen.</para>
- </listitem>
- </itemizedlist>
-
- <sect2 id="jails-tuning-utilities">
- <title>Systemwerkzeuge zur Feinabstimmung von Jails in &os;</title>
-
- <para>Die Feinabstimmung einer Jail-Konfiguration erfolgt zum
- Großteil durch das Setzen von &man.sysctl.8;-Variablen.
- Es gibt einen speziellen sysctl-Zweig, der als Basis für
- die Organisation aller relevanten Optionen dient: Die
- <varname>security.jail.*</varname>-Hierarchie der
- &os;-Kerneloptionen. Die folgende Liste enthält alle
- jail-bezogenen sysctls (inklusiver ihrer Voreinstellungen).
- Die Namen sollten selbsterklärend sein, für
- weitergehende Informationen lesen Sie bitte die Manualpages
- &man.jail.8; und &man.sysctl.8;.</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>security.jail.set_hostname_allowed:
- 1</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>security.jail.socket_unixiproute_only:
- 1</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>security.jail.sysvipc_allowed:
- 0</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>security.jail.enforce_statfs:
- 2</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>security.jail.allow_raw_sockets:
- 0</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>security.jail.chflags_allowed:
- 0</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>security.jail.jailed: 0</varname></para>
- </listitem>
- </itemizedlist>
-
- <para>Diese Variablen können vom Administrator des
- <emphasis>Host-Systems</emphasis> genutzt werden, um
- Beschränkungen hinzuzufügen oder aufzuheben, die dem
- Benutzer <username>root</username> als Vorgabe auferlegt sind.
- Beachten Sie, dass es einige Beschränkungen gibt, die nicht
- verändert werden können. Der Benutzer
- <username>root</username> darf innheralb der &man.jail.8; keine
- Dateisysteme mounten und unmounten. Ebenso ist es ihm untersagt,
- das &man.devfs.8;-Regelwerk zu laden oder zu entladen. Er darf
- weder Firewallregeln setzen, noch administrative Aufgaben
- erledigen, die Modifikationen am Kernel selbst erfordern
- (wie bespielsweise das Setzen des <varname>Securelevels</varname>
- des Kernel.</para>
-
- <para>Das &os;-Basissystem enthält einen Basissatz an
- Werkzeugen, um Informationen über aktive Jails zu erlangen
- und einer Jail administrative Befehle zuzuordnen. Die Befehle
- &man.jls.8; und &man.jexec.8; sind Teil des &os;-Basissystems
- und können für folgende Aufgaben verwendet werden:</para>
-
- <itemizedlist>
- <listitem>
- <para>Das Anzeigen einer Liste der aktiven Jails und ihrer
- zugehörigen Jail Identifier (<acronym>JID</acronym>),
- ihrer <acronym>IP</acronym>-Addresse, ihres Hostnames und
- ihres Pfades.</para>
- </listitem>
-
- <listitem>
- <para>Das Herstellen einer Verbindung mit einer laufenden
- Jail, das Starten eines Befehls aus dem gastgebenen
- System heraus oder das Ausführen einer administrativen
- Aufgabe innerhalb der Jail selbst. Dies ist insbesondere
- dann nützlich, wenn der Benutzer
- <username>root</username> die Jail sauber herunterfahren
- möchte. &man.jexec.8; kann auch zum Starten einer
- Shell innerhalb der Jail genutzt werden, um adminstrative
- Aufgaben durchzuführen:</para>
-
- <screen>&prompt.root; <userinput>jexec <replaceable>1</replaceable> tcsh</userinput></screen>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="jails-tuning-admintools">
- <title>High-Level-Werkzeuge zur Jail-Administration in der &os;
- Ports-Sammlung</title>
-
- <para>Unter den zahlreichen Fremdwerkzeugen für die Administration
- von Jails sind die <filename
- role="package">sysutils/jailutils</filename> die
- vollständigsten und brauchbarsten. Dabei handelt es sich um
- eine Sammlung kleiner Anwendungen, die das &man.jail.8;-Management
- vereinfachen. Weitere Informationen zu diesen Werkzeugen finden
- Sie auf den entsprechenden Internetseiten.</para>
- </sect2>
- </sect1>
-
- <sect1 id="jails-application">
- <title>Anwendung von Jails</title>
-
- <sect2 id="jails-service-jails">
- <sect2info>
- <authorgroup>
- <author>
- <firstname>Daniel</firstname>
- <surname>Gerzo</surname>
- <contrib>Beigetragen von </contrib>
- <!-- 15. May 2007 -->
- </author>
- </authorgroup>
- </sect2info>
-
- <title>Service-Jails</title>
-
- <para>Dieser Abschnitt basiert auf einer von &a.simon; auf <ulink
- url="http://simon.nitro.dk/service-jails.html"></ulink>
- präsentierten Idee und einem aktualisierten
- Artikel von Ken Tom (<email>locals@gmail.com</email>). Er
- beschreibt, wie ein &os;-System durch Benutzung der
- &man.jail.8;-Funktion mit zusätzlichen
- Sicherheitsebenen ausgestattet werden kann. Es wird dabei
- angenommen, dass auf Ihrem &os;-System RELENG_6_0 oder neuer
- installiert ist und dass Sie die Informationen aus den
- vorangehenden Abschnitten gelesen und verstanden haben.</para>
-
- <sect3 id="jails-service-jails-design">
- <title>Design</title>
-
- <para>Eines der Hauptprobleme bei Jails ist das Management
- ihres Upgrade-Prozesses. Dieser neigt dazu, problematisch zu
- sein, da jede Jail bei jedem Upgrade komplett neu gebaut
- werden muss. Das stellt normalerweise kein Problem dar, wenn
- es sich um eine einzelne Jail handelt, da der Upgrade-Prozess
- recht einfach ist. Verwenden Sie aber eine größere
- Anzahl von Jails, kann dieser Prozess sehr zeitaufwendig
- werden.</para>
-
- <warning>
- <para>Diese Konfiguration erfordert fortgeschrittene
- Kenntnisse im Umgang mit &os; sowie der Benutzung seiner
- Funktionen. Sollten die unten vorgestellten Schritte zu
- kompliziert wirken, wird empfohlen, sich einfachere Verfahren
- wie <filename role="package">sysutils/ezjail</filename>
- anzusehen, da diese einfachere Methoden zur Administration
- von Jails verwenden und daher nicht so anspruchsvoll sind
- wie der hier beschriebene Aufbau.</para>
- </warning>
-
- <para>Diese Konfiguration basiert darauf, Jails so weit als
- möglich gemeinsam zu verwalten. Dies passiert auf sichere
- Art und Weise durch den Einsatz von &man.mount.nullfs.8;-Mounts
- (read-only). Dadurch werden Aktualisierungen erleichtert und
- das Verteilen von verschiedenen Diensten auf verschiedene
- Jails wird attraktiver. Außerdem bietet dieses Verfahren
- einen einfachen Weg, Jails hinzuzufügen, zu entfernen und
- zu aktualisieren.</para>
-
- <note>
- <para>Beispiele für Dienste sind in diesem
- Zusammenhang: Ein <acronym>HTTP</acronym>-Server, ein
- <acronym>DNS</acronym>-Server, ein
- <acronym>SMTP</acronym>-Server und so weiter.</para>
- </note>
-
- <para>Die Ziele des in diesem Abschnitt beschriebenen Aufbaus
- sind:</para>
-
- <itemizedlist>
- <listitem>
- <para>Das Erstellen einer einfachen und gut
- verständlichen Struktur von Jails. Dies beinhaltet,
- <emphasis>nicht</emphasis> für jede Jail ein
- vollständiges installworld laufen lassen zu
- müssen.</para>
- </listitem>
-
- <listitem>
- <para>Es einfach zu machen, neue Jails zu erstellen oder
- alte zu entfernen.</para>
- </listitem>
-
- <listitem>
- <para>Es einfach zu machen, bestehende Jails zu
- aktualisieren.</para>
- </listitem>
-
- <listitem>
- <para>Es einfach zu machen, einen angepassten &os;-Zweig zu
- nutzen.</para>
- </listitem>
-
- <listitem>
- <para>Paranoid bezüglich Sicherheit zu sein und
- Angriffsmöglickeiten weitgehend zu reduzieren.</para>
- </listitem>
-
- <listitem>
- <para>Soviel Platz und Inodes wie möglich
- einzusparen.</para>
- </listitem>
- </itemizedlist>
-
- <para>Wie bereits erwähnt, ist dieses Design stark darauf
- angewiesen, dass eine read-only-Hauptvorlage in jede Jail
- hinein gemountet wird (bekannt als
- <application>nullfs</application>), und dass jede Jail
- über wenigstens ein beschreibbares Gerät
- verfügt. Das Gerät kann hierbei eine separate
- physikalische Platte oder ein vnode unterstütztes
- &man.md.4;-Gerät sein. Im folgenden Beispiel wird ein
- <application>nullfs</application>-Mount genutzt, auf den
- nur Lesezugriff erlaubt ist.</para>
-
- <para>Das Layout des Dateisystems wird in der folgenden Liste
- beschrieben:</para>
-
- <itemizedlist>
- <listitem>
- <para>Jede Jail wird unterhalb des <filename
- class="directory">/home/j</filename>-Verzeichnisses
- gemountet.</para>
- </listitem>
-
- <listitem>
- <para><filename class="directory">/home/j/mroot</filename>
- ist die Vorlage für jede Jail und die nur lesbare
- Partition für alle Jails.</para>
- </listitem>
-
- <listitem>
- <para>Unterhalb von <filename
- class="directory">/home/j</filename> wird für jede
- Jail ein leeres Verzeichnis angelegt.</para>
- </listitem>
-
- <listitem>
- <para>Jede Jail bekommt ein <filename
- class="directory">/s</filename>-Verzeichnis, das zum
- read/write-Teilbereich des Systems verlinkt wird.</para>
- </listitem>
-
- <listitem>
- <para>Jede Jail bekommt ihr eigenes read/write-System,
- das auf <filename
- class="directory">/home/j/skel</filename> basiert.</para>
- </listitem>
-
- <listitem>
- <para>Jeder Jailbereich (genauer der read/write-Teilbereich
- jeder Jail) wird in <filename
- class="directory">/home/js</filename> erstellt.</para>
- </listitem>
- </itemizedlist>
-
- <note>
- <para>Es wird angenommen, dass die Jails sich unterhalb des
- <filename class="directory">/home</filename> Verzeichnisses
- befinden. Dieser Ort kann von Ihnen natürlich
- geändert werden. Allerdings müssen die Pfade
- in den folgenden Beispielen dann entsprechend angepasst
- werden.</para>
- </note>
- <!-- Insert an image or drawing here to illustrate the example. -->
- </sect3>
-
- <sect3 id="jails-service-jails-template">
- <title>Erstellen der Vorlage</title>
-
- <para>Dieser Abschnitt beschreibt die Schritte, die zum
- Erstellen der Hauptvorlage (die den nur lesbaren Bereich
- für alle weiteren Jails darstellt) notwendig sind.</para>
-
- <para>Es ist immer eine gute Idee, &os; auf den aktuellen
- -RELEASE-Zweig zu aktualisieren. Lesen Sie das entsprechende
- <ulink
- url="&url.books.handbook;/makeworld.html">Kapitel</ulink> des
- Handbuchs für Informationen zu diesem Thema. Selbst wenn
- Sie auf eine Aktualisierung des Betriebssystems verzichten,
- müssen Sie dennoch ein buildworld durchführen, um
- fortfahren zu können. Außerdem müssen Sie
- das Paket <filename role="package">sysutils/cpdup</filename>
- installiert sein. In diesem Beispiel wird &man.portsnap.8;
- verwendet, um die aktuelle &os; Ports-Sammlung herunterzuladen.
- Der Abschnitt <ulink
- url="&url.books.handbook;/portsnap.html">Portsnap</ulink> des
- Handbuchs beschreibt, wie Sie dieses Werkzeug effektiv
- einsetzen.</para>
-
- <procedure>
- <step>
- <para>Zuerst erstellen wir eine Verzeichnissstruktur
- für das read-only-Dateisystem, das die
- &os;-Binärdateien für unsere Jails enthalten
- wird. Anschließend wechseln wir in den
- &os;-Quellcodebaum und installieren das
- read-only-Dateisystem in die (Vorlage-)Jail.</para>
-
- <screen>&prompt.root; <userinput>mkdir /home/j /home/j/mroot</userinput>
-&prompt.root; <userinput>cd /usr/src</userinput>
-&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot</userinput></screen>
- </step>
-
- <step>
- <para>Als nächstes bereiten wir die Ports-Sammlung
- fü die Jails vor und kopieren den &os; Quellcodebaum
- in die Jail, da dieser für
- <application>mergemaster</application> benötigt wird:</para>
-
- <screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
-&prompt.root; <userinput>mkdir usr/ports</userinput>
-&prompt.root; <userinput>portsnap -p /home/j/mroot/usr/ports fetch extract</userinput>
-&prompt.root; <userinput>cpdup /usr/src /home/j/mroot/usr/src</userinput></screen>
- </step>
-
- <step>
- <para>Danach wird die Struktur für den
- read/write-Bereich des Systems erstellt:</para>
-
- <screen>&prompt.root; <userinput>mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles</userinput>
-&prompt.root; <userinput>mv etc /home/j/skel</userinput>
-&prompt.root; <userinput>mv usr/local /home/j/skel/usr-local</userinput>
-&prompt.root; <userinput>mv tmp /home/j/skel</userinput>
-&prompt.root; <userinput>mv var /home/j/skel</userinput>
-&prompt.root; <userinput>mv root /home/j/skel</userinput></screen>
- </step>
-
- <step>
- <para>Nutzen Sie <application>mergemaster</application>, um
- fehlende Konfigurationsdateien zu installieren.
- Anschließend werden die von
- <application>mergemaster</application> erstellten
- Extra-Verzeichnisse entfernt:</para>
-
- <screen>&prompt.root; <userinput>mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i</userinput>
-&prompt.root; <userinput>cd /home/j/skel</userinput>
-&prompt.root; <userinput>rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev</userinput></screen>
- </step>
-
- <step>
- <para>Nun wird das read/write-Dateisystem mit dem
- read-only-Dateisystem verlinkt. Bitte vergewissern Sie
- sich, dass die symbolischen Links an den korrekten
- <filename class="directory">s/</filename> Positionen
- erstellt werden. Echte Verzeichnisse oder an falschen
- Positionen erstellte Verzeichnisse lassen die Installation
- fehlschlagen.</para>
-
- <screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
-&prompt.root; <userinput>mkdir s</userinput>
-&prompt.root; <userinput>ln -s s/etc etc</userinput>
-&prompt.root; <userinput>ln -s s/home home</userinput>
-&prompt.root; <userinput>ln -s s/root root</userinput>
-&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
-&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
-&prompt.root; <userinput>ln -s ../../s/distfiles usr/ports/distfiles</userinput>
-&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
-&prompt.root; <userinput>ln -s s/var var</userinput></screen>
- </step>
-
- <step>
- <para>Zuletzt erstellen Sie eine allgemeine
- <filename>/home/j/skel/etc/make.conf</filename> mit
- folgendem Inhalt:</para>
-
- <programlisting>WRKDIRPREFIX?= /s/portbuild</programlisting>
-
- <para>Ein gesetztes <literal>WRKDIRPREFIX</literal>
- erlaubt es, die &os;-Ports innerhalb jeder Jail
- zu kompilieren. Das Ports-Verzeichnis ist Teil des
- read-only System. Der angepasste Pfad des
- <literal>WRKDIRPREFIX</literal> macht es möglich,
- innerhalb des read/write-Bereichs der Jail Ports zu
- bauen.</para>
- </step>
- </procedure>
- </sect3>
-
- <sect3 id="jails-service-jails-creating">
- <title>Jails erstellen</title>
-
- <para>Da nun eine komplette &os;-Jailvorlage vorliegt, sind wir
- nun in der Lage, Jails einrichten und in
- <filename>/etc/rc.conf</filename> zu konfigurieren. Dieses
- Beispiel zeigt das Erstellen von drei Jails:
- <quote>NS</quote>, <quote>MAIL</quote> und
- <quote>WWW</quote>.</para>
-
- <procedure>
- <step>
- <para>Fügen Sie die folgenden Zeilen in
- <filename>/etc/fstab</filename> ein, damit die
- read-only-Vorlage und der read/write-Bereich für
- alle Jails verfügbar sind:</para>
-
- <programlisting>/home/j/mroot /home/j/ns nullfs ro 0 0
-/home/j/mroot /home/j/mail nullfs ro 0 0
-/home/j/mroot /home/j/www nullfs ro 0 0
-/home/js/ns /home/j/ns/s nullfs rw 0 0
-/home/js/mail /home/j/mail/s nullfs rw 0 0
-/home/js/www /home/j/www/s nullfs rw 0 0</programlisting>
-
- <note>
- <para>Mit der Pass-Nummer 0 markierte Partitionen werden
- beim Booten des Systems nicht von &man.fsck.8;
- geprüft, mit 0 als Dump-Nummer markierte Partitonen
- werden von &man.dump.8; nicht gesichert. Wir wollen
- nicht, dass <application>fsck</application> unsere
- <application>nullfs</application>-Mounts prüft oder
- dass <application>dump</application> die nur lesbaren
- nullfs-Mounts unserer Jails sichert. Deshalb werden
- diese Bereiche in den letzten beiden Spalten der
- obenstehenden <filename>fstab</filename> mit
- <quote>0&nbsp;0</quote> markiert.</para>
- </note>
- </step>
-
- <step>
- <para>Konfigurieren Sie die Jails in
- <filename>/etc/rc.conf</filename>:</para>
-
- <programlisting>jail_enable="YES"
-jail_set_hostname_allow="NO"
-jail_list="ns mail www"
-jail_ns_hostname="ns.example.org"
-jail_ns_ip="192.168.3.17"
-jail_ns_rootdir="/usr/home/j/ns"
-jail_ns_devfs_enable="YES"
-jail_mail_hostname="mail.example.org"
-jail_mail_ip="192.168.3.18"
-jail_mail_rootdir="/usr/home/j/mail"
-jail_mail_devfs_enable="YES"
-jail_www_hostname="www.example.org"
-jail_www_ip="62.123.43.14"
-jail_www_rootdir="/usr/home/j/www"
-jail_www_devfs_enable="YES"</programlisting>
-
- <warning>
- <para>Der Grund dafür, dass die Variablen
- <varname>jail_<replaceable>name</replaceable>_rootdir</varname>
- nach <filename class="directory">/usr/home</filename>
- statt nach <filename class="directory">/home</filename>
- zeigen, liegt darin, dass der physikalische Pfad des
- <filename
- class="directory">/home</filename>-Verzeichnisses unter
- &os; <filename class="directory">/usr/home</filename>
- lautet. Die Variable
- <varname>jail_<replaceable>name</replaceable>_rootdir</varname>
- darf im Pfad aber <emphasis>keinen symbolischen
- Link</emphasis> enthalten, weil das Jail ansonsten
- nicht gestartet werden kann. Verwenden Sie
- &man.realpath.1;, um den korrekten Wert für diese
- Variable zu bestimmen. Weitere Informationen finden
- Sie im Security Advisory &os;-SA-07:01.jail.</para>
- </warning>
- </step>
-
- <step>
- <para>Erstellen Sie die notwendigen Mountpunkte für
- die nur lesbaren Bereiche jeder Jail:</para>
-
- <screen>&prompt.root; <userinput>mkdir /home/j/ns /home/j/mail /home/j/www</userinput></screen>
- </step>
-
- <step>
- <para>Installieren Sie die read/write-Vorlage in jede
- Jail. Benutzen Sie hierfür <filename
- role="package">sysutils/cpdup</filename>, welches es
- erleichtert, eine korrekte Kopie jedes Verzeichnisses
- zu erstellen:</para>
-
- <!-- keramida: Why is cpdup required here? Doesn't cpio(1)
- already include adequate functionality for performing this
- job *and* have the advantage of being part of the base
- system of FreeBSD? -->
-
- <screen>&prompt.root; <userinput>mkdir /home/js</userinput>
-&prompt.root; <userinput>cpdup /home/j/skel /home/js/ns</userinput>
-&prompt.root; <userinput>cpdup /home/j/skel /home/js/mail</userinput>
-&prompt.root; <userinput>cpdup /home/j/skel /home/js/www</userinput></screen>
- </step>
-
- <step>
- <para>An dieser Stelle werden die Jails erstellt und
- fü den Betrieb vorbereitet. Zuerst mounten Sie die
- notwendigen Dateisysteme für jede Jail und starten
- diese dann mit dem Skript
- <filename>/etc/rc.d/jail</filename>:</para>
-
- <screen>&prompt.root; <userinput>mount -a</userinput>
-&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
- </step>
- </procedure>
-
- <para>Die Jails sollten nun laufen. Um zu prüfen, ob sie
- korrekt gestartet wurden, verwenden Sie &man.jls.8;. Nach
- dem Aufruf dieses Befehls sollten Sie eine Ausgabe
- ähnlich der folgenden erhalten:</para>
-
- <screen>&prompt.root; <userinput>jls</userinput>
- JID IP Address Hostname Path
- 3 192.168.3.17 ns.example.org /home/j/ns
- 2 192.168.3.18 mail.example.org /home/j/mail
- 1 62.123.43.14 www.example.org /home/j/www</screen>
-
- <para>An diesem Punkt sollte es möglich sein, sich an
- jeder Jail anzumelden, Benutzer anzulegen und Dienste zu
- konfigurieren. Die Spalte <literal>JID</literal> gibt die
- Jail-Identifikationsnummer jeder laufenden Jail an. Nutzen Sie
- den folgenden Befehl, um administrative Aufgaben in der Jail
- mit der <literal>JID</literal> 3 durchzuführen:</para>
-
- <screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen>
- </sect3>
-
- <sect3 id="jails-service-jails-upgrading">
- <title>Jails aktualisieren</title>
-
- <para>Mit der Zeit wird es notwendig sein, das System auf
- eine neuere Version von &os; zu aktualisieren. Zum einen aus
- Sicherheitsgründen, zum anderen, um neu eingeführte
- Funktionen nutzen zu können, die für die bestehenden
- Jails sinnvoll sind. Das Design dieses Aufbaus bietet einen
- einfachen Weg, bestehende Jails zu aktualisieren. Zudem
- reduziert es die Downtime, da die Jails erst im allerletzten
- Schritt gestoppt werden müssen. Außerdem bietet
- es die Möglichkeit, zu älteren Versionen
- zurückzukehren, falls irgendwelche Probleme auftreten.</para>
-
- <procedure>
- <step>
- <para>Im ersten Schritt wird das Host-System aktualisiert.
- Anschließend wird eine temporäre neue
- read-only Vorlage <filename
- class="directory">/home/j/mroot2</filename> erstellt.</para>
-
- <screen>&prompt.root; <userinput>mkdir /home/j/mroot2</userinput>
-&prompt.root; <userinput>cd /usr/src</userinput>
-&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot2</userinput>
-&prompt.root; <userinput>cd /home/j/mroot2</userinput>
-&prompt.root; <userinput>cpdup /usr/src usr/src</userinput>
-&prompt.root; <userinput>mkdir s</userinput></screen>
-
- <para>Der <maketarget>installworld</maketarget>-Durchlauf
- erzeugt einige unnötige Verzeichnisse, die nun entfernt
- werden sollten:</para>
-
- <screen>&prompt.root; <userinput>chflags -R 0 var</userinput>
-&prompt.root; <userinput>rm -R etc var root usr/local tmp</userinput></screen>
- </step>
-
- <step>
- <para>Erzeugen Sie neue symbolische Links für das
- Hauptdateisystem:</para>
-
- <screen>&prompt.root; <userinput>ln -s s/etc etc</userinput>
-&prompt.root; <userinput>ln -s s/root root</userinput>
-&prompt.root; <userinput>ln -s s/home home</userinput>
-&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
-&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
-&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
-&prompt.root; <userinput>ln -s s/var var</userinput></screen>
- </step>
-
- <step>
- <para>Nun ist es an der Zeit, die Jails zu stoppen:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/jail stop</userinput></screen>
- </step>
-
- <step>
- <para>Unmounten des originalen Dateisystems:</para>
-
- <!-- keramida: Shouldn't we suggest a short script-based
- loop here, instead of tediously copying the same commands
- multiple times? -->
-
- <screen>&prompt.root; <userinput>umount /home/j/ns/s</userinput>
-&prompt.root; <userinput>umount /home/j/ns</userinput>
-&prompt.root; <userinput>umount /home/j/mail/s</userinput>
-&prompt.root; <userinput>umount /home/j/mail</userinput>
-&prompt.root; <userinput>umount /home/j/www/s</userinput>
-&prompt.root; <userinput>umount /home/j/www</userinput></screen>
-
- <note>
- <para>Die read/write-Systeme sind an das read-only
- System angehängt (<filename
- class="directory">/s</filename>), das daher zuerst
- ausgehängt werden muss.</para>
- </note>
- </step>
-
- <step>
- <para>Verschieben Sie das alte read-only-Dateisystem und
- ersetzen Sie es durch das neue Dateisystem. Das alte
- Dateisystem kann so als Backup dienen, falls etwas schief
- geht. Die Namensgebung entspricht hier derjenigen bei der
- Erstellung eines neuen read-only-Dateisystems. Verschieben
- Sie die originale &os; Ports-Sammlung in das neue
- Dateisystem, um Platz und Inodes zu sparen:</para>
-
- <screen>&prompt.root; <userinput>cd /home/j</userinput>
-&prompt.root; <userinput>mv mroot mroot.20060601</userinput>
-&prompt.root; <userinput>mv mroot2 mroot</userinput>
-&prompt.root; <userinput>mv mroot.20060601/usr/ports mroot/usr</userinput></screen>
- </step>
-
- <step>
- <para>Nun ist die neue read-only-Vorlage fertig. Sie
- müssen daher nur noch die Dateisysteme erneut mounten
- und die Jails starten:</para>
-
- <screen>&prompt.root; <userinput>mount -a</userinput>
-&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
- </step>
- </procedure>
-
- <para>Nutzen Sie &man.jls.8; um zu prüfen, ob die Jails
- korrekt gestartet wurden. Vergessen Sie nicht, innerhalb jeder
- Jail <command>mergemaster</command> laufen zu lassen. Die
- Konfigurationsdateien müssen (ebenso wie die
- rc.d-Skripten) aktualisiert werden.</para>
- </sect3>
- </sect2>
- </sect1>
-</chapter>