SCHROOT(1) 2022 SCHROOT(1) BEZEICHNUNG schroot - eine Chroot-Umgebung sicher betreten UBERSICHT schroot [-h|--help | -V|--version | -l|--list | -i|--info | --config | --location | --automatic-session | -b|--begin-session | --recover-session | -r|--run-session | -e|--end-session] [-f|--force] [-n Sitzungsname|--session-name=Sitzungsname] [-d Verzeichnis|--directory=Verzeichnis] [-u Benutzer|--user=Benutzer] [-p|--preserve-environment] [-s Shell|--shell=Shell] [-q|--quiet | -v|--verbose] [-c Chroot|--chroot=Chroot | [--all | --all-chroots | --all-source-chroots | --all-sessions] [--exclude-aliases]] [-o|--option=Schlussel=Wert] [--] [BEFEHL [ ARG1 [ ARG2 [ ARGn]]]] BESCHREIBUNG schroot ermoglicht dem Benutzer einen Befehl oder eine Login-Shell in einer Chroot-Umgebung auszufuhren. Falls kein Befehl angegeben wurde, wird eine Login-Shell im aktuellen Arbeitsverzeichnis des Benutzers innerhalb der Chroot gestartet. Der Befehl ist ein Programm plus so viele optionale Argumente wie benotigt. Jedes Argument kann separat in Anfuhrungszeichen gesetzt werden. Das Verzeichnis, in dem der Befehl oder die Login-Shell ausgefuhrt wird, hangt vom Kontext ab. Eine vollstandige Beschreibung finden Sie nachfolgend unter der Option --directory. Jede Chroot-Benutzung wird in den Systemprotokollen vermerkt. In einigen Situationen kann es notig sein, dass sich der Benutzer selbst authentifizieren muss; lesen Sie dazu den nachfolgenden Abschnitt >>Authentifizierung<<. Falls keine Chroot angegeben wurde, wird als Ausweichmoglichkeit der Name oder Alias >>default<< benutzt. Dies ist gleichbedeutend mit >>--chroot=default<<. UBERBLICK Es ist ofters notig, Programme in einer virtualisierten Umgebung auszufuhren, als direkt auf dem Wirtsystem. Anders als andere Virtualisierungssysteme wie kvm oder Xen virtualisiert Schroot nicht das ganze System; es virtualisiert nur das Dateisystem und einige Teile des Dateisystems konnen immer noch mit dem Wirt gemeinsam benutzt werden. Es ist daher schnell, leichtgewichtig und flexibel. Es virtualisiert jedoch keine anderen Aspekte des Systems wie gemeinsam genutzten Speicher, Netzwerk, Gerate etc. und konnte daher, abhangig von der geplanten Verwendung, weniger sicher sein als andere Systeme. Einige Beispiele existierender Verwendungen von Schroot beinhalten: o Ausfuhrung eines nicht vertrauenswurdigen Programms in einer Sandbox, so dass es keine Dateien auf dem Wirtsystem beeintrachtigt. Dies kann ausserdem benutzt werden, um den Schaden zu begrenzen, den ein kompromittierter Dienst dem Wirt zufugen kann. o Benutzung einer definierten und sauberen Umgebung, um die Reproduzierbarkeit und Integritat einer gegebenen Aufgabe zu garantieren o Verwendung unterschiedlicher Versionen eines Betriebssystems oder sogar unterschiedlicher Betriebssysteme zusammen, z.B. verschiedener GNU/Linux-Distributionen o Ausfuhren von 32-Bit-Programmen mittels einer 32-Bit-Chroot auf einem 64-Bit-Wirtsystem o Automatisches Bauen von Debian-Paketen mittels sbuild(1), das jedes Paket in einem unberuhrten Chroot-Schnappschuss baut, wenn LVM-Schnappschusse oder Unions verwendet werden. o Unterstutzung mehrerer System-Images in einer Cluster-Einrichtung, wobei das Andern des Basis-Images zeitintensiv ist und/oder all die von Benutzern benotigten Konfigurationen zu unterstutzen schwierig ist: Verschiedene Chroots konnen all die verschiedenen benotigten Konfigurationen unterstutzen und Benutzern des Clusters kann Zugriff auf die von ihnen benotigten Chroots gegeben werden (was Root-Zugriff fur vertrauenswurdige Benutzer zum Verwalten ihrer eigenen Images beinhalten kann). Eine Chroot kann durch Ausfuhren von chroot(8) direkt durch Root benutzt werden, aber normale Anwender konnen diesen Befehl nicht verwenden. schroot gibt mit dem gleichen Mechanismus normalen Benutzern Zugriff auf Chroots, aber mit mehreren zusatzlichen Funktionen. Obwohl Schroot genau wie chroot(8) ein Verzeichnis als Chroot benutzt, erfordert es nicht, das es sich dabei um ein normales Verzeichnis im Dateisystem handelt. Obwohl dies vorgegeben ist, kann die Chroot ebenso aus einer Datei, einem Dateisystem einschliesslich LVM- und Btrfs-Schnappschusse sowie Loopback-Mounts bestehen oder aus UnionFS-Einblendungen zusammengestellt sein. Da es vom Benutzer erweiterbar ist, wird der Gultigkeitsbereich fur das Erstellen von Chroots aus verschiedenen Quellen nur durch Ihre Fantasie begrenzt. Schroot fuhrt Rechteprufungen durch und ermoglicht zusatzlich eine automatisierte Einrichtung der Chroot-Umgebung, wie das Einhangen zusatzlicher Dateisysteme oder anderer Konfigurationsaufgaben. Diese automatisierte Einrichtung wird durch die Aktion von Einrichtungsskripten erledigt, die zum Durchfuhren der benotigten Aktionen angepasst und erweitert werden konnen. Typische Aktionen beinhalten das Einhangen des Home-Verzeichnisses des Benutzers, das Einrichten des Netzwerkzugangs und von Systemdatenbanken und sogar das Starten von Diensten. Diese konnen wiederum vollstandig durch den Admin angepasst werden. Die Einrichtungsskripte werden fur alle Typen von Chroots ausgefuhrt mit Ausnahme des Typs >>plain<<, des einfachsten Chroot-Typs, der gar keine automatisierten Einrichtungsfunktionen bietet. Die Einrichtung von Chroots wird ausfuhrlicher in schroot.conf(5) behandelt. OPTIONEN schroot akzeptiert die folgenden Optionen: Aktionen -h, --help zeigt eine Zusammenfassung der Hilfe. -V, --version gibt Versionsinformationen aus. -l, --list fuhrt alle verfugbaren Chroots auf. -i, --info gibt detaillierte Informationen uber die angegebenen Chroots aus. --config gibt die Konfiguration der angegebenen Chroots aus. Dies ist nutzlich, um zu prufen, ob die gerade benutzte Konfiguration die selbe ist, wie die in der Konfigurationsdatei. Jegliche Kommentare der Originaldatei werden fehlen. --location gibt dem Speicherort (Pfad) der angegebenen Chroots aus. Beachten Sie, dass Chroot-Typen, die nur innerhalb einer Sitzung benutzt werden konnen, keinen Speicherort haben werden, bis sie aktiv sind. Allgemeine Optionen -q, --quiet gibt nur wichtige Nachrichten aus. -v, --verbose gibt alle Nachrichten aus Chroot-Auswahl -c, --chroot=Chroot gibt eine Chroot oder aktive Sitzung an, die benutzt werden soll. Diese Option kann zur Angabe mehrerer Chroots mehrfach angegeben werden. In diesem Fall sind die Auswirkungen ahnlich --all. Dem Chroot-Namen kann ein Namensraum vorangestellt werden; siehe den nachfolgenden Abschnitt >>Chroot-Namensraume<<. -a, --all wahlt alle Chroots, Source-Chroots und aktiven Sitzungen aus. Wenn ein Befehl angegeben wurde, wird der Befehl in allen Chroots, Source-Chroots und aktiven Sitzungen ausgefuhrt. Falls --info benutzt wurde, werden Informationen uber alle Chroots angezeigt. Diese Option ist bei Verwendung einer Login-Shell nicht sinnvoll (wird ausgefuhrt, falls kein Befehl angegeben wurde). Diese Option entspricht >>--all-chroots --all-source-chroots --all-sessions<<. --all-chroots wahlt alle Chroots aus; identisch mit --all, ausser, dass Source-Chroots und aktive Sitzungen nicht berucksichtigt werden. --all-sessions wahlt alle aktiven Sitzungen aus; identisch mit --all, ausser, dass Chroots und Source-Chroots nicht berucksichtigt werden. --all-source-chroots wahlt alle Source-Chroots aus; identisch mit --all, ausser, dass Chroots und Sitzungen nicht berucksichtigt werden. --exclude-aliases wahlt keine Aliase zusatzlich zu Chroots aus. Dies stellt sicher, dass nur echte Chroots ausgewahlt sind und nur einmal aufgefuhrt werden. Chroot-Umgebung -d, --directory=Verzeichnis wechselt nach Verzeichnis innerhalb der Chroot, bevor der Befehl oder die Login-Shell ausgefuhrt wird. Falls Verzeichnis nicht verfugbar ist, wird Schroot mit einem Fehlerstatus beendet. Das Standardverhalten ist wie folgt (alle Verzeichnispfade liegen innerhalb der Chroot): Eine Login-Shell wird im aktuellen Arbeitsverzeichnis ausgefuhrt. Falls dies nicht verfugbar ist, wird es der Reihe nach $HOME probieren (wenn --preserve-environment benutzt wird), dann das Home-Verzeichnis des Benutzers und dann / innerhalb der Chroot. Falls keines der Verzeichnisse verfugbar ist, wird Schroot mit einem Fehlerstatus beendet. -u, --user=Benutzer wird als anderer Benutzer ausgefuhrt. Standardmassig wird es als aktueller Benutzer ausgefuhrt. Falls benotigt, kann vom Benutzer verlangt werden, dass er sich selbst mit einem Passwort authentifiziert. Weitere Informationen finden Sie im nachfolgenden Abschnitt >>Authentifizierung<<. -p, --preserve-environment bewahrt die Umgebung des Benutzers innerhalb der Chroot-Umgebung auf. Standardmassig wird eine saubere Umgebung benutzt. Diese Option kopiert die ganze Benutzerumgebung und setzt sie in der Sitzung. Die erlaubten Umgebungsvariablen sind Gegenstand mehrerer Einschrankungen. Siehe den nachfolgenden Abschnitt >>Umgebung<<. -s, --shell=Shell benutzt Shell als Login-Shell. Wenn eine Login-Shell ausgefuhrt wird, werden mehrere mogliche Shells in dieser Reihenfolge berucksichtigt: der Befehl in der Umgebungsvariable SHELL (falls --preserve-environment benutzt wird oder preserve-environment aktiviert ist, die Shell des Benutzers in der Datenbank >>passwd<<, /bin/bash und am Ende /bin/sh. Diese Option setzt diese Liste ausser Kraft und wird die angegebene Shell verwenden. Diese Option setzt ausserdem den Konfigurationsschlussel shell ausser Kraft, falls gesetzt. -o, --option=Schlussel=Wert setzt eine Option. Der Wert ausgewahlter Schlussel in schroot.conf kann mittels dieser Option geandert werden. Der Schlussel muss im Konfigurationsschlussel user-modifiable-keys in schroot.conf vorhanden sein oder zusatzlich der Schlussel user-modifiable-keys, falls es als Root-Benutzer ausgefuhrt wird (oder darauf umgeschaltet wird). Der hier gesetzte Schlussel und Wert wird in der Umgebung der Einrichtungsskripte gesetzt und konnte daher benutzt werden, um die Chroot auf Sitzungsbasis anzupassen. Sitzungsaktionen --automatic-session startet eine Sitzung, fuhrt sie aus und beendet sie automatisch. Dies ist die Standardaktion und muss daher nicht bei normalen Transaktionen angegeben werden. -b, --begin-session startet eine Sitzung. Ein eindeutiger Sitzungsbezeichner (Sitzungskennung) wird auf der Standardausgabe zuruckgegeben. Die Sitzungskennung wird zum Benutzen der anderen Sitzungsoptionen benotigt. Beachten Sie, dass der Sitzungsbezeichner mit der Option --session-name angegeben werden kann. --recover-session stellt eine existierende Sitzung wieder her. Falls eine existierende Sitzung nicht mehr vorhanden war, zum Beispiel weil sie wegen eines Neustarts nicht mehr eingehangt war, wird diese Option die Sitzung wieder zur Benutzung verfugbar machen, beispielsweise durch erneutes Einhangen. Die Sitzungskennung wird mit der Option --chroot angegeben. -r, --run-session fuhrt eine existierende Sitzung aus. Die Sitzungskennung wird mit der Option --chroot angegeben. -e, --end-session beendet eine existierende Sitzung. Die Sitzungskennung wird mit der Option --chroot angegeben. Sitzungsoptionen -n, --session-name=Sitzungsname benennt eine Sitzung. Der angegebene Sitzungsname ersetzt den Standardsitzungsnamen, der eine automatisch erzeugte Sitzungskennung enthalt. Der Sitzungsname darf keinen Namensraumbezeichner enthalten, da Sitzungen immer im Namensraum >>session:<< erstellt werden. Der Sitzungsname ist ausserdem Gegenstand der in schroot.conf(5) dokumentierten Chroot-Namensbeschrankungen. -f, --force erzwingt eine Sitzungstransaktion sogar dann, wenn sie andernfalls fehlschlagen wurde. Dies kann benutzt werden, um eine Sitzung gewaltsam zu beenden, auch wenn sie aktive Benutzer hat. Dies gewahrleistet nicht, dass die Sitzung ordnungsgemass beendet wird. Es kann zum Beispiel vorkommen, dass Dateisysteme nicht ausgehangt werden. Trenner -- beendet die Optionen; wird benutzt, um das Ende der Schroot-Optionen anzuzeigen. Alle nachfolgenden Optionen werden an den ausgefuhrten Befehl statt an Schroot ubergeben. AUTHENTIFIZIERUNG Falls der Benutzer kein erlaubter Benutzer oder Mitglied der erlaubten Gruppen (oder beim Wechsel zu Root, kein erlaubter Root-Benutzer oder Mitglied der erlaubten Root-Gruppen) fur die angegebene(n) Chroot(s) ist, wird die Erlaubnis sofort verweigert. Falls sich der Benutzer andert und der Benutzer, der den Befehl ausfuhrt, Zugriff hat, ist es notig, dass sich der Benutzer selbst mittels der Anmeldedaten des Benutzers authentifizieren muss, zu dem gewechselt wird. Auf Systemen, die anschliessbare Authentifizierungsmodule (Pluggable Authentication Modules, PAM) unterstutzen, wird Schroot PAM zur Authentifizierung und Autorisierung von Benutzern verwenden. Falls dies der Fall ist, wird Schroot nach einem Passwort fragen, wenn erforderlich. Falls PAM nicht verfugbar ist, wird jegliche Authentifizierung automatisch fehlschlagen (Benutzerwechsel ohne PAM wird nicht unterstutzt). Beachten Sie, dass dem Benutzer Root, falls PAM benutzt wird, standardmassig keine Sonderrechte im Programm gewahrt werden. Die Standard-PAM-Konfiguration erlaubt Root jedoch die Anmeldung ohne Passwort (pam_rootok.so). Dies kann aber deaktiviert sein, um Root daran zu hindern auf alle Chroots zuzugreifen, es sei denn, dies ist eigens erlaubt. In einer derartigen Situation muss Root zu den erlaubten Benutzern oder Gruppen hinzugefugt werden, wie andere Benutzer und Gruppen. Falls PAM nicht verfugbar ist, wird es dem Benutzer Root erlaubt sein, auf alle Chroots zuzugreifen, sogar, wenn nicht explizit Zugriff gewahrt wurde. CHROOT-NAMENSRAUME Namensraumgrundlagen Es gibt drei unterschiedliche Chroot-Typen: normale Chroots, Source-Chroots und Sitzungs-Chroots. Diese unterschiedlichen Typen von Chroots werden in unterschiedliche Namensraume aufgeteilt. Ein Namensraum ist ein Prafix eines Chroot-Namens. Derzeit gibt es drei Namensraume: >>chroot:<<, >>source:<< und >>session:<<. Benutzen Sie --list --all, um alle verfugbaren Chroots in allen Namensraumen aufzufuhren. Da >>:<< als Trenner zwischen Namensraumen und Chroot-Namen benutzt wird, ist es nicht erlaubt, dieses Zeichen in Chroot-Namen zu verwenden. Abhangig davon, welche Aktion Sie von Schroot abfragen, kann es nach der Chroot in einem der drei Namensraume nachsehen oder es konnte ein bestimmter Namensraum angegeben werden. Eine Chroot mit Namen >>sid<< heisst zum Beispiel tatsachlich >>chroot:sid<<, falls der Namensraum enthalten ist, der Namensraum kann aber fur die meisten Aktionen weggelassen werden. Source-Chroots Einige Chroot-Typen, zum Beispiel LVM- und Btrfs-Schnappschusse, stellen durch die Sitzung verwaltete Copy-On-Write-Schnappschusse der Chroot bereit. Diese stellen ausserdem eine Source-Chroot bereit, um einen einfachen Zugriff auf das Dateisystem zu ermoglichen, das als Quelle fur Schnappschusse verwendet wird. Dies sind ebenso normale Chroots, bei denen nur die Schnappschusse deaktiviert sind. Fur eine Chroot mit Namen >>sid-snapshot<< (d.h. mit einem vollqualifizierten Namen >>chroot:sid-snapshot<<) wird es auch eine entsprechende Source-Chroot mit Namen >>source:sid-snapshot<< geben. Fruhere Versionen von Schroot stellten Source-Chroots mit einer Endung >>-source<< zur Verfugung. Diese werden aus Kompatibilitatsgrunden ebenfalls bereitgestellt. In diesem Beispiel ware dies >>chroot:sid-snapshot-source<<. Diese Kompatibilitatsnamen werden in zukunftigen Versionen fallengelassen, daher sollten Programme und Skripte zur Benutzung namensraumqualifizierter Namen wechseln, statt die alte Endung zu verwenden. Sitzungs-Chroots Alle Sitzungen, die mit --begin-session erzeugt wurden, werden innerhalb des Namensraums >>session:<< platziert. Ein Sitzungsname mit --session-name kann irgendeinen Namen haben, sogar den selben Namen wie die Chroot, aus der er erstellt wurde, vorausgesetzt, dass er innerhalb dieses Namensraums eindeutig ist. Dies war in fruheren Versionen von Schroot, die keine Namensraume hatten, nicht erlaubt. Aktionen und Standardnamensraume Alle Aktionen mit Ausnahme einiger Sitzungsaktionen benutzen >>chroot:<< als Standardnamensraum. --run-session, --recover-session und --end-session verwenden stattdessen >>session:<< als Standardnamensraum, da diese Aktionen mit Sitzungs-Chroots arbeiten. Das Ergebnis ist, dass der Namensraum normalerweise nie benotigt wird, es sei denn, Sie mochten mit einer Chroot in einem anderen als dem vorgegebenen Namensraum arbeiten, wie etwa wenn eine Source-Chroot benutzt wird. Um die Chroot-Auswahl unmissverstandlich zu machen, ist es immer moglich, den vollstandigen Namen einschliesslich des Namensraums zu verwenden, sogar wenn dies nicht strikt erforderlich ist. LEISTUNG Auf einigen Dateisystemen, zum Beispiel Btrfs, ist die Leistung wegen der vielen durchgefuhrten Fsync-Transaktionen schlecht, wenn Dpkg ausgefuhrt wird. Dies kann durch die Installation des Pakets >>eatmydata<< und anschliessendem Hinzufugen von >>eatmydata<< zum Konfigurationsschlussel command-prefix, der alle Fsync-Transaktionen deaktiviert, gemildert werden. Beachten sie, dass dies in Schnappschuss-Chroots getan werden sollte, in denen Datenverlust kein Problem darstellt. Dies ist nutzlich, wenn eine Chroot zum Beispiel zum Bauen von Paketen benutzt wird. RESERVEVERZEICHNISSE Schroot wird ein geeignetes Verzeichnis auswahlen, das innerhalb der Chroot benutzt werden soll, abhangig davon, ob eine interaktive Login-Shell benutzt werden soll, welcher Befehl ausgefuhrt oder ob zusatzlich die Option --directory verwendet wird. Im Fall, dass Befehle direkt ausgefuhrt werden oder explizit ein Verzeichnis angegeben wird, wird aus Sicherheits- und Konsistenzgrunden nur ein Verzeichnis benutzt, wahrend fur eine Login-Shell mehrere Moglichkeiten ausprobiert werden konnen. Die folgenden Unterabschnitte fuhren die Reserveabfolge fur jeden Fall auf. CWD ist das aktuelle Arbeitsverzeichnis, DIR ist das mit --directory angegebene Verzeichnis. Login-Shell +---------------------+------------------------------------------+ |Ubergang | | |(Rechner -> Chroot) | Kommentar | +---------------------+------------------------------------------+ |CWD -> CWD | normales Verhalten (falls --directory | | | nicht benutzt wird) | |CWD -> $HOME | falls CWD nicht existiert und | | | --preserve-environment benutzt wird | |CWD -> passwd pw_dir | falls CWD nicht existiert (oder | | | --preserve-environment benutzt wird und | | | $HOME nicht existiert) | |CWD -> / | keins davon existiert | |FAIL | falls / nicht existiert | +---------------------+------------------------------------------+ Befehl +--------------------+------------------------------------------+ |Ubergang | | |(Rechner -> Chroot) | Kommentar | +--------------------+------------------------------------------+ |CWD -> CWD | normales Verhalten (falls --directory | | | nicht benutzt wird) | |FAIL | falls CWD nicht existiert | +--------------------+------------------------------------------+ Unter irgendwelchen Umstanden kann es vorkommen, dass keine Reserve existiert. --directory benutzt +--------------------+------------------------------------------+ |Ubergang | | |(Rechner -> Chroot) | Kommentar | +--------------------+------------------------------------------+ |CWD -> VERZ | normales Verhalten | |FAIL | falls VERZ nicht existiert | +--------------------+------------------------------------------+ Unter irgendwelchen Umstanden kann es vorkommen, dass keine Reserve existiert. Fehlersuche Beachten Sie, dass --debug=Mitteilung die interne Reserveliste anzeigen wird, die fur diese Sitzung berechnet wurde. BEISPIELE Auffuhren verschiedener Chroots % schroot -l chroot:default chroot:etch chroot:sid chroot:testing chroot:unstable Informationen uber die Chroot abfragen % schroot -i -c sid ------ Chroot ------ Name sid Beschreibung Debian sid (unstable) Typ plain Prioritat 3 Benutzer rleigh Gruppen sbuild Root-Benutzer Root-Gruppen sbuild Alias-Kennungen unstable unstable-sbuild unstable-powerpc-sbuild Umgebungsfilter ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG| KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN| NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO| TERMINFO_DIRS|TERMPATH)$ Einr.-Skripte ausf. true Skript-Konfiguration script-defaults Verwaltete Sitzung true Personlichkeit linux32 Ort /srv/chroot/sid Verwenden Sie --all beziehungsweise mehrfach -c, um alle oder mehrere Chroots zu benutzen. Befehle in einer Chroot ausfuhren % schroot -c sid /bin/ls [sid chroot] Befehl >>/bin/ls<< gestartet CVS sbuild-chroot.c sbuild-session.h schroot.conf.5 Makefile sbuild-chroot.h schroot.1 schroot.conf.5.in Makefile.am sbuild-config.c schroot.1.in Makefile.in sbuild-config.h schroot.c pam sbuild-session.c schroot.conf % schroot -c sid -- ls -1 | head -n 5 [sid chroot] Befehl >>ls -1<< gestartet ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL benutzt --, um zu ermoglichen, dass Optionen, die im Befehl mit >>-<< oder >>--<< beginnen, in der Chroot ausgefuhrt werden. Dies verhindert, dass sie als Optionen fur Schroot selbst interpretiert werden. Beachten Sie, dass die obere Zeile auf die Standardfehlerausgabe und die ubrigen Zeilen auf die Standardausgabe ausgegeben werden. Dies ist beabsichtigt, so dass Programmausgaben von in der Chroot ausgefuhrten Befehlen weiter- und umgeleitet werden konnen, wenn notig. Die Daten werden die selben sein, wie bei der Ausfuhrung des Befehls direkt auf dem Wirtsystem. Benutzer wechseln % schroot -c sid -u root Passwort: [sid chroot] (rleigh->root) Login-Shell >>/bin/bash<< gestartet: # Falls der Benutzer >>rleigh<< in root-users in /etc/schroot/schroot.conf war oder zu einer der Gruppen in root-groups gehorte, wurde ihm Root-Zugriff gewahrt, aber der PAM-Autorisierungsschritt wird immer noch angewandt. Sitzungen Es konnte notig sein, dass eine Chroot mehr als einen Befehl ausfuhrt. Dies ist hauptsachlich dann notig, wenn die Chroot direkt von einem LVM-LV oder einer Datei auf der Platte erstellt wurde, um sie wahrend eine Aufgabe (oder ein Satz von Aufgaben) durchgefuhrt wird, bestandig zu machen. Zu diesem Zweck existieren Sitzungen. Fur einfache Chroot-Typen wie >>plain<< und >>directory<< konnen Sitzungen erstellt werden, sind aber nicht zwingend notig. Lassen Sie uns starten, indem wir uns eine sitzungsfahige Chroot ansehen: % schroot -i -c sid-snap ------ Chroot ------ Name sid-snap Beschreibung Debian sid snapshot Typ lvm-snapshot Prioritat 3 Benutzer maks rleigh Gruppen sbuild Root-Benutzer Root-Gruppen sbuild Aliase-Kennungen Umgebungsfilter ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG| KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN| NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO| TERMINFO_DIRS|TERMPATH)$ Einr.-Skripte ausf. true Skript-Konfiguration script-defaults Verwaltete Sitzung true Personlichkeit linux Gerat /dev/hda_vg/sid_chroot Einbindungsoptionen -o atime,async,user_xattr Quellbenutzer Quellgruppen root rleigh Quell-Root-Benutzer Quell-Root-Gruppen root rleigh LVM-Schnappschuss-Opt. --size 2G -c 128 Beachten Sie, dass die Option Verwaltete Sitzung auf >>true<< gesetzt ist. Dies ist eine Voraussetzung, um die Sitzungsverwaltung zu benutzen und wird von den meisten Chroot-Typen unterstutzt. Als nachstes werden wir eine neue Sitzung erstellen: % schroot -b -c sid-snap sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f Die Sitzungskennung der neu erstellten Sitzung wird auf der Standardausgabe zuruckgegeben. Es ist ublich, sie wie hier gezeigt zu speichern: % SESSION=$(schroot -b -c sid-snap) % echo $SESSION sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f Die Sitzung kann genauso wie jede normale Chroot benutzt werden. Die Sitzung sieht etwa so aus: % schroot -i -c sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f ------ Session ------ Name sid-snap-46195b04-0893-49bf-beb8-0d\ 4ccc899f0f Beschreibung Debian sid snapshot Typ lvm-snapshot Prioritat 3 Benutzer maks rleigh Gruppen sbuild Root Users Root-Gruppen root sbuild Alias-Kennungen Umgebungsfilter ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG| KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN| NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO| TERMINFO_DIRS|TERMPATH)$ Einr.-Skripte ausf. true Skript-Konfiguration script-defaults Verwaltete Sitzung true Personlichkeit linux Einbindungsort /var/lib/schroot/mount/sid-snap-461\ 95b04-0893-49bf-beb8-0d4ccc899f0f Pfad /var/lib/schroot/mount/sid-snap-461\ 95b04-0893-49bf-beb8-0d4ccc899f0f Einzubindendes Gerat /dev/hda_vg/sid-snap-46195b04-0893-\ 49bf-beb8-0d4ccc899f0f Gerat /dev/hda_vg/sid_chroot Einbindungsoptionen -o atime,async,user_xattr Quellbenutzer Quellgruppen root rleigh Quell-Root-Benutzer Quell-Root-Gruppen root rleigh LVM-Schnappsch.-Gerat /dev/hda_vg/sid-snap-46195b04-0893-\ 49bf-beb8-0d4ccc899f0f LVM-Schnappschuss-Opt. --size 2G -c 128 Nun wurde die Sitzung erstellt, Befehle konnen darin ausgefuhrt werden: % schroot -r -c sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f -- \ uname -sr I: [sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f chroot] Befehl \ >>uname -sr<< gestartet Linux 2.6.18-3-powerpc % schroot -r -c $SESSION -- uname -sr I: [sid-snap-fe170af9-d9be-4800-b1bd-de275858b938 chroot] Befehl \ >>uname -sr<< gestartet Linux 2.6.18-3-powerpc Wenn alle Befehle, die in der Sitzung ausgefuhrt werden sollen, durchgefuhrt wurden, kann die Sitzung beendet werden: % schroot -e -c sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f % schroot -e -c $SESSION Letztendlich konnen Sitzungsnamen lang und unhandlich sein. Statt die automatisch erzeugte Sitzungskennung zu benutzen, kann ein Name angegeben werden. % schroot -b -c sid-snap -n mein-Sitzungsname mein-Sitzungsname FEHLERBEHEBUNG Falls etwas nicht funktioniert und aus den Fehlermeldungen nicht hervorgeht, was falsch ist, versuchen Sie die Option --debug=Stufe zu benutzen, um Debug-Meldungen einzuschalten. Dies gibt eine grosse Menge weiterer Informationen. Gultige Debug-Stufen sind >>none<< und >>notice<<, >>info<<, >>warning<< und >>critical<< nach zunehmender Schwere geordnet. Je niedriger der Schweregrad desto mehr wird ausgegeben. Falls Sie immer noch Schwierigkeiten haben, konnen die Entwickler auf der Mailingliste kontaktiert werden: Debian-Buildd-Tools-Entwickler FEHLER Auf den Architekturen mips und mipsel haben Linux-Kernel bis einschliesslich Version 2.6.17 kaputte personality(2)-Unterstutzung, die dazu fuhrt, dass das Setzen der Personlichkeit fehlschlagt. Dies wird als ein >>Transaktion nicht erlaubt<<-Fehler (EPERM) gesehen. Um dieses Problem zu umgehen setzen Sie personality auf >>undefined<< oder fuhren Sie ein Upgrade auf einen aktuelleren Kernel durch. UMGEBUNGSVARIABLEN Standardmassig werden die Umgebungsvariablen nicht aufbewahrt. Die folgenden sind definiert: HOME, LOGNAME, PATH, SHELL, TERM (aufbewahrt, falls bereits definiert) und USER. Die Umgebungsvariablen SCHROOT_COMMAND, SCHROOT_USER, SCHROOT_GROUP, SCHROOT_UID und SCHROOT_GID, die innerhalb der Chroot gesetzt sind, geben den ausgefuhrten Befehl, den Benutzernamen, den Gruppennamen, die Benutzer- beziehungsweise die Gruppenkennung an. Zusatzlich geben die Umgebungsvariablen SCHROOT_SESSION_ID, SCHROOT_CHROOT_NAME und SCHROOT_ALIAS_NAME die Sitzungskennung, den Original-Chroot-Namen vor dem Erstellen der Sitzung beziehungsweise den Alias, mit dem die ursprunglich ausgewahlte Chroot identifiziert wird, an. Die folgenden moglicherweise gefahrlichen Umgebungsvariablen sind aus Sicherheitsgrunden entfernt: BASH_ENV, CDPATH, ENV, HOSTALIASES, IFS, KRB5_CONFIG, KRBCONFDIR, KRBTKFILE, KRB_CONF, LD_.*, LOCALDOMAIN, NLSPATH, PATH_LOCALE, RES_OPTIONS, TERMINFO, TERMINFO_DIRS und TERMPATH. Falls gewunscht, wird der Konfigurationsschlussel environment-filter das Andern der Auschlussliste ermoglichen. Weitere Einzelheiten finden Sie unter schroot.conf(5). DATEIEN Konfigurationsdateien /etc/schroot/schroot.conf die systemweite Chroot-Definitionsdatei. Diese Datei muss dem Benutzer Root gehoren und darf nicht durch andere beschreibbar sein. /etc/schroot/chroot.d Zusatzliche Chroot-Definitionen konnen in Dateien unterhalb dieses Verzeichnisses abgelegt werden. Sie werden auf exakt die gleiche Weise wie /etc/schroot/schroot.conf behandelt. Jede Datei kann eine oder mehrere Chroot-Definitionen enthalten. Beachten Sie, dass die Dateien in diesem Verzeichnis die gleichen Namensregeln wie run-parts(8) befolgen, wenn mit der Option --lsbsysinit gestartet wird. /etc/schroot/setup.d die systemweiten Verzeichnisse fur Chroot-Einrichtungsskripte. Siehe schroot-setup(5). /etc/pam.d/schroot PAM-Konfiguration Systemverzeichnisse /usr/lib/schroot Verzeichnis, das von Einrichtungsskripten benutzte Hilfsprogramme enthalt Sitzungsverzeichnisse Jedes Verzeichnis enthalt ein Verzeichnis oder eine Datei mit dem Namen von jeder Sitzung. Nicht alle Chroot-Typen benutzen alle folgenden Verzeichnisse. /var/lib/schroot/session Verzeichnis, das die Sitzungskonfiguration fur jede aktive Sitzung enthalt /var/run/schroot/mount Verzeichnis, das zum Einhangen der durch jede aktive Sitzung benutzten Dateisysteme verwendet wird /var/lib/schroot/union/underlay Verzeichnis, das fur vereinte (darunterliegende) Dateisystemquellen benutzt wird /var/lib/schroot/union/overlay Verzeichnis, das fur vereinte beschreibbare Dateisystemeinblendungen benutzt wird /var/lib/schroot/unpack Verzeichnis, das zum Entpacken von Datei-Chroots benutzt wird AUTOR Roger Leigh COPYRIGHT Copyright (C) 2005-2012 Roger Leigh schroot ist freie Software. Sie konnen es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veroffentlicht, weitergeben und/oder modifizieren, entweder gemass Version 3 der Lizenz oder (nach Ihrer Option) jeder spateren Version. SIEHE AUCH dchroot(1), sbuild(1), chroot(2), schroot.conf(5). schroot-setup(5), schroot-faq(7), run-parts(8), Aug 14 SCHROOT(1)