ÜBERSICHT
fakeroot [-l|--lib Bibliothek] [--faked gefälschtes_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. 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 works by replacing the file manipulation library functions (chmod(2), stat(2) etc.) by ones that simulate the effect the real library functions would have had, had the user really been root. These wrapper functions are in a shared library /usr/lib/*/libfakeroot-*.so or similar location on your platform. The shared object is loaded through the LD_PRELOAD mechanism of the dynamic loader. (See 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.
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 gefälscht 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 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 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.
- -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 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 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 Vorgabe, so dass Sie dieses Argument nicht brauchen).
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 The shared library containing the wrapper functions.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 »gefälschte« 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 Verhü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, dies zu umgehen ist, open() und create() 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() open() nicht nutzte, zu einer mit einer stat()-Funktion, die (in einigen Fällen) open() benutzte), unerklärbare Schutzverletzungen verursachen würde (das heißt, das libc6-stat() ruft das verhü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 verhü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 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
- Joost Witteveen
- <[email protected]>
- Clint Adams
- <[email protected]>
- Timo Savola