fakeroot(1) Debian-Handbuch fakeroot(1) NAME fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit gefalschten Root-Rechten ausfuhren UBERSICHT fakeroot [-l|--lib Bibliothek] [--faked gefalschtes_Programm] [-i lzu_ladende_Datei] [-s zu_speichernde_Datei] [-u|--unknown-is-real] [-b|--fd-base] [-h|--help] [-v|--version] [--] [Befehl] BESCHREIBUNG fakeroot fuhrt einen Befehl in einer Umgebung aus, in der es scheint, als habe er Root-Rechte zur Dateimanipulation. Dies ist nutzlich, um Benutzern zu erlauben, Archive (tar, ar, deb usw.) mit Dateien darin zu erstellen, die Root-Rechte haben und Root gehoren. Ohne fakeroot musste jemand Root-Rechte haben, um die einzelnen Dateien des Archivs mit den korrekten Zugriffsrechten und Eigentumerschaften zu erstellen und sie zu verpacken oder jemand musste 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 hatten, wenn der Benutzer Root ware. Diese Wrapper-Funktionen liegen in einer dynamischen Bibliothek /usr/lib/*/libfakeroot.so* oder einem ahnlichen 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<< enthalt 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 moglicherweise auf eine subtilere Art. Beachten Sie ausserdem, dass es am Besten ist, nicht den Bau der Pakete selbst unter fakeroot vorzunehmen. Insbesondere mogen es >>configure<< und Co. nicht, wenn sich das System plotzlich anders als von ihnen erwartet verhalt (oder sie loschen zufallig den Inhalt einiger Umgebungsvariablen, die fakeroot benotigt). 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 ausfuhren mochten. Benutzen Sie >>--<<, falls Sie im Befehl andere Optionen haben, die fakeroot bei der Auswertung der Optionen verwirren konnte. -s zu_speichernde_Datei Speichert die fakeroot-Umgebung beim Beenden in zu_speichernde_Datei. Diese Datei kann benutzt werden, um die Umgebung spater mit -i wiederherzustellen. Diese Datei wird jedoch inkonsistent sein und fakeroot wird sich seltsam verhalten, wenn Sie die Dateien verandern, wenn Sie sich ausserhalb der Umgebung befinden. Dies kann dennoch nutzlich sein. Sie kann beispielsweise mit rsync(1) benutzt werden, um ganze Verzeichnisbaume mit Benutzer-, Gruppen und Gerateinformationen zu sichern und wiederherzustellen, ohne dass Sie Root sein mussen. Weitere Einzelheiten finden Sie in /usr/share/doc/fakeroot/README.saving. -i zu_ladende_Datei Ladt eine vorher mit -s gespeicherte fakeroot-Umgebung aus zu_ladende_Datei. Beachten Sie, dass dies nicht implizit die Datei speichert, benutzen Sie fur dieses Verhalten zusatzlich -s. Die Benutzung der gleichen Datei sowohl fur -i als auch fur -s in einem einzigen fakeroot-Aufruf ist problemlos moglich. -u, --unknown-is-real Benutzt die echten Eigentumerschaften von Dateien, die fakeroot vorher unbekannt waren, anstatt so zu tun, als gehorten 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 fur TCP-Verbindungen benutzt wird; dies konnte 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 gefalschten 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 konnte. fakeroot wurde insbesondere geschrieben, um es Benutzern zu ermoglichen, 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 (tatsachlich 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 enthalt. UMGEBUNG FAKEROOTKEY Der Schlussel 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 >>gefalschte<< Sicht auf die Zugriffsrechte und Eigentumerschaften des Dateisystems (unter der Annahme, dass Daemon und verbindendes Programm vom gleichen Benutzer gestartet wurden). LD_LIBRARY_PATH LD_PRELOAD fakeroot wurde mittels Umhullung 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 mussen, sollte es relativ zum angegebenen Pfad geschehen wie in LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/ EINSCHRANKUNGEN Bibliotheksversionen Jeder innerhalb fakeroot ausgefuhrte Befehl muss zu der gleichen Version der C-Bibliothek gelinkt werden wie fakeroot selbst. open()/create() fakeroot umhullt 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 ausfuhrt, hat fakeroot im ersten Fall keine Moglichkeit zu wissen, dass der Benutzer von foo wirklich joost sein soll, wahrend es im zweiten Fall root gewesen sein soll. Fur 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 verhullen, aber dies erzeugt neue Probleme, wie vom Paket libtricks gezeigt wird. Dieses Paket verhullte 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 Fallen) open(2) benutzte), unerklarbare Schutzverletzungen verursachen wurde (das heisst, das libc6-stat(2) ruft das verhullte open(2) auf, das dann libc6-stat(2) aufrufen wurde, 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 verhullten Funktionen so klein wie moglich zu halten, um die Wahrscheinlichkeit von >>Kollisionen<< so gering wie moglich zu halten. GNU configure (und andere derartige Programme) fakeroot andert in der Tat die Art, wie sich das System verhalt. Programme wie GNU-configure konnten, die das System untersuchen, dadurch verwirrt werden (oder, wenn nicht, konnten sie fakeroot so beanspruchen, dass fakeroot selbst verwirrt wird). Daher ist es ratsam, >>configure<< nicht innerhalb von fakeroot auszufuhren. Da configure im >>debian/rules build<<-Ziel aufgerufen werden sollte, erledigt dies dpkg-buildpackage -rfakeroot korrekt. FEHLER Es umhullt 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 schliesst und dann erneut versucht, die Datei zum Lesen zu offnen, schlagt das Offnen 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 fur Root uberhaupt nicht gepruft werden. Es wurde entschieden, open(2) nicht zu verhullen, da open(2) von vielen anderen Funktionen in Libc benutzt wird (auch von jenen, die bereits verhullt sind), wodurch Schleifen erzeugt werden (oder moglicherweise zukunftige Schleifen, wenn die Implementierung verschiedener Libc-Funktionen sich ein wenig andert). KOPIEREN fakeroot wird unter den Bedingungen der GNU General Public License (GPL 2.0 oder hoher) weitergegeben. AUTOREN Joost Witteveen Clint Adams Timo Savola UBERSETZER Ubersetzung bei Chris Leick HANDBUCHSEITE grosstenteils von J.H.M. Dassen mit ziemlich vielen Anpassungen und Zusatzen 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)