307 lines
13 KiB
HTML
307 lines
13 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of fakeroot</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>fakeroot</H1>
|
|
Section: Debian-Handbuch (1)<BR>Updated: 5 October 2014<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit
|
|
gefälschten Root-Rechten ausführen
|
|
<A NAME="lbAC"> </A>
|
|
<H2>ÜBERSICHT</H2>
|
|
|
|
<B>fakeroot</B> <B>[-l|--lib</B> <I>Bibliothek]</I> <B>[--faked</B>
|
|
<I>gefälschtes_Programm</I><B>]</B> <B>[-i</B> <I>zu_ladende_Datei</I><B>]</B> <B>[-s</B>
|
|
<I>zu_speichernde_Datei</I><B>]</B> <B>[-u|--unknown-is-real ]</B> <B>[-b|--fd-base ]</B>
|
|
<B>[-h|--help ]</B> <B>[-v|--version ]</B> <B>[--]</B> <B>[Befehl]</B>
|
|
<A NAME="lbAD"> </A>
|
|
<H2>BESCHREIBUNG</H2>
|
|
|
|
<B>fakeroot</B> 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 <B>fakeroot</B> 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.
|
|
<P>
|
|
<B>fakeroot</B> works by replacing the file manipulation library functions
|
|
(<A HREF="/cgi-bin/man/man2html?2+chmod">chmod</A>(2), <A HREF="/cgi-bin/man/man2html?2+stat">stat</A>(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 <B>/usr/lib/*/libfakeroot-*.so</B> or similar
|
|
location on your platform. The shared object is loaded through the
|
|
<B>LD_PRELOAD</B> mechanism of the dynamic loader. (See <B><A HREF="/cgi-bin/man/man2html?8+ld.so">ld.so</A></B>(8))
|
|
<P>
|
|
Falls Sie beabsichtigen, Pakete mit <B>fakeroot</B> 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.
|
|
<P>
|
|
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).
|
|
<P>
|
|
<A NAME="lbAE"> </A>
|
|
<H2>OPTIONEN</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="1"><B>-l</B> <I>Bibliothek</I>, <B>--lib</B> <I>Bibliothek</I><DD>
|
|
gibt eine alternative Wrapper-Biliothek an.
|
|
<DT id="2"><B>--faked</B><I> Programm</I><DD>
|
|
gibt ein alternatives Programm an, das als gefälscht benutzt werden soll.
|
|
<DT id="3"><B>[--]</B><I> Befehl</I><DD>
|
|
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.
|
|
<DT id="4"><B>-s</B><I> zu_speichernde_Datei</I><DD>
|
|
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 <A HREF="/cgi-bin/man/man2html?1+rsync">rsync</A>(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 <I>/usr/share/doc/fakeroot/README.saving</I>.
|
|
<DT id="5"><B>-i</B><I> zu_ladende_Datei</I><DD>
|
|
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
|
|
<B>fakeroot</B>-Aufruf ist ungefährlich.
|
|
<DT id="6"><B>-u</B>, <B>--unknown-is-real</B><DD>
|
|
benutzt die echten Besitzrechte von Dateien, die fakeroot vorher unbekannt
|
|
waren, anstatt so zu tun, als gehörten sie root:root.
|
|
<DT id="7"><B>-b</B><I> Datei_Deskriptor</I><DD>
|
|
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.
|
|
<DT id="8"><B>-h</B><DD>
|
|
zeigt die Hilfe an.
|
|
<DT id="9"><B>-v</B><DD>
|
|
zeigt die Version an.
|
|
<P>
|
|
</DL>
|
|
<A NAME="lbAF"> </A>
|
|
<H2>BEISPIELE</H2>
|
|
|
|
Hier folgt eine Beispielsitzung mit <B>fakeroot</B>. Beachten Sie, dass
|
|
innerhalb der gefälschten Root-Umgebung Dateimanipulation, die Root-Rechte
|
|
erfordert, erfolgreich ist, obwohl sie nicht wirklich stattfindet.
|
|
|
|
<P>
|
|
<PRE>
|
|
$ 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
|
|
|
|
</PRE>
|
|
|
|
<P>
|
|
|
|
In Wirklichkeit geschieht nur das, was Benutzer <B>joost</B> sowieso tun könnte.
|
|
<P>
|
|
<B>fakeroot</B> wurde insbesondere geschrieben, um es Benutzern zu ermöglichen,
|
|
Debian-GNU/Linux-Pakete (im <B><A HREF="/cgi-bin/man/man2html?5+deb">deb</A>(5)</B>-Format) zu erstellen, ohne ihnen
|
|
Root-Rechte zu geben. Dies kann durch Befehle wie <B>dpkg-buildpackage
|
|
-rfakeroot</B> oder <B>debuild -rfakeroot</B> erledigt werden (tatsächlich ist
|
|
-rfakeroot heutzutage in debuild Vorgabe, so dass Sie dieses Argument nicht
|
|
brauchen).
|
|
<A NAME="lbAG"> </A>
|
|
<H2>SICHERHEITSASPEKTE</H2>
|
|
|
|
<B>fakeroot</B> ist ein normales nicht-setuid-Programm. Es vergrößert weder die
|
|
Benutzerrechte, noch vermindert es die Sicherheit des Systems.
|
|
<A NAME="lbAH"> </A>
|
|
<H2>DATEIEN</H2>
|
|
|
|
<I>/usr/lib/*/libfakeroot-*.so</I> The shared library containing the wrapper
|
|
functions.
|
|
<A NAME="lbAI"> </A>
|
|
<H2>UMGEBUNG</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="10"><B>FAKEROOTKEY</B><DD>
|
|
der Schlüssel, der benutzt wird, um mit dem fakeroot-Daemon zu
|
|
kommunizieren. Jedes Programm, das mit dem richtigen <B>LD_PRELOAD</B> und einem
|
|
<B>FAKEROOTKEY</B> 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).
|
|
<DT id="11"><B>LD_LIBRARY_PATH</B><DD>
|
|
<DT id="12"><B>LD_PRELOAD</B><DD>
|
|
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
|
|
<B>LD_LIBRARY_PATH</B> oder <B>LD_PRELOAD</B> aus einer fakeroot-Umgebung heraus
|
|
setzen müssen, sollte es relativ zum angegebenen Pfad geschehen wie in
|
|
<B>LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/</B>
|
|
<P>
|
|
</DL>
|
|
<A NAME="lbAJ"> </A>
|
|
<H2>EINSCHRÄNKUNGEN</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="13"><B>Bibliotheksversionen</B><DD>
|
|
Jeder innerhalb <B>fakeroot</B> ausgeführte Befehl muss zu der gleichen Version
|
|
der C-Bibliothek gelinkt werden wie <B>fakeroot</B> selbst.
|
|
<DT id="14"><B>open()/create()</B><DD>
|
|
fakeroot umhült nicht open(), create(), etc. Falls Benutzer <B>joost</B> also
|
|
entweder
|
|
|
|
<P>
|
|
<PRE>
|
|
touch foo
|
|
fakeroot
|
|
ls -al foo
|
|
|
|
</PRE>
|
|
|
|
<P>
|
|
|
|
oder andersherum
|
|
|
|
<P>
|
|
<PRE>
|
|
fakeroot
|
|
touch foo
|
|
ls -al foo
|
|
|
|
</PRE>
|
|
|
|
<P>
|
|
|
|
ausführt, hat fakeroot im ersten Fall keine Möglichkeit zu wissen, dass der
|
|
Benutzer von foo wirklich <B>joost</B> sein soll, während es im zweiten Fall
|
|
<B>root</B> 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, <B>open()</B> und <B>create()</B> 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 <B>fakeroot</B> zu tun. Es stellte
|
|
sich heraus, dass ein unbedeutendes Upgrade von libc (von einer, in der die
|
|
Funktion <B>stat()</B> <B>open()</B> nicht nutzte, zu einer mit einer
|
|
<B>stat()</B>-Funktion, die (in einigen Fällen) <B>open()</B> benutzte),
|
|
unerklärbare Schutzverletzungen verursachen würde (das heißt, das
|
|
libc6-<B>stat()</B> ruft das verhüllte <B>open()</B> auf, das dann libc6-<B>stat()</B>
|
|
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.
|
|
<DT id="15"><B>GNU configure (und andere derartige Programme)</B><DD>
|
|
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.
|
|
</DL>
|
|
<A NAME="lbAK"> </A>
|
|
<H2>FEHLER</H2>
|
|
|
|
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).
|
|
<A NAME="lbAL"> </A>
|
|
<H2>KOPIEREN</H2>
|
|
|
|
<B>fakeroot</B> wird unter den Bedingungnen der GNU General Public License. (GPL
|
|
2.0 oder höher) weitergegeben.
|
|
<A NAME="lbAM"> </A>
|
|
<H2>AUTOREN</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="16">Joost Witteveen<DD>
|
|
<<I><A HREF="mailto:joostje@debian.org">joostje@debian.org</A></I>>
|
|
<DT id="17">Clint Adams<DD>
|
|
<<I><A HREF="mailto:clint@debian.org">clint@debian.org</A></I>>
|
|
<DT id="18">Timo Savola<DD>
|
|
</DL>
|
|
<A NAME="lbAN"> </A>
|
|
<H2>ÜBERSETZER</H2>
|
|
|
|
Übersetzung bei Chris Leick <<A HREF="mailto:debian-l10n-german@lists.debian.org">debian-l10n-german@lists.debian.org</A>>
|
|
<A NAME="lbAO"> </A>
|
|
<H2>HANDBUCHSEITE</H2>
|
|
|
|
größtenteils von J.H.M. Dassen <<A HREF="mailto:jdassen@debian.org">jdassen@debian.org</A>>. Ziemlich viele
|
|
Mods/Zusätze von Joost und Clint.
|
|
<A NAME="lbAP"> </A>
|
|
<H2>SIEHE AUCH</H2>
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+debuild">debuild</A></B>(1), <B><A HREF="/cgi-bin/man/man2html?1+dpkg-buildpackage">dpkg-buildpackage</A></B>(1), <B><A HREF="/cgi-bin/man/man2html?1+faked">faked</A></B>(1),
|
|
<B>/usr/share/doc/fakeroot/DEBUG</B>
|
|
<P>
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="19"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="20"><A HREF="#lbAC">ÜBERSICHT</A><DD>
|
|
<DT id="21"><A HREF="#lbAD">BESCHREIBUNG</A><DD>
|
|
<DT id="22"><A HREF="#lbAE">OPTIONEN</A><DD>
|
|
<DT id="23"><A HREF="#lbAF">BEISPIELE</A><DD>
|
|
<DT id="24"><A HREF="#lbAG">SICHERHEITSASPEKTE</A><DD>
|
|
<DT id="25"><A HREF="#lbAH">DATEIEN</A><DD>
|
|
<DT id="26"><A HREF="#lbAI">UMGEBUNG</A><DD>
|
|
<DT id="27"><A HREF="#lbAJ">EINSCHRÄNKUNGEN</A><DD>
|
|
<DT id="28"><A HREF="#lbAK">FEHLER</A><DD>
|
|
<DT id="29"><A HREF="#lbAL">KOPIEREN</A><DD>
|
|
<DT id="30"><A HREF="#lbAM">AUTOREN</A><DD>
|
|
<DT id="31"><A HREF="#lbAN">ÜBERSETZER</A><DD>
|
|
<DT id="32"><A HREF="#lbAO">HANDBUCHSEITE</A><DD>
|
|
<DT id="33"><A HREF="#lbAP">SIEHE AUCH</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:04:56 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|