schroot.conf - Chroot-Definitionsdatei für Schroot
schroot.conf ist eine einfache UTF-8-Textdatei, die die zur
Verwendung mit Schroot verfügbaren Chroots beschreibt.
Ein »#« (»hash«)-Zeichen am Zeilenanfang leitet
einen Kommentar oder irgendeinen anderen Text ein. Alle Texte rechts von
»#« werden als Kommentar angesehen.
Das Konfigurationsformat hat einen INI-Stil, der durch Abschnittsnamen in
eckigen Klammern in Gruppen aus Schlüssel-Wert-Paaren unterteilt wird.
Eine Chroot ist als eine Gruppe von Schlüssel-Wert-Paaren definiert, die
mit einem Namen in eckigen Klammern in einer eigenen Zeile beginnen. Die Datei
kann mehrere Gruppen enthalten, die daher mehrere Chroots definieren.
Eine Chroot-Definition beginnt mit dem Namen der Chroot in eckigen Klammern. Zum
Beispiel,
- [sid]
Der Name ist Gegenstand bestimmter Namensbeschränkungen. Weitere
Einzelheiten finden Sie im nachfolgenden Abschnitt »
Chroot-Namem«.
Diesem folgen dann mehrere Schlüssel-Wert-Paare, einer je Zeile:
- type=Typ
- The type of the chroot. Valid types are
‘plain’, ‘directory’, ‘file’,
‘loopback’, ‘block-device’,
‘btrfs-snapshot’, ‘zfs-snapshot’ and
‘lvm-snapshot’. If empty or omitted, the default type is
‘plain’. Note that ‘plain’ chroots do not run
setup scripts and mount filesystems; ‘directory’ is
recommended for normal use (see “ Plain and directory
chroots”, below).
- description=Beschreibung
- eine kurze Beschreibung der Chroot. Diese könnte in
verschiedene Sprachen lokalisiert sein; siehe den nachfolgenden Abschnitt
» Lokalisierung«.
- priority=Zahl
- setzt die Priorität einer Chroot. Zahl ist
eine positive Ganzzahl, die angibt, ob eine Distribution älter als
eine andere ist. »oldstable« und
»oldstable-security« könnten zum Beispiel
»0« sein, während »stable« und
»stable-security« »1« sind,
»testing« »2« und »unstable«
»3«. Die Werte sind nicht wichtig aber der Unterschied
zwischen ihnen ist es. Diese Option ist missbilligt und wird nicht weiter
von Schroot benutzt, es ist aber immer noch erlaubt, sie zu verwenden; sie
wird in einer zukünftigen Veröffentlichung hinfällig
und entfernt.
- message-verbosity=Detailgrad
- setzt den Detailgrad der Meldungen, die Schroot bei der
Einrichtung, dem Ausführen von Befehlen und dem Aufräumen
der Chroot ausgibt. Gültige Einstellungen sind
»quiet« (unterdrückt die meisten Meldungen,
»normal« (die Vorgabe) und »verbose« (zeigt
alle Meldungen an). Diese Einstellung kann durch die Optionen
--quiet und --verbose außer Kraft gesetzt
werden.
- users=Benutzer1,Benutzer2,…
- eine durch Kommas getrennte Liste von Benutzern, denen
Zugriff auf die Chroot gestattet ist. Falls sie leer ist oder weggelassen
wird, wird keinen Benutzern der Zugriff erlaubt (es sei denn, die Gruppe,
zu dem sie gehören wurde ebenfalls in groups
angegeben).
- groups=Gruppe1,Gruppe2,…
- eine durch Kommas getrennte Liste von Gruppen, denen
Zugriff auf die Chroot gestattet ist. Falls sie leer ist oder weggelassen
wird, wird keiner Gruppe der Zugriff erlaubt.
- root-users=Benutzer1,Benutzer2,…
- eine durch Kommas getrennte Liste von Benutzern, denen
ohne Passwort Root-Zugriff auf die Chroot gewährt wird.
Falls sie leer ist oder weggelassen wird, wird keinen Benutzern der
Zugriff ohne Passwort erlaubt (falls aber die Benutzer oder die Gruppen,
zu denen sie gehören, in users beziehungsweise groups
stehen, können sie dennoch Zugriff ohne Passwort erlangen). Siehe
den nachfolgenden Abschnitt » Sicherheit«.
- root-groups=Gruppe1,Gruppe2,…
- eine durch Kommas getrennte Liste von Gruppen, denen
ohne Passwort Root-Zugriff auf die Chroot gewährt wird.
Falls sie leer ist oder weggelassen wird, wird keinen Benutzern der
Zugriff ohne Passwort erlaubt (falls aber die Benutzer oder die Gruppen,
zu denen sie gehören, in users beziehungsweise groups
sind, können sie dennoch Zugriff ohne Passwort erlangen). Siehe den
nachfolgenden Abschnitt » Sicherheit«.
- aliases=Alias1,Alias2,…
- eine durch Kommas getrennte Liste von Aliassen (alternative
Namen) für diese Chroot. Eine Chroot mit Namen »sid«
könnte der Einfachheit halber einen Alias »unstable«
haben, Aliasse unterliegen den selben Namensbeschränkungen wie der
Chroot-Name selbst.
- profile=Verzeichnis
- script-config=Dateiname
- Das Verhalten des Chroot-Einrichtungsskripts könnte
auf Chroot-Basis durch Setzen eines speziellen Konfigurationsprofils
angepasst werden. Das Verzeichnis ist relativ zu /etc/schroot. Die
Vorgabe ist »default«. Die Dateien in diesem Verzeichnis
werden von den Einrichtungsskripten eingelesen. Daher kann ihr Verhalten
durch die Auswahl eines geeigneten Profils angepasst werden. Alternativen
sind »minimal« (minimale Konfiguration),
»desktop« zum Ausführen von Arbeitsplatzanwendungen
in der Chroot und um weitere Funktionalität des Wirtssystem in der
Chroot zur Verfügung zu stellen) und »sbuild« (um die
Chroot zum Bauen von Debian-Paketen zu benutzen). Andere Pakete
können zusätzliche Profile bereitstellen. Die Standardwerte
der Schlüssel setup.config, setup.copyfiles,
setup.fstab und setup.nssdatabases basieren auf der
Einstellung profile.
- Beachten Sie, dass der Schlüssel profile den
älteren Schlüssel script-config ersetzt. Der
Schlüssel script-config ist exakt derselbe wie
profile, hat aber » /config« daran
angehängt. Der Standarddateiname ist
»default/config«. Jeder dieser Schlüssel kann benutzt
werden. Falls beide vorhanden sind, wird script-config den Vorrang
erhalten ( profile wird aufgehoben). script-config ist
missbilligt und wird in einer zukünftigen Veröffentlichung
entfernt. Beachten Sie, dass profile äquivalent zu
script-config ist, falls die Datei, die von script-config
eingelesen wird, nur die von Schroot bereitgestellten Standardvariablen
enthält. Falls irgendwelche zusätzlichen Variablen oder
Shell-Skript-Codeschnipsel hinzugefügt wurden, setzen Sie bitte
setup.config, wodurch das Einlesen dieser Datei weiterhin
ermöglicht wird. Es wird empfohlen, die Verwendung der eingelesenen
Datei, wo dies möglich ist, durch zusätzliche
Schlüssel in der »schroot.conf« zu ersetzen, es wird
jedoch weiterhin möglich sein, eine zusätzliche
Konfigurationsdatei mittels setup.config einzulesen.
- Arbeitsplatzbenutzer sollten daran denken, dass die
Fstab-Datei desktop/fstab bearbeitet werden muss, falls Sie Gdm3
verwenden; bitte lesen Sie die Kommentare in dieser Datei, um weitere
Anweisungen zu erhalten. Der Schlüssel preserve-environment
sollte außerdem auf »true« gesetzt werden, so dass
die Umgebung innerhalb der Chroot aufbewahrt wird.
- Falls keines der oberhalb bereitgestellten
Konfigurationsprofile Ihren Bedarf deckt, können sie konfiguriert
werden, um sie weiter anzupassen und/oder kopiert und als Schablone
für ganz neue Profile verwendet werden.
- Beachten Sie, dass die unterschiedlichen Profile
unterschiedliche Konsequenzen für die Sicherheit haben; weitere
Einzelheiten finden Sie im nachfolgenden Abschnitt »
Sicherheit«.
- setup.config=Dateiname
- Dieser Schlüssel gibt eine Datei an, die die
Einrichtungsskripte einlesen, wenn sie ausgeführt werden. Dies
übernimmt den durch script-config gesetzten Wert als
Standardeinstellung. Die Datei ist ein Bourne-Shell-Skript und kann daher
zusätzlich zu den einfachen Variablenzuweisungen jeden
gültigen Shell-Code enthalten. Dies wird zum Beispiel das Anpassen
des Verhaltens entsprechend des speziellen Chroot-Typs oder Namens
ermöglichen. Beachten Sie, dass das Skript für jeden
einzelnen Skriptaufruf eingelesen wird und deshalb idempotent sein
muss.
- Alle Standardeinstellungen in dieser Datei können
nun mittels Konfigurationsschlüsseln in schroot.conf, wie
nachfolgend ausführlich beschrieben, gesetzt werden. Existierende
Konfigurationen sollte so geändert werden, dass diese
Schlüssel anstelle dieser Datei Verwendung finden. Weitere
Einzelheiten finden Sie in schroot-script-config(5). Dieser Typ von
Einrichtungsskript-Konfigurationsdatei wird nicht länger als Teil
der Standardprofile bereitgestellt, wird aber weiterhin eingelesen, falls
er vorhanden und dieser Schlüssel gesetzt ist.
- setup.copyfiles=Dateiname
- eine Datei, die eine Liste von Dateien enthält, die
in die Chroot kopiert werden (eine Datei pro Zeile). Die Datei wird
innerhalb der Chroot den selben absoluten Speicherort haben.
- setup.fstab=Dateiname
- die Datei mit der Dateisystemtabelle, die zum
Einhängen von Dateisystemen innerhalb der Chroot benutzt wird. Das
Format dieser Datei ist identisch mit dem von /etc/fstab, das in
fstab(5) dokumentiert wird. Der einzige Unterschied ist, dass der
Pfad zum Einhängepunkt fs_dir relativ zur Chroot statt zum
Wurzelverzeichnis ist. Beachten Sie auch, dass Einhängepunkte auf
dem Wirt in eine kanonische Form gebracht werden, wodurch sichergestellt
wird, dass absolute symbolische Verweise auf etwas innerhalb der Chroot
zeigen. Komplexe Pfade, die mehrere symbolische Verweise enthalten,
könnten jedoch falsch aufgelöst werden. Es ist nicht ratsam,
verschachtelte symbolische Verweise als Einhängepunkte zu
verwenden.
- setup.nssdatabases=Dateiname
- eine Datei, die die Systemdatenbanken aufführt, die
in die Chroot kopiert werden. Die Standarddatenbanken sind
»passwd«, »shadow«, »group« und
»gshadow«. Andere mögliche Datenbanken, die
beigefügt werden können sind »services«,
»protocols«, »networks« und
»hosts«. Die Datenbanken werden mittels getent(1)
kopiert. Daher werden alle in /etc/nsswitch.conf
aufgeführten Datenbankquellen für jede Datenbank
benutzt.
- setup.services=Dienst1,Dienst2,…
- eine durch Kommas getrennte Liste von von Diensten, die in
der Chroot ausgeführt werden. Diese werden bei Beginn der Sitzung
gestartet und bei Sitzungsende gestoppt.
- command-prefix=command,Option1,Option2,…
- eine durch Kommas getrennte Liste eines Befehls und
Optionen für den Befehl. Dieser Befehl und seine Optionen werden
allen Befehlen vorangestellt, die innerhalb der Chroot ausgeführt
werden. Dies ist nützlich, um Befehle wie »nice«,
»ionice« oder »eatmydata« für alle
Befehle die innerhalb der Chroot laufen, hinzuzufügen. Nice und
Ionice werden die CPU und die E/A-Zeitplanung beeinflussen. Eatmydata
ignoriert Fsync-Operationen des Dateisystems und ist nützlich
für Wegwerf-Chroot-Schnappschüsse, bei denen Sie sich nicht
um Datenverluste, aber um hohe Geschwindigkeit kümmern
müssen.
- personality=Rolle
- setzt die Persönlichkeit
(Prozessausführungsdomänen), die benutzt werden soll. Diese
Option ist nützlich, wenn zum Beispiel eine 32-Bit-Chroot auf einem
64-Bit-System verwendet wird. Gültige Optionen auf Linux sind
»bsd«, »hpux«, »irix32«,
»irix64«, »irixn32«, »iscr4«,
»linux«, »linux32«,
»linux_32bit«, »osf4«, »osr5«,
»riscos«, »scorvr3«, »solaris«,
»sunos«, »svr4«, »uw7«,
»wysev386« und »xenix«. Der Standardwert ist
»linux«. Es gibt außerdem noch die Spezialoption
»undefined« (Persönlichkeit nicht gesetzt).
Für eine 32-Bit-Chroot auf einem 64-Bit-System ist die
erforderliche Option »linux32«. Die einzige gültige
Option für Nicht-Linux-Systeme ist »undefined«. Der
Standardwert für Nicht-Linux-Systeme ist
»undefined«.
- preserve-environment=true|false
- Standardmäßig wird die Umgebung nicht
innerhalb der Chroot aufbewahrt. Stattdessen wird eine minimale Umgebung
benutzt. Ist dies auf true gesetzt, wird die Umgebung immer
aufbewahrt. Dies ist zum Beispiel nützlich, wenn X-Anwendungen
innerhalb der Chroot ausgeführt werden, die die Umgebung zum
korrekten Funktionieren benötigen. Die Umgebung kann ebenso mittels
der Option --preserve-environment aufbewahrt werden.
- shell=Shell
- Wenn eine Login-Shell ausgeführt wird, wird eine
größere Zahl möglicher Shells in dieser Reihenfolge
berücksichtigt: der Befehl in der Umgebungsvariablen SHELL (falls
--preserve-environment benutzt wird oder
preserve-environment aktiviert ist), die Shell des Benutzers in der
Datenbank »passwd«, /bin/bash und schlussendlich
/bin/sh. Diese Einstellung setzt diese Liste außer Kraft und
wird die angegebene Shell verwenden. Sie kann mittels der Option
--shell überschrieben werden.
- environment-filter=regulärer Ausdruck
- Die Umgebung, die in der Chroot gesetzt wird, wird
gefiltert, um Umgebungsvariablen zu entfernen, die ein Sicherheitsrisiko
darstellen könnten. Jede Umgebungsvariable, die zum erweiterten
regulären POSIX-Ausdruck passt, wird vor dem Ausführen
irgendeines Befehls in der Chroot entfernt.
- Unter Umständen gefährliche
Umgebungsvariablen werden aus Sicherheitsgründen
standardmäßig für die folgenden regulären
Ausdrücke entfernt:
»^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)$«.
Chroots des Typs »plain« oder »directory« sind
Verzeichnisse, auf die im Dateisystem zugegriffen werden kann. Diese beiden
Typen sind identisch, außer dass Verzeichnis-Chroots im Gegensatz zu
einfachen Chroots Einrichtungsskripte ausführen können.
Infolgedessen werden Dateisysteme wie
/proc nicht in einfachen Chroots
eingehängt; es liegt im Verantwortungsbereich des Systemadministrators,
solche Chroots von Hand zu konfigurieren, während Verzeichnis-Chroots
automatisch konfiguriert werden. Zusätzlich setzen Verzeichnis-Chroots
die Optionen der
dateisystemvereinenden Chroots um (siehe die
nachfolgenden »
Optionen der dateisystemvereinenden
Chroot«).
Diese Chroot-Typen haben eine zusätzliche (verbindliche)
Konfigurationsoption:
- directory=Verzeichnis
- das Verzeichnis, das die Chroot-Umgebung enthält.
Dorthin wird das Wurzelverzeichnis geändert, wenn eine Login-Shell
oder ein Befehl ausgeführt wird. Das Verzeichnis muss existieren
und Lese- sowie Ausführungsrechte haben, damit Benutzer darauf
zugreifen können. Beachten Sie, dass es auf Linux-Systemen mit der
Option »bind« andernorts eingehängt wird, um es als
Chroot zu verwenden. Das Verzeichnis für
»plain«-Chroots wird mit der Option --rbind von
mount(8) eingehängt, während für
»directory«-Chroots stattdessen --bind benutzt wird,
so dass darunterliegende Einhängevorgänge nicht aufrecht
erhalten werden (sie sollten in der Datei fstab genauso wie in
/etc/fstab des Rechners gesetzt werden).
Chroots des Typs »file« sind Dateien des aktuellen Dateisystems,
die ein Archiv der Chroot-Dateien enthalten. Sie setzen die
Source-Chroot-Optionen um (siehe »
Source-Chroot-Optionen« unten). Beachten Sie, dass für
jede Chroot dieses Typs eine entsprechende Source-Chroot (des Typs
»file«) erstellt wird; dies dient dem bequemen Zugang zum
Quellarchiv, z.B. zu Aktualisierungszwecken. Diese zusätzlichen
Optionen sind ebenfalls umgesetzt:
- file=Dateiname
- die Datei, die die (verbindliche) archivierte
Chroot-Umgebung enthält. Dies muss ein Tar (Bandarchiv) sein, das
wahlweise mit Gzip, Bzip2, Xz, Lzop oder Lz4 komprimiert ist. Die
Dateierweiterungen, die zur Bestimmung des Typs benutzt werden, sind
.tar, .tar.gz, .tar.bz2, .tar.xz,
.tar.lzop, .tar.lz4, .tgz, .tbz, .txz,
.tzo und .tlz4. Diese Datei muss dem Benutzer Root
gehören und darf nicht von anderen beschreibbar sein. Beachten Sie,
dass Zip-Archive nicht länger unterstützt werden; Zip war
nicht in der Lage, benannte Weiterleitungen und Geräteknoten zu
archivieren und daher nicht zur Archivierung von Chroots geeignet.
- location=Pfad
- Dies ist der Pfad zur Chroot innerhalb des Archivs.
Falls das Archiv zum Beispiel eine Chroot in /squeeze
enthält, würden Sie hier »/squeeze« angeben.
Falls die Chroot das Einzige ist, was sich im Archiv befindet, d.h.
/ ist das Wurzelverzeichnis des Dateisystems für die Chroot,
sollte diese Option leer bleiben oder ganz weggelassen werden.
Chroots des Typs »loopback« sind ein Dateisystem, das als Datei
auf der Platte verfügbar ist und auf das über ein Loopback-Mount
zugegriffen wird. Die Datei wird per Loopback eingehängt und auf
Anforderung ausgehängt. Loopback-Chroots setzen die Optionen
einhängbare Chroot und
dateisystemvereinende Chroot um
(siehe »
Optionen für einhängbare Chroots«
und »
Optionen der dateisystemvereinenden Chroot« unten),
sowie eine zusätzliche Option:
- file=Dateiname
- Dies ist der Name der Datei, die das Dateisystem
enthält, einschließlich des absoluten Pfades, zum Beispiel
»/srv/chroot/sid«.
Chroots des Typs »block-device« sind ein Dateisystem, das auf
einem nicht eingehängten Blockspeichergerät verfügbar
ist. Das Gerät wird auf Anforderung ein- und ausgehängt.
Blockspeichergeräte-Chroots setzen die Optionen
einhängbare
Chroot und
dateisystemvereinende Chroot um (siehe »
Optionen für einhängbare Chroots« und »
Optionen der dateisystemvereinenden Chroot« unten), sowie eine
zusätzliche Option:
- device=Gerät
- Dies ist der Gerätename des
Blockspeichergeräts, einschließlich des absoluten Pfads, zum
Beispiel »/dev/sda5«.
Chroots des Typs »btrfs-snapshot« sind aus einem existierenden
Btrfs-Unterdatenträger erstellte Btrfs-Schnappschüsse auf einem
eingehängten Btrfs-Dateisystem. Auf Anforderung wird beim Beginn der
Sitzung ein Schnappschuss aus diesem Unterdatenträger erstellt und dann
eingehängt. Am Ende der Sitzung wird der Schnappschuss
ausgehängt und gelöscht. Dieser Chroot-Typ setzt die
Source-Chroot-Optionen um (siehe nachfolgend »
Source-Chroot-Optionen«). Beachten Sie, dass für jede
Chroot dieses Typs eine entsprechende Source-Chroot (des Typs
»directory«) erstellt wird; dies dient dem bequemen Zugriff auf
den Quelldatenträger. Diese zusätzlichen Optionen sind ebenfalls
eingebaut:
- btrfs-source-subvolume=Verzeichnis
- das Verzeichnis, das den Quellunterdatenträger
enthält
- btrfs-snapshot-directory=Verzeichnis
- das Verzeichnis, in das die Schnappschüsse des oben
genannten Quellunterdatenträgers gespeichert werden.
Chroots of type ‘zfs-snapshot’ are a ZFS clone created from an
existing ZFS dataset. A snapshot and clone will be created from this source
subvolume on demand at the start of a session, and then the clone will be
mounted. At the end of the session, the clone will be unmounted and the clone
and snapshot will be deleted. This chroot type implements the
source
chroot options (see “
Source chroot options”, below).
Note that a corresponding source chroot (of type ‘directory’)
will be created for each chroot of this type; this is for convenient access to
the source volume. These additional options are also implemented:
- zfs-dataset=dataset_name
- Name of the ZFS source dataset to use.
- zfs-snapshot-options=snapshot_options
- Snapshot options. These are additional options to pass to
zfs snapshot.
Chroots des Typs »lvm-snapshot« sind ein Dateisystem, das auf
einem mit LVM verwalteten logischen Laufwerk (LV) verfügbar ist. Ein
LV-Schnappschuss wird auf Anforderung aus diesem LV erstellt. Dann wird der
Schnappschuss eingehängt. Am Ende der Sitzung wird der LV-Schnappschuss
ausgehängt und entfernt.
LVM-Schnappschuss-Chroots setzen die
Source-Chroot-Optionen um (siehe
»
Source chroot options« unten) und all die Optionen
für »block-device«. Beachten Sie, dass eine
zugehörige Source-Chroot (des Typs »block-device«)
für jede Chroot dieses Typs erstellt wird; dies dient dem bequemen
Zugriff auf das Quellgerät. Diese zusätzliche Option ist
ebenfalls eingebaut:
- lvm-snapshot-options=Schnappschussoptionen
- Schnappschussoptionen. Dies sind zusätzliche
Optionen, die an lvcreate(8) übergeben werden, zum Beispiel
»-L 2g«, um einen Schnappschuss mit einer
Größe von 2 GiB zu erstellen. Hinweis: Hier
können nicht der LV-Name ( -n), die Schnappschussoption
(-s) und der Originalpfadname des LVs angegeben werden; sie werden
automatisch durch Schroot gesetzt.
Chroots des Typs »custom« sind ein spezieller Chroot-Typ, der
für die Umsetzung neuer Chroot-Typen benutzt wird, der nicht durch eine
der obigen Chroot-Typen unterstützt wird. Dies kann nützlich
sein, um einen neuen Chroot-Typ umzusetzen und zu testen, ohne dabei
irgendwelchen C++-Code schreiben zu müssen. Sie müssen jedoch
Ihr eigenes Einrichtungsskript verfassen, das die Einrichtungsarbeit
übernimmt, da dieser Chroot-Typ von allein sehr wenig tut. Sie
müssen Ihrer Chroot-Definition außerdem benutzerdefinierte
Schlüssel für die Verwendung im Einrichtungsskript
hinzufügen; anders als für die oben genannten Chroot-Typen wird
keine Überprüfung der Optionen stattfinden, so lange Sie dies
nicht selbst in Ihrem Einrichtungsskript erledigen. Folgende
zusätzlichen Optionen sind ebenfalls eingebaut:
- custom-session-cloneable=true|false
- stellt ein, ob Sitzungen dieser Chroot geklont werden
können oder nicht (standardmäßig aktiviert).
- custom-session-purgeable=true|false
- stellt ein, ob Sitzungen dieser Chroot geklont werden
können oder nicht (standardmäßig deaktiviert).
- custom-source-cloneable=true|false
- stellt ein, ob mittels dieser Chroot Source-Chroots geklont
werden können oder nicht (standardmäßig
deaktiviert).
Die Chroot-Typen »btrfs-snapshot«, »file« und
»lvm-snapshot« setzen Source-Chroots um. Zusätzlich
setzen Chroot-Typen mit eingeschalteter Unterstützung von Vereinigungen
Source-Chroots um (siehe »
Optionen der dateisystemvereinenden
Chroot« unten). Dies sind Chroots, die vor der Benutzung
automatisch eine Kopie von sich selbst erstellen und normalerweise von
Sitzungen verwaltet werden. Diese Chroots stellen zusätzlich eine
Chroot im Namensraum
source: bereit, um bequemen Zugriff auf die
Originaldaten (kein Schnappschuss) zu ermöglichen und bei der
Verwaltung der Chroot zu helfen. D.h., für eine Chroot namens
wheezy (
chroot:wheezy) wird eine entsprechende Chroot
source:wheezy erstellt. Um mit älteren Versionen von Schroot,
die keine Namensräume unterstützten, kompatibel zu bleiben, wird
zusätzlich eine Chroot mit einer an den Chroot-Namen angehängten
-source-Erweiterung erstellt (d.h.
wheezy-source im vorherigen
Beispiel). Beachten Sie, dass diese Kompatibilitätsnamen in Schroot
1.5.0 entfernt werden, so dass die Verwendung des
source:-Namensraums
der Form mit der
-source-Endung vorgezogen wird. Weitere Einzelheiten
finden Sie unter
schroot(1).
Diese Chroot stellen die folgenden zusätzlichen Optionen bereit:
- source-clone=true|false
- stellt ein, ob die Source-Chroot für diese Chroot
automatisch geklont (erstellt) werden soll. Vorgabe ist true zum
automatischen Klonen, aber, falls gewünscht, kann dies durch Setzen
auf false deaktiviert werden. Falls es deaktiviert ist, kann nicht
auf die Chroot zugegriffen werden.
- source-users=Benutzer1,Benutzer2,…
- eine durch Kommas getrennte Liste von Benutzern, denen der
Zugriff auf die Source-Chroot gestattet ist. Falls sie leer ist oder
weggelassen wird, wird der Zugriff keinen Benutzern gestattet. Dies wird
die Option users in der Source-Chroot werden.
- source-groups=Gruppe1,Gruppe2,…
- eine durch Kommas getrennte Liste von Gruppen, denen der
Zugriff auf die Source-Chroot gestattet ist. Falls sie leer ist oder
weggelassen wird, wird der Zugriff keinen Benutzern gestattet. Dies wird
die Option groups in der Source-Chroot werden.
- source-root-users=Benutzer1,Benutzer2,…
- eine durch Kommas getrennte Liste von Benutzern, denen der
Root-Zugriff auf die Source-Chroot ohne Passwort gestattet ist.
Falls sie leer ist oder weggelassen wird, wird der Root-Zugriff keinen
Benutzern ohne Passwort gestattet (falls ein Benutzer aber in users
steht, kann er mit einem Passwort Zugriff erlangen). Dies wird die Option
root-users in der Source-Chroot werden. Lesen Sie den nachfolgenden
Abschnitt » Sicherheit«.
- source-root-groups=Gruppe1,Gruppe2,…
- eine durch Kommas getrennte Liste von Gruppen, denen der
Root-Zugriff auf die Source-Chroot ohne Passwort gestattet ist.
Falls sie leer ist oder weggelassen wird, wird der Root-Zugriff keinen
Benutzern ohne Passwort gestattet (falls die Gruppe eines Benutzers aber
in groups steht, kann er mit einem Passwort Zugriff erlangen). Dies
wird die Option root-groups in der Source-Chroot werden. Lesen Sie
dazu den nachfolgenden Abschnitt » Sicherheit«.
Die Chroot-Typen »block-device«, »loopback« und
»lvm-snapshot« setzen das Einhängen von Geräten
um. Es handelt sich dabei um Chroots, die das Einhängen eines
Geräts erfordern, um auf die Chroot zugreifen zu können. Diese
Chroots stellen die folgenden zusätzlichen Optionen bereit:
- mount-options=Optionen
- Einhängeoptionen für das
Blockspeichergerät. Dies sind zusätzliche Optionen, die an
mount(8) übergeben werden, zum Beispiel »-o
atime,sync,user_xattr«.
- location=Pfad
- Dies ist der Pfad zur Chroot innerhalb des
Dateisystems auf dem Gerät. Falls das Dateisystem zum Beispiel eine
Chroot in /chroot/sid enthält, würden Sie hier
»/chroot/sid« angeben. Falls die Chroot das Einzige ist, was
sich auf dem Dateisystem befindet, d.h. / das Wurzeldateisystem der
Chroot ist, sollte diese Option leer sein oder ganz weggelassen
werden.
Die Chroot-Typen »block-device«, »directory« und
»loopback« ermöglichen beim Erstellen einer Sitzung die
Benutzung von vereinten Dateisystemen, um das Originaldateisystem mit einem
separaten beschreibbaren Dateisystem zu überlagern. Das
Originaldateisystem hat nur Lesezugriff mit einigen Änderungen, die im
darüberliegenden beschreibbaren Verzeichnis gemacht wurden und das
Originaldateisystem unverändert lassen. Eine Union erlaubt mehrere
Sitzungen, um simultan auf eine einzelne Chroot zuzugreifen und
Änderungen daran vorzunehmen, während die Änderungen
für jede Sitzung privat gehalten werden. Um diese Funktionalität
zu aktivieren, setzen Sie
union-type auf irgendeinen
unterstützten Wert. Falls dies aktiviert ist, wird die Chroot
außerdem eine
Source-Chroot sein, die zusätzliche
Optionen bereitstellt (siehe »
Source-Chroot-Optionen«,
oben). Alle Einträge sind optional.
- union-type=Typ
- setzt den Typ des vereinten Dateisystems. Derzeit
unterstützte Dateisysteme sind »aufs«,
»overlayfs«, »overlay« (seit Linux 4.0+) und
»unionfs«. Die Vorgabe ist »none«, wodurch
diese Funktionalität deaktiviert wird.
- union-mount-options=Optionen
- Einhängeoptionen des vereinten Dateisystems
(Konfiguration des Zweigs), die zum Einhängen des vereinten
Dateisystems mit union-type angegeben werden. Dies ersetzt die
vollständige Zeichenkette »-o« zum Einhängen
und ermöglicht das Erstellen komplexer vereinter Dateisysteme.
Beachten Sie, dass »aufs«, »overlayfs« und
»unionfs« jeweils verschiedene Einhängeoptionen
unterstützen. Hinweis: Die Variablen
»${CHROOT_UNION_OVERLAY_DIRECTORY}« und
»${CHROOT_UNION_UNDERLAY_DIRECTORY}« können benutzt
werden, um auf das darüberliegende beschreibbare
Sitzungsverzeichnis und das darunterliegende Verzeichnis mit Lesezugriff
Bezug zu nehmen, die zum Vereinen dienen. Eine vollständige
Variablenliste finden Sie unter schroot-setup(5).
- union-overlay-directory=Verzeichnis
- gibt das Verzeichnis an, in dem die beschreibbaren
darüberliegenden Sitzungsverzeichnisse erstellt werden. Vorgabe ist
»/var/lib/schroot/union/overlay«.
- union-underlay-directory=Verzeichnis
- gibt das Verzeichnis an, in dem die darunterliegenden
Verzeichnisse mit Lesezugriff erstellt werden. Vorgabe ist
»/var/lib/schroot/union/underlay«.
Zusätzlich zu den oben aufgeführten Schlüsseln ist es
möglich benutzerdefinierte Schlüssel hinzuzufügen. Diese
Schlüssel werden benutzt, um dem Einrichtungsskript zusätzliche
Umgebungsvariablen hinzuzufügen, wenn Einrichtungsskripte
ausgeführt werden. Die einzige Einschränkung ist, dass der
Schlüsselname nur aus alphanumerischen Zeichen und Bindestrichen
bestehen darf, mit einem Buchstaben beginnen und mindestens einen Punkt
enthalten muss. Das heißt, dass er zu dem regulären Ausdruck
»^([a-z][a-z0-9]*\.)+[a-z][a-z0-9-]*$« passt.
Zum Beispiel:
debian.apt-update=true
debian.distribution=unstable
würde die folgende Umgebung setzen:
DEBIAN_APT_UPDATE=true
DEBIAN_DISTRIBUTION=unstable
Beachten Sie, dass es ein Fehler ist, unterschiedliche Schlüsselnamen zu
verwenden, die die selbe Umgebungsvariable durch Mixen von Punkten und
Bindestrichen setzen würden.
Benutzerdefinierte Konfigurationsschlüssel können außerdem
zur Laufzeit unter Benutzung der Option
--option geändert
werden. Aus Sicherheitsgründen können jedoch nur
ausgewählte Schlüssel geändert werden. Diese
Schlüssel werden mittels der folgenden Optionen angegeben:
- user-modifiable-keys=Schlüssel1,Schlüssel2,…
- setzt die Schlüssel, die Benutzer unter Benutzung
von --option ändern können.
- root-modifiable-keys=Schlüssel1,Schlüssel2,…
setzt die Schlüssel, die der
- Root-Benutzer mittels --option ändern kann.
Beachten Sie, dass der Root-Benutzer die in user-modifiable-keys
angegebenen Schlüssel zusätzlich zu den hier angegebenen
verwenden kann.
einige Schlüssel können in mehrere Sprachen lokalisiert sein. Dies
wird durch Hinzufügen des Local-Namens in eckigen Klammern nach dem
Schlüsselnamen erreicht, zum Beispiel:
description[en_GB]= British English translation
Dies wird den Schlüssel
description für die Locale en_GB
lokalisieren.
description[fr]= Traduction française
Dies wird den Schlüssel
description für alle
französischen Locales lokalisieren.
A number of characters or words are not permitted in a chroot name, session name
or configuration filename. The name must begin with a lowercase or an
uppercase letter, or a digit. The remaining characters may additionally be
dash (‘-’), period (‘.’), or underscore
(‘_’).
The rationale for these restrictions is as follows:
- Generic
- Unfortunately, not all the places that deal with chroot
names can handle non-printable and other characters properly, and it's
hard to update all of them. This is mostly about the various shell scripts
where it's also unwise to assume authors always create safe code.
- »dpkg-old«
- »dpkg-dist« »
dpkg-new« » dpkg-tmp« Diese Namen
erscheinen möglicherweise nicht am Ende eines Namens. Dies sind
gesicherte Kopien von Conffiles, die von der Paketverwaltung Dpkg benutzt
und daher ignoriert werden.
Beachten Sie, dass es ein
ernstes Sicherheitsrisiko ist, nicht
vertrauenswürdigen Benutzern Root-Zugriff zu gewähren! Obwohl
der nicht vertrauenswürdige Benutzer nur Root-Zugriff innerhalb der
Chroot hat, gibt es in der Praxis viele offensichtliche Wege aus der Chroot
auszubrechen und Dienste auf dem Wirtsystem zu zerstören. Wie immer
wird dies auf
Vertrauen hinauslaufen.
Geben Sie keinen Benutzern Root-Zugriff, denen Sie nicht trauen
würden, wenn sie Root-Zugriff auf das Wirtsystem hätten.
Abhängig davon, welche Profile Sie mit der Option
script-config
konfiguriert haben, werden unterschiedliche Dateisysteme innerhalb der Chroot
eingehängt und es werden unterschiedliche Dateien vom Wirtsystem in die
Chroot kopiert. Einige Profile werden
/dev vom Wirtsystem
einhängen, andere nicht. Einige Profile werden außerdem
zusätzliche Teile des Wirtdateisystems mit der Option
»bind« einhängen, um die Benutzung verschiedener
Funktionen zu ermöglichen, einschließlich des
Home-Verzeichnisses des Benutzers und bestimmter Teile von
/var.
Prüfen Sie die Datei
fstab des Profils, um sich zu versichern,
was eingehängt wird und die anderen Profildateien, um zu sehen, welche
Dateien und Systemdatenbanken in die Chroot kopiert werden. Wählen Sie
ein anderes Profil aus oder bearbeiten Sie die Dateien, um weiter
einzugrenzen, was innerhalb der Chroot verfügbar gemacht wird.
Es gibt einen Kompromiss zwischen Sicherheit (die Chroot so klein wie
möglich halten) und Benutzerfreundlichkeit (die manchmal Zugriff auf
Teile des Wirtdateisystems erfordert). Die unterschiedlichen Profile gehen
unterschiedliche Kompromisse ein und es ist wichtig, dass Sie beurteilen,
welchen Kompromiss aus Sicherheit und Benutzerfreundlichkeit Sie
benötigen.
# Beispielkonfiguration
[sid]
type=plain
description=Debian unstable
description[fr_FR]=Debian instable
directory=/srv/chroot/sid
priority=3
users=jim
groups=sbuild
root-users=rleigh
aliases=unstable,default
[etch]
type=block-device
description=Debian testing (32-bit)
priority=2
groups=users
#groups=sbuild-security
aliases=testing
device=/dev/hda_vg/etch_chroot
mount-options=-o atime
personality=linux32
[sid-file]
type=file
description=Debian sid file-based chroot
priority=3
groups=sbuild
file=/srv/chroots/sid.tar.gz
[sid-snapshot]
type=lvm-snapshot
description=Debian unstable LVM snapshot
priority=3
groups=sbuild
users=rleigh
source-root-users=rleigh
source-root-groups=admin
device=/dev/hda_vg/sid_chroot
mount-options=-o atime,sync,user_xattr
lvm-snapshot-options=--size 2G
- /etc/schroot/schroot.conf
- die systemweite Chroot-Definitionsdatei. Diese Datei muss
dem Benutzer Root gehören und darf nicht durch andere beschreibbar
sein.
- /etc/schroot/chroot.d
- Zusätzliche Chroot-Definitionen können unter
diesem Verzeichnis in »files« abgelegt werden. Sie werden
auf exakt die selbe Weise wie /etc/schroot/schroot.conf betrachtet.
Jede Datei kann eine oder mehrere Chroot-Definitionen enthalten.
Das Verzeichnis
/etc/schroot/default enthält die von
Einrichtungsskripten benutzten Standardeinstellungen.
- config
- Hauptkonfigurationsdatei, die von Einrichtungsskripten
gelesen wird. Das Format dieser Datei wird in
schroot-script-config(5) beschrieben. Dies ist der Standardwert
für den Schlüssel script-config. Beachten Sie, dass
dies früher /etc/schroot/script-defaults hieß. Auf
die folgenden Werte wird standardmäßig verwiesen:
- copyfiles
- eine Liste von Dateien, die vom Wirtsystem in die Chroot
kopiert wird. Beachten Sie, dass diese früher
/etc/schroot/copyfiles-defaults hieß.
- fstab
- eine Datei im Format, das in fstab(5) beschrieben
wird. Sie wird benutzt, um Dateisysteme innerhalb der Chroot
einzuhängen. Der Einhängeort ist relativ zum
Wurzelverzeichnis der Chroot. Beachten Sie, dass diese früher
/etc/schroot/mount-defaults hieß.
- nssdatabases
- Systemdatenbanken (wie in /etc/nsswitch.conf auf
GNU/Linux-Systemen beschrieben), die vom Wirtsystem in die Chroot kopiert
werden. Beachten Sie, dass diese früher
/etc/schroot/nssdatabases-defaults hieß.
Roger Leigh
Copyright © 2005-2012 Roger Leigh <
[email protected]>
schroot ist freie Software. Sie können es unter den Bedingungen
der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder
gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder
späteren Version.
sbuild(1),
schroot(1),
schroot-script-config(5),
schroot-faq(7),
mount(8).