fakeroot
Section: Debian-Handbuch (1)
Updated: 5. Oktober 2014
Index
Return to Main Contents
NAME
fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit
fingierten Root-Rechten ausführen
ÜBERSICHT
fakeroot [-l|--lib Bibliothek] [--faked
fingiertes_Programm] [-i zu_ladende_Datei] [-s
zu_speichernde_Datei] [-u|--unknown-is-real ] [-b|--fd-base ]
[-h|--help ] [-v|--version ] [--] [Befehl]
BESCHREIBUNG
fakeroot führt einen Befehl in einer Umgebung aus, in der es scheint, als
habe er Root-Rechte zur Dateimanipulation. Auf diese Weise können einfache
Benutzer Archive (tar, ar, .deb etc.) erstellen, welche Dateien enthalten,
die Root-Rechte haben/Root gehören. Ohne fakeroot wären Root-Rechte
nötig, um die einzelnen Dateien des Archivs mit den korrekten Zugriffs- und
Besitzrechten zu erstellen und sie einzuhüllen oder diese Archive müssten
direkt, ohne Benutzung des Archivierungsprogramms, erstellt werden.
Die Funktionsweise von fakeroot besteht darin, die Bibiliotheken zur
Dateimanipulation (chmod(2), stat(2) etc.) durch solche zu ersetzen, die
sich so verhalten als ob der Benutzer Root wäre. Diese Wrapper-Funktionen
liegen in einer Laufzeit-Bibliothek /usr/lib/libfakeroot.so* bzw. an dem
entsprechenden Speicherort auf Ihrer Plattform. Das gemeinsame Objekt wird
durch den LD_PRELOAD-Mechanismus des dynamischen Ladeprogramms
geladen. (Siehe ld.so(8))
Falls Sie beabsichtigen, Pakete mit fakeroot zu bauen, versuchen Sie
bitte zuerst, das fakeroot-Paket zu bauen: Der Abschnitt »debian/rules
build« enthält ein paar Tests (meist wird getestet, ob Fehler in alten
fakeroot-Versionen vorliegen). Falls diese Tests fehlschlagen (zum Beispiel,
weil Sie bestimmte libc5-Programme auf Ihrem System haben), wird der Bau
anderer Pakete mit fakeroot ziemlich wahrscheinlich ebenfalls scheitern,
aber möglicherweise auf subtilere Art.
Beachten Sie außerdem, dass es am Besten ist, nicht den Bau der Pakete
selbst unter fakeroot vorzunehmen. Insbsondere mögen es »configure« und
Co. nicht, wenn sich das System plötzlich anders als von ihnen erwartet
verhält (oder sie löschen den Inhalt einiger Umgebungsvariablen, die
fakeroot benötigt).
OPTIONEN
- -l Bibliothek, --lib Bibliothek
-
gibt eine alternative Wrapper-Biliothek an.
- --faked Programm
-
gibt ein alternatives Programm an, das als fingiert benutzt werden soll.
- [--] Befehl
-
jeder Befehl, den Sie als fakeroot ausführen möchten. Benutzen Sie »--«,
falls Sie im Befehl andere Optionen haben, die fakeroots Auswertung der
Optionen durcheinanderbringen könnte.
- -s zu_speichernde_Datei
-
speichert die fakeroot-Umgebung beim Beenden in zu_speichernde_Datei. Diese
Datei kann benutzt werden, um die Umgebung später mit -i
wiederherzustellen. Diese Datei wird jedoch »porös« sein (leaken) und
fakeroot wird sich seltsam verhalten, wenn Sie die Dateien nicht in Ruhe
lassen, solange Sie sich außerhalb der Umgebung befinden. Das Speichern kann
aber auch für andere Dinge nützlich sein. Beispielsweise können Sie so mit
rsync(1) ganze Verzeichnisbäume mit Benutzer-, Gruppen und
Geräteinformationen sichern und wiederherstellen, ohne dass Sie Root sein
müssen. Weitere Einzelheiten finden Sie in
/usr/share/doc/fakeroot/README.saving.
- -i zu_ladende_Datei
-
lädt eine vorher mit -s gespeicherte fakeroot-Umgebung aus
zu_ladende_Datei. Beachten Sie, dass dies nicht implizit die Datei
speichert, benutzen Sie für dieses Verhalten zusätzlich -s. Die Benutzung
der gleichen Datei sowohl für -i als auch für -s in einem einzigen
fakeroot-Aufruf ist ungefährlich.
- -u, --unknown-is-real
-
benutzt die echten Besitzrechte von Dateien, die fakeroot vorher unbekannt
waren, anstatt so zu tun, als gehörten sie root:root.
- -b Datei_Deskriptor
-
gibt die Datei-Deskriptor-Basis an (nur im TCP-Modus). Datei_Deskriptor ist
die minimale Datei-Deskriptor-Nummer, die für TCP-Verbindungen benutzt wird;
dies könnte wichtig sein, um Konflikte mit den Datei-Deskriptoren von
Programmen zu vermeiden, die unter fakeroot laufen.
- -h
-
zeigt die Hilfe an.
- -v
-
zeigt die Version an.
BEISPIELE
Hier folgt eine Beispielsitzung mit fakeroot. Beachten Sie, dass
innerhalb der fingierten Root-Umgebung eine Dateimanipulation, die
Root-Rechte erfordert, erfolgreich ist, obwohl sie nicht wirklich
stattfindet.
$ whoami
joost
$ fakeroot /bin/bash
# whoami
root
# mknod hda3 b 3 1
# ls -ld hda3
brw-r--r-- 1 root root 3, 1 Jul 2 22:58 hda3
# chown joost:root hda3
# ls -ld hda3
brw-r--r-- 1 joost root 3, 1 Jul 2 22:58 hda3
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxrwxrwx 20 joost users 1024 Jun 17 21:50 /
# exit
$ ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 //
$ ls -ld hda3
-rw-r--r-- 1 joost users 0 Jul 2 22:58 hda3
In Wirklichkeit geschieht nur das, was Benutzer joost sowieso tun könnte.
fakeroot wurde vor allem geschrieben, um es Benutzern zu ermöglichen,
Debian-GNU/Linux-Pakete (im deb(5)-Format) zu erstellen, ohne ihnen
Root-Rechte zu geben. Dies kann durch Befehle wie dpkg-buildpackage -rfakeroot oder debuild -rfakeroot erledigt werden (tatsächlich ist
-rfakeroot heutzutage in debuild Vorgabe, so dass Sie dieses Argument nicht
benötigen).
SICHERHEITSASPEKTE
fakeroot ist ein normales nicht-setuid-Programm. Es erweitert weder die
Benutzerrechte, noch vermindert es die Sicherheit des Systems.
DATEIEN
/usr/lib/libfakeroot/libfakeroot.so* – die Laufzeit-Bibliothek, welche
die Wrapper-Funktionen enthält.
UMGEBUNG
- FAKEROOTKEY
-
der Schlüssel, der benutzt wird, um mit dem fakeroot-Daemon zu
kommunizieren. Jedes Programm, das mit dem richtigen LD_PRELOAD und einem
FAKEROOTKEY eines laufenden Daemons gestartet wird, verbindet sich
automatisch zu diesem Daemon und hat die gleiche fingierte Sicht auf die
Zugriffs- und Besitzrechte des Dateisystems (unter der Annahme, dass Daemon
und verbindendes Programm vom gleichen Benutzer gestartet wurden).
- LD_LIBRARY_PATH
-
- LD_PRELOAD
-
fakeroot wurde durch Einhüllen von Systemaufrufen implementiert. Dies wird
durch die Einstellungen LD_LIBRARY_PATH=/usr/lib/fakeroot und
LD_PRELOAD=libfakeroot.so.0 bewerkstelligt. Diese Bibliothek wird vor der
C-Bibliothek des Systems geladen. Daher werden die meisten
Bibliotheksfunktionen von ihr abgefangen. Falls Sie entweder
LD_LIBRARY_PATH oder LD_PRELOAD aus einer fakeroot-Umgebung heraus
setzen müssen, sollte es relativ zum angegebenen Pfad geschehen wie in
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/
EINSCHRÄNKUNGEN
- Bibliotheksversionen
-
Jeder innerhalb fakeroot ausgeführte Befehl muss zu der gleichen Version
der C-Bibliothek gelinkt werden wie fakeroot selbst.
- open()/create()
-
fakeroot umhült nicht open(), create(), etc. Falls Benutzer joost also
entweder
touch foo
fakeroot
ls -al foo
oder andersherum
fakeroot
touch foo
ls -al foo
ausführt, hat fakeroot im ersten Fall keine Möglichkeit zu wissen, dass der
Benutzer von foo wirklich joost sein soll, während es im zweiten Fall
root gewesen sein soll. Für die Debian-Paketierung ist es immer in
Ordnung, allen »unbekannten« Dateien uid=gid=0 zu geben. Der wahre Weg, das
zu umgehen ist, open() und create() einzuhüllen, aber es erzeugt neue
Probleme, wie vom Paket libtricks gezeigt wird. Dieses Paket hüllte viel
mehr Funktionen ein und versuchte viel mehr als fakeroot zu tun. Es
stellte sich heraus, dass ein unbedeutendes Upgrade von libc (von einer, in
der die Funktion stat() open() nicht nutzte, zu einer mit einer
stat()-Funktion, die (in einigen Fällen) open() benutzte),
unerklärbare Speicherzugriffsfehler verursachen würde (das heißt, das
libc6-stat() ruft das eingehüllte open() auf, das dann libc6-stat()
aufrufen würde, etc). Das Beheben war alles andere als einfach, aber einmal
behoben, war es nur eine Frage der Zeit, bevor eine andere Funktion begann,
open() zu benutzen, ganz zu schweigen vom Versuch, es auf andere
Betriebssysteme zu portieren. Daher wurde entschieden, die Anzahl der von
fakeroot eingehüllten Funktionen so klein wie möglich zu halten, um die
Wahrscheinlichkeit von »Zusammenstößen« so gering wie möglich zu halten.
- GNU configure (und andere derartige Programme)
-
fakeroot ändert in der Tat die Art, wie sich das System verhält. Programme,
die das System gründlich prüfen, wie GNU configure, könnten dadurch verwirrt
werden (oder, wenn nicht, könnten sie fakeroot so beanspruchen, dass
fakeroot selbst verwirrt wird). Daher ist es ratsam, »configure« nicht
innerhalb von fakeroot auszuführen. Da configure im »debian/rules
build«-Ziel aufgerufen werden sollte, erledigt dies »dpkg-buildpackage
-rfakeroot« korrekt.
FEHLER
Es hüllt open() nicht ein. Das ist an sich nicht schlecht, aber falls ein
Programm open("Datei", O_WRONLY, 000) aufruft, in die Datei »Datei«
schreibt, sie schließt und dann erneut versucht, die Datei zum Lesen zu
öffnen, schlägt das Öffnen fehl, da der Modus der Datei 000 sein wird. Der
Fehler liegt darin, dass, falls Root das Gleiche tut, open() erfolgreich
sein wird, da die Dateirechte für Root überhaupt nicht geprüft werden. Es
wurde entschieden, open() nicht einzuhüllen, da open() von vielen anderen
Funktionen in libc benutzt wird (auch von jenen, die bereits eingehüllt
sind), wodurch Schleifen erzeugt werden (oder möglicherweise zukünftige
Schleifen, wenn die Implementierung verschiedener libc-Funktionen sich ein
wenig ändert).
KOPIEREN
fakeroot wird unter den Bedingungen der GNU General Public License (GPL
2.0 oder höher) weitergegeben.
AUTOREN
- Joost Witteveen
-
<joostje@debian.org>
- Clint Adams
-
<clint@debian.org>
- Timo Savola
-
ÜBERSETZER
Übersetzung bei Chris Leick <debian-l10n-german@lists.debian.org>
HANDBUCHSEITE
größtenteils von J.H.M. Dassen <jdassen@debian.org>. Ziemlich viele
Veränderungen/Zusätze von Joost und Clint.
SIEHE AUCH
, faked(1), debuild(1), dpkg-buildpackage(1),
/usr/share/doc/fakeroot/DEBUG
Index
- NAME
-
- ÜBERSICHT
-
- BESCHREIBUNG
-
- OPTIONEN
-
- BEISPIELE
-
- SICHERHEITSASPEKTE
-
- DATEIEN
-
- UMGEBUNG
-
- EINSCHRÄNKUNGEN
-
- FEHLER
-
- KOPIEREN
-
- AUTOREN
-
- ÜBERSETZER
-
- HANDBUCHSEITE
-
- SIEHE AUCH
-
This document was created by
man2html,
using the manual pages.
Time: 03:43:16 GMT, May 24, 2024