Scroll to navigation

fakeroot(1) Debian-Handbuch fakeroot(1)

NAME

fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit gefälschten Root-Rechten ausführen

ÜBERSICHT

fakeroot [-l|--lib library] [--faked faked-binary] [-i load-file] [-s save-file] [-u|--unknown-is-real] [-b|--fd-base] [-h|--help] [-v|--version] [--] [command]

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 etc.) mit Dateien darin zu erstellen, die Root-Rechte haben/Root gehören. Ohne fakeroot müsste jemand Root-Rechte haben, um die einzelnen Dateien des Archivs mit den korrekten Zugriffs- und Besitzrechten zu erstellen und sie zu verpacken oder jemand müsste diese Archive direkt, ohne Benutzung des Archvierungsprogramms, erstellen.

fakeroot funktioniert, indem es die Bibliotheksfunktionen zur Dateimanipulation (chmod(2), stat(2) etc.) 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 gemeinsam benutzten Bibliothek /usr/lib/*/libfakeroot.so* oder einem ähnlichen Ort auf Ihrer Plattform. Das gemeinsam benutzte 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: Die Ebene »debian/rules build« hat 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.

Also, note that it's best not to do the building of the binaries themselves under fakeroot. Especially configure and friends don't like it when the system suddenly behaves differently from what they expect (or, they randomly unset some environment variables, some of which fakeroot needs).

OPTIONEN

gibt eine alternative Wrapper-Biliothek an.
gibt ein alternatives Programm an, das als gefälscht benutzt werden soll.
[--] Befehl
Any command you want to be run as fakeroot. Use ‘--’ if in the command you have other options that may confuse fakeroot's option parsing.
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 undicht sein und fakeroot wird sich seltsam verhalten, sofern Sie nicht die angefassten Dateien innerhalb von fakeroot belassen, wenn die Umgebung außerhalb liegt. Dies kann dennoch nützlich sein. Es 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.
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.
benutzt die echten Besitzrechte von Dateien, die fakeroot vorher unbekannt waren, anstatt so zu tun, als gehörten sie root:root.
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.
zeigt die Hilfe an.
zeigt die Version an.

BEISPIELE

Hier folgt eine Beispielsitzung mit fakeroot. Beachten Sie, dass innerhalb der gefälschten Root-Umgebung 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 was specifically written to enable users to create Debian GNU/Linux packages (in the deb(5) format) without giving them root privileges. This can be done by commands like dpkg-buildpackage -rfakeroot or debuild -rfakeroot (actually, -rfakeroot is default in debuild nowadays, so you don't need that argument).

SICHERHEITSASPEKTE

fakeroot ist ein normales nicht-setuid-Programm. Es vergrößert weder die Benutzerrechte, noch vermindert es die Sicherheit des Systems.

DATEIEN

/usr/lib/*/libfakeroot-*.so – die gemeinsam benutzte Bibliothek, die die Wrapper-Funktionen enthält

UMGEBUNG

The key used to communicate with the fakeroot daemon. Any program started with the right LD_PRELOAD and a FAKEROOTKEY of a running daemon will automatically connect to that daemon, and have the same "fake" view of the file system's permissions/ownerships (assuming the daemon and connecting program were started by the same user).
fakeroot is implemented by wrapping system calls. This is accomplished by setting LD_LIBRARY_PATH=/usr/lib/fakeroot and LD_PRELOAD=libfakeroot.so.0. That library is loaded before the system's C library, and so most of the library functions are intercepted by it. If you need to set either LD_LIBRARY_PATH or LD_PRELOAD from within a fakeroot environment, it should be set relative to the given paths, as in LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/

EINSCHRÄNKUNGEN

Jeder innerhalb fakeroot ausgeführte Befehl muss zu der gleichen Version der C-Bibliothek gelinkt werden wie fakeroot selbst.
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
    

fakeroot has no way of knowing that in the first case, the owner of foo really should be joost while the second case it should have been root. For the Debian packaging, defaulting to giving all "unknown" files uid=gid=0, is always OK. The real way around this is to wrap open() and create(), but that creates other problems, as demonstrated by the libtricks package. This package wrapped many more functions, and tried to do a lot more than fakeroot . It turned out that a minor upgrade of libc (from one where the stat() function didn't use open() to one with a stat() function that did (in some cases) use open() ), would cause unexplainable segfaults (that is, the libc6 stat() called the wrapped open() , which would then call the libc6 stat() , etc). Fixing them wasn't all that easy, but once fixed, it was just a matter of time before another function started to use open(), never mind trying to port it to a different operating system. Thus I decided to keep the number of functions wrapped by fakeroot as small as possible, to limit the likelihood of ‘collisions’.

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 umhüllt nicht open(). 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() erfolgreich sein wird, da die Dateirechte für Root überhaupt nicht geprüft werden. Es wurde entschieden, open() nicht zu verhüllen, da open() 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 Bedingungnen der GNU General Public License. (GPL 2.0 oder höher) weitergegeben.

AUTOREN

<joostje@debian.org>
<clint@debian.org>

ÜBERSETZER

Übersetzung bei Chris Leick <debian-l10n-german@lists.debian.org>

HANDBUCHSEITE

mostly by J.H.M. Dassen <jdassen@debian.org> with rather a lot of modsifications and additions by joost and Clint.

SIEHE AUCH

debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG

2024-12-19 Debian-Projekt