Provided by: fakeroot_1.37.1.2-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   lzu_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 usw.) mit Dateien
       darin zu erstellen, die Root-Rechte haben und Root  gehören.  Ohne  fakeroot  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.

       fakeroot  funktioniert, indem es die Bibliotheksfunktionen zur Dateimanipulation (chmod(2), stat(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
       /usr/lib/*/libfakeroot.so* oder einem ähnlichen 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« enthält 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 eine subtilere Art.

       Beachten Sie außerdem, dass es am Besten ist, nicht den Bau der Pakete selbst unter fakeroot 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 fakeroot
       benötigt).

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 ausführen möchten. Benutzen  Sie  »--«,  falls  Sie  im  Befehl
              andere Optionen haben, die fakeroot bei der 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  inkonsistent
              sein  und  fakeroot  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
              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
              problemlos möglich.

       -u, --unknown-is-real
              Benutzt die echten Eigentümerschaften 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

       Es  folgt  eine  Beispielsitzung mit fakeroot. Beachten Sie, dass innerhalb der gefälschten 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 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(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 enthält.

UMGEBUNG

       FAKEROOTKEY
              Der  Schlüssel  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 »gefälschte« Sicht auf die Zugriffsrechte und
              Eigentümerschaften des Dateisystems (unter der Annahme, dass Daemon und verbindendes Programm  vom
              gleichen Benutzer gestartet wurden).

       LD_LIBRARY_PATH

       LD_PRELOAD
              fakeroot   wurde   mittels  Umhüllung  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üllt 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

              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.  Die
              korrekte  Art,  dies  zu  umgehen  ist,  open(2) und creat(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 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  Fällen)  open(2)  benutzte), unerklärbare Schutzverletzungen
              verursachen würde (das  heißt,  das  libc6-stat(2)  ruft  das  verhüllte  open(2)  auf,  das  dann
              libc6-stat(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, open(2) 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 »Kollisionen« 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  wie  GNU-configure
              könnten,  die  das  System  untersuchen,  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(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, open(2) erfolgreich sein wird, da die Dateirechte für Root
       überhaupt nicht geprüft werden. Es wurde entschieden, open(2) nicht zu verhüllen, da open(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).

KOPIEREN

       fakeroot wird unter den Bedingungen 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>  mit ziemlich vielen Anpassungen und Zusätzen 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)