| fakeroot(1) | Debian-Handbuch | fakeroot(1) |
fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit gefälschten Root-Rechten ausführen
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]
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).
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 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).
fakeroot ist ein normales, Nicht-Setuid-Programm. Es erweitert weder die Benutzerrechte, noch vermindert es die Sicherheit des Systems.
/usr/lib/*/libfakeroot-*.so Die dynamische Bibliothek, die die Wrapper-Funktionen enthält.
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’.
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).
fakeroot wird unter den Bedingungen der GNU General Public License (GPL 2.0 oder höher) weitergegeben.
Übersetzung bei Chris Leick <debian-l10n-german@lists.debian.org>
mostly by J.H.M. Dassen <jdassen@debian.org> with rather a lot of modsifications and additions by joost and Clint.
debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG
| 19. Dezember 2024 | Debian-Projekt |