Provided by: fakeroot_1.33-1_amd64 bug

NAME

       fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit gefälschten Root-Rechten ausführen

Ü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  funktioniert, indem es die Bibliotheksfunktionen zur Dateimanipulation (chmod(2), stat(2) etc.)
       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  gemeinsam  benutzten  Bibliothek
       /usr/lib/*/libfakeroot.so* oder einem ähnlichen Ort auf Ihrer Plattform. Das  gemeinsam  benutzte  Objekt
       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 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 – die gemeinsam benutzte Bibliothek, die die Wrapper-Funktionen enthält

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
              <joostje@debian.org>

       Clint Adams
              <clint@debian.org>

       Timo Savola

ÜBERSETZER

       Übersetzung bei Chris Leick <debian-l10n-german@lists.debian.org>

HANDBUCHSEITE

       größtenteils von J.H.M. Dassen <jdassen@debian.org>. Ziemlich viele Mods/Zusätze von Joost und Clint.

SIEHE AUCH

       debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG

Debian-Projekt                                   5. Oktober 2014                                     fakeroot(1)