.de CW .sp .nf .ie \n(.g .ft CR .el .ft CW .. .\" Process this file with .\" groff -man -Tascii foo.1 .\" .\" "verbatim" environment (from strace.1) .de CE .ft .fi .sp .. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH fakeroot 1 "19. Dezember 2024" Debian\-Projekt Debian\-Handbuch .\" Manpage by J.H.M. Dassen .\" and Clint Adams .SH NAME fakeroot \- einen Befehl zur Dateimanipulation in einer Umgebung mit gefälschten Root\-Rechten ausführen .SH ÜBERSICHT \fBfakeroot\fP [\fB\-l\fP|\fB\-\-lib\fP \fIBibliothek\fP] [\fB\-\-faked\fP \fIgefälschtes_Programm\fP] [\fB\-i\fP \fIlzu_ladende_Datei\fP] [\fB\-s\fP \fIzu_speichernde_Datei\fP] [\fB\-u\fP|\fB\-\-unknown\-is\-real\fP] [\fB\-b\fP|\fB\-\-fd\-base\fP] [\fB\-h\fP|\fB\-\-help\fP] [\fB\-v\fP|\fB\-\-version\fP] [\fB\-\-\fP] [\fIBefehl\fP] .SH BESCHREIBUNG \fBfakeroot\fP 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 \fBfakeroot\fP 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. \fBfakeroot\fP funktioniert, indem es die Bibliotheksfunktionen zur Dateimanipulation (\fBchmod\fP(2), \fBstat\fP(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 \fB/usr/lib/*/libfakeroot.so*\fP oder einem ähnlichen Ort auf Ihrer Plattform. Die Laufzeitbibliothek wird durch den \fBLD_PRELOAD\fP\-Mechanismus des dynamischen Ladeprogramms geladen. (Siehe \fBld.so\fP(8)). Falls Sie beabsichtigen, Pakete mit \fBfakeroot\fP zu bauen, versuchen Sie bitte zuerst, das \fBfakeroot\fP\-Paket zu bauen: Die Stufe »debian/rules build« enthält ein paar Tests (meist wird getestet, ob Fehler in alten \fBfakeroot\fP\-Versionen vorliegen). Falls diese Tests fehlschlagen (zum Beispiel, weil Sie bestimmte Libc5\-Programme auf Ihrem System haben), wird der Bau anderer Pakete mit \fBfakeroot\fP 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 \fBfakeroot\fP 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 \fBfakeroot\fP benötigt). .SH OPTIONEN .TP \fB\-l\fP \fIBibliothek\fP, \fB\-\-lib\fP \fIBibliothek\fP Gibt eine alternative Wrapper\-Bibliothek an. .TP \fB\-\-faked\fP\fI\ Programm\fP Gibt ein alternatives Programm an, das anstatt \fBfaked\fP(1) verwendet werden soll. .TP \fB[\-\-]\fP\fI\ Befehl\fP Jeder Befehl, den Sie als \fBfakeroot\fP ausführen möchten. Benutzen Sie »\-\-«, falls Sie im Befehl andere Optionen haben, die \fBfakeroot\fP bei der Auswertung der Optionen verwirren könnte. .TP \fB\-s\fP\fI\ zu_speichernde_Datei\fP Speichert die \fBfakeroot\fP\-Umgebung beim Beenden in \fIzu_speichernde_Datei\fP. Diese Datei kann benutzt werden, um die Umgebung später mit \fB\-i\fP wiederherzustellen. Diese Datei wird jedoch inkonsistent sein und \fBfakeroot\fP 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 \fBrsync\fP(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 \fI/usr/share/doc/fakeroot/README.saving\fP. .TP \fB\-i\fP\fI\ zu_ladende_Datei\fP Lädt eine vorher mit \fB\-s\fP gespeicherte \fBfakeroot\fP\-Umgebung aus \fIzu_ladende_Datei\fP. Beachten Sie, dass dies nicht implizit die Datei speichert, benutzen Sie für dieses Verhalten zusätzlich \fB\-s\fP. Die Benutzung der gleichen Datei sowohl für \fB\-i\fP als auch für \fB\-s\fP in einem einzigen \fBfakeroot\fP\-Aufruf ist problemlos möglich. .TP \fB\-u\fP, \fB\-\-unknown\-is\-real\fP Benutzt die echten Eigentümerschaften von Dateien, die \fBfakeroot\fP vorher unbekannt waren, anstatt so zu tun, als gehörten sie »root:root«. .TP \fB\-b\fP\fI\ Datei_Deskriptor\fP Gibt die Datei\-Deskriptor\-Basis an (nur im TCP\-Modus). \fIDatei_Deskriptor\fP 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 \fBfakeroot\fP laufen. .TP \fB\-h\fP Zeigt die Hilfe an. .TP \fB\-v\fP Zeigt die Version an. .SH BEISPIELE Es folgt eine Beispielsitzung mit \fBfakeroot\fP. Beachten Sie, dass innerhalb der gefälschten Root\-Umgebung eine Dateimanipulation, die Root\-Rechte erfordert, erfolgreich ist, obwohl sie nicht wirklich stattfindet. .CW $ 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 .CE In Wirklichkeit geschieht nur das, was Benutzer \fBjoost\fP sowieso tun könnte. \fBfakeroot\fP wurde insbesondere geschrieben, um es Benutzern zu ermöglichen, Debian\-GNU/Linux\-Pakete (im \fBdeb\fP(5)\-Format) zu erstellen, ohne ihnen Root\-Rechte zu geben. Dies kann durch Befehle wie \fBdpkg\-buildpackage \-rfakeroot\fP oder \fBdebuild \-rfakeroot\fP erledigt werden (tatsächlich ist \fB\-rfakeroot\fP heutzutage in \fBdebuild\fP(1) Vorgabe, so dass Sie dieses Argument nicht brauchen). .SH SICHERHEITSASPEKTE \fBfakeroot\fP ist ein normales, Nicht\-Setuid\-Programm. Es erweitert weder die Benutzerrechte, noch vermindert es die Sicherheit des Systems. .SH DATEIEN \fI/usr/lib/*/libfakeroot\-*.so\fP Die dynamische Bibliothek, die die Wrapper\-Funktionen enthält. .SH UMGEBUNG .IP \fBFAKEROOTKEY\fP Der Schlüssel zur Kommunikation mit dem \fBfakeroot\fP\-Daemon Jedes Programm, das mit dem richtigen \fBLD_PRELOAD\fP und einem \fBFAKEROOTKEY\fP 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). .IP \fBLD_LIBRARY_PATH\fP .IP \fBLD_PRELOAD\fP \fBfakeroot\fP wurde mittels Umhüllung von Systemaufrufen implementiert. Dies wird durch die Einstellungen \fBLD_LIBRARY_PATH=/usr/lib/fakeroot\fP und \fBLD_PRELOAD=libfakeroot.so.0\fP bewerkstelligt. Diese Bibliothek wird vor der C\-Bibliothek des Systems geladen. Daher werden die meisten Bibliotheksfunktionen von ihr abgefangen. Falls Sie entweder \fBLD_LIBRARY_PATH\fP oder \fBLD_PRELOAD\fP aus einer \fBfakeroot\fP\-Umgebung heraus setzen müssen, sollte es relativ zum angegebenen Pfad geschehen wie in \fBLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/\fP .SH EINSCHRÄNKUNGEN .IP \fBBibliotheksversionen\fP Jeder innerhalb \fBfakeroot\fP ausgeführte Befehl muss zu der gleichen Version der C\-Bibliothek gelinkt werden wie \fBfakeroot\fP selbst. .IP \fBopen()/create()\fP \fBfakeroot\fP umhüllt nicht \fBopen\fP(2), \fBcreat\fP(2), usw. Falls Benutzer \fBjoost\fP also entweder .CW touch foo fakeroot ls \-al foo .CE oder andersherum .CW fakeroot touch foo ls \-al foo .CE ausführt, hat \fBfakeroot\fP im ersten Fall keine Möglichkeit zu wissen, dass der Benutzer von \fIfoo\fP wirklich \fBjoost\fP sein soll, während es im zweiten Fall \fBroot\fP 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, \fBopen\fP(2) und \fBcreat\fP(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 \fBfakeroot\fP zu tun. Es stellte sich heraus, dass ein unbedeutendes Upgrade von Libc (von einer, in der die Funktion \fBstat\fP(2) \fBopen\fP(2) nicht nutzte, zu einer mit einer \fBstat\fP(2)\-Funktion, die (in einigen Fällen) \fBopen\fP(2) benutzte), unerklärbare Schutzverletzungen verursachen würde (das heißt, das libc6\-\fBstat\fP(2) ruft das verhüllte \fBopen\fP(2) auf, das dann libc6\-\fBstat\fP(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, \fBopen\fP(2) zu benutzen, ganz zu schweigen vom Versuch, es auf andere Betriebssysteme zu portieren. Daher wurde entschieden, die Anzahl der von \fBfakeroot\fP verhüllten Funktionen so klein wie möglich zu halten, um die Wahrscheinlichkeit von »Kollisionen« so gering wie möglich zu halten. .IP "GNU configure (und andere derartige Programme)" \fBfakeroot\fP ä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 \fBfakeroot\fP so beanspruchen, dass \fBfakeroot\fP selbst verwirrt wird). Daher ist es ratsam, »configure« nicht innerhalb von \fBfakeroot\fP auszuführen. Da configure im »debian/rules build«\-Ziel aufgerufen werden sollte, erledigt dies \fBdpkg\-buildpackage \-rfakeroot\fP korrekt. .SH FEHLER Es umhüllt nicht \fBopen\fP(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, \fBopen\fP(2) erfolgreich sein wird, da die Dateirechte für Root überhaupt nicht geprüft werden. Es wurde entschieden, \fBopen\fP(2) nicht zu verhüllen, da \fBopen\fP(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). .SH KOPIEREN \fBfakeroot\fP wird unter den Bedingungen der GNU General Public License (GPL 2.0 oder höher) weitergegeben. .SH AUTOREN .TP Joost Witteveen <\fIjoostje@debian.org\fP> .TP Clint Adams <\fIclint@debian.org\fP> .TP Timo Savola .SH ÜBERSETZER Übersetzung bei Chris Leick .SH HANDBUCHSEITE größtenteils von J.H.M. Dassen \fB<\fP\fIjdassen@debian.org\fP\fB>\fP mit ziemlich vielen Anpassungen und Zusätzen von Joost und Clint. .SH "SIEHE AUCH" \fBdebuild\fP(1), \fBdpkg\-buildpackage\fP(1), \fBfaked\fP(1), \fB/usr/share/doc/fakeroot/DEBUG\fP