Provided by: fakeroot_1.37.1.2-1_amd64 

NAME
fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit gefälschten Root-Rechten ausführen
ÜBERSICHT
fakeroot [-l|--lib Bibliothek] [--faked gefälschtes_Programm] [-i lzu_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. Dies ist nützlich, um Benutzern zu erlauben, Archive (tar, ar, deb usw.) mit Dateien
darin zu erstellen, die Root-Rechte haben und Root gehören. Ohne fakeroot müsste jemand Root-Rechte
haben, um die einzelnen Dateien des Archivs mit den korrekten Zugriffsrechten und Eigentümerschaften zu
erstellen und sie zu verpacken oder jemand müsste diese Archive direkt, ohne Benutzung des
Archivierungsprogramms, erstellen.
fakeroot funktioniert, indem es die Bibliotheksfunktionen zur Dateimanipulation (chmod(2), stat(2) usw.)
durch solche ersetzt, die die Auswirkungen simulieren, die die echten Funktionen hätten, wenn der
Benutzer Root wäre. Diese Wrapper-Funktionen liegen in einer dynamischen Bibliothek
/usr/lib/*/libfakeroot.so* oder einem ähnlichen Ort auf Ihrer Plattform. Die Laufzeitbibliothek 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: Die Stufe »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 eine subtilere Art.
Beachten Sie außerdem, dass es am Besten ist, nicht den Bau der Pakete selbst unter fakeroot vorzunehmen.
Insbesondere mögen es »configure« und Co. nicht, wenn sich das System plötzlich anders als von ihnen
erwartet verhält (oder sie löschen zufällig den Inhalt einiger Umgebungsvariablen, die fakeroot
benötigt).
OPTIONEN
-l Bibliothek, --lib Bibliothek
Gibt eine alternative Wrapper-Bibliothek an.
--faked Programm
Gibt ein alternatives Programm an, das anstatt faked(1) verwendet werden soll.
[--] Befehl
Jeder Befehl, den Sie als fakeroot ausführen möchten. Benutzen Sie »--«, falls Sie im Befehl
andere Optionen haben, die fakeroot bei der Auswertung der Optionen verwirren 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 inkonsistent
sein und fakeroot wird sich seltsam verhalten, wenn Sie die Dateien verändern, wenn Sie sich
außerhalb der Umgebung befinden. Dies kann dennoch nützlich sein. Sie kann beispielsweise mit
rsync(1) benutzt werden, um ganze Verzeichnisbäume mit Benutzer-, Gruppen und Geräteinformationen
zu sichern und wiederherzustellen, 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
problemlos möglich.
-u, --unknown-is-real
Benutzt die echten Eigentümerschaften 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
Es folgt eine Beispielsitzung mit fakeroot. Beachten Sie, dass innerhalb der gefälschten 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 insbesondere 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(1) Vorgabe, so dass Sie dieses Argument nicht brauchen).
SICHERHEITSASPEKTE
fakeroot ist ein normales, Nicht-Setuid-Programm. Es erweitert weder die Benutzerrechte, noch vermindert
es die Sicherheit des Systems.
DATEIEN
/usr/lib/*/libfakeroot-*.so Die dynamische Bibliothek, die die Wrapper-Funktionen enthält.
UMGEBUNG
FAKEROOTKEY
Der Schlüssel zur Kommunikation mit dem fakeroot-Daemon 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 »gefälschte« Sicht auf die Zugriffsrechte und
Eigentümerschaften des Dateisystems (unter der Annahme, dass Daemon und verbindendes Programm vom
gleichen Benutzer gestartet wurden).
LD_LIBRARY_PATH
LD_PRELOAD
fakeroot wurde mittels Umhüllung 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üllt nicht open(2), creat(2), usw. 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. Die
korrekte Art, dies zu umgehen ist, open(2) und creat(2) zu verhüllen, aber dies erzeugt neue
Probleme, wie vom Paket libtricks gezeigt wird. Dieses Paket verhüllte mehr Funktionen 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(2) open(2) nicht nutzte, zu einer mit einer
stat(2)-Funktion, die (in einigen Fällen) open(2) benutzte), unerklärbare Schutzverletzungen
verursachen würde (das heißt, das libc6-stat(2) ruft das verhüllte open(2) auf, das dann
libc6-stat(2) aufrufen würde, usw). Das Beheben war alles andere als einfach, aber einmal behoben,
war es nur eine Frage der Zeit, bevor eine andere Funktion begann, open(2) zu benutzen, ganz zu
schweigen vom Versuch, es auf andere Betriebssysteme zu portieren. Daher wurde entschieden, die
Anzahl der von fakeroot verhüllten Funktionen so klein wie möglich zu halten, um die
Wahrscheinlichkeit von »Kollisionen« 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 wie GNU-configure
könnten, die das System untersuchen, 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 umhüllt nicht open(2). Dies 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(2) erfolgreich sein wird, da die Dateirechte für Root
überhaupt nicht geprüft werden. Es wurde entschieden, open(2) nicht zu verhüllen, da open(2) von vielen
anderen Funktionen in Libc benutzt wird (auch von jenen, die bereits verhü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> mit ziemlich vielen Anpassungen und Zusätzen von
Joost und Clint.
SIEHE AUCH
debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG
Debian-Projekt 19. Dezember 2024 fakeroot(1)